You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R基于3个地理空间文件(raster和shape)通过条件语句创建新raster图层

基于土地利用、土壤质地和碳值栅格生成基准栅格的解决方案

一、前置准备

  • 安装并加载核心处理包:
    install.packages("terra")
    library(terra)
    
  • 确认所有数据坐标系一致(你已说明满足此条件,可跳过验证;若需验证,可使用crs(landuse)、crs(texture)查看)

二、读取空间数据

  • 读取土地利用矢量(shapefile):
    landuse <- vect("你的土地利用文件路径/landuse.shp")
    
  • 读取土壤质地栅格:
    texture <- rast("你的土壤质地文件路径/texture.tif")
    
  • 读取土壤有机碳栅格:
    carbon <- rast("你的碳值文件路径/carbon.tif")
    

三、生成目标区域掩码

只保留农田/草地对应的栅格区域,其余设为NA(假设土地利用字段名为land_type,类别值为"农田"、"草地"):

# 将矢量转为与碳值栅格匹配的栅格
land_mask <- rasterize(landuse, carbon, field = "land_type")
# 过滤出目标土地利用类型,生成掩码
land_mask <- ifel(land_mask %in% c("农田", "草地"), 1, NA)

四、应用条件逻辑生成基准栅格

使用向量化条件判断(替代低效的循环)实现你的基准分配规则:

# 初始化结果栅格,默认值为NA
new_raster <- carbon
values(new_raster) <- NA

# 质地为"light"的条件分支
new_raster <- ifel(land_mask == 1 & texture == "light" & carbon >= 0.68 & carbon <= 1.23, 1, new_raster)
new_raster <- ifel(land_mask == 1 & texture == "light" & carbon > 1.23, 2, new_raster)

# 质地为"middle I"的条件分支
new_raster <- ifel(land_mask == 1 & texture == "middle I" & carbon < 2.4, 0, new_raster)

# 可继续添加其他质地和碳值的条件规则,格式同上

五、保存结果

将生成的基准栅格导出为tif文件:

writeRaster(new_raster, "输出文件路径/output_baseline.tif", overwrite = TRUE)

重要提示

  • 避免用嵌套循环处理栅格:栅格数据通常包含数万甚至数百万像元,循环会导致处理速度极慢,terra的向量化函数(如ifel)是底层优化实现,效率提升显著。
  • 若土地利用的字段名、类别值与示例不同,需对应修改代码中的字符串。
  • 可使用plot(new_raster)快速可视化结果,验证规则是否正确应用。

内容的提问来源于stack exchange,提问作者user18791303

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:45:10