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

粗分辨率火烧面积栅格向高分辨率可燃烧栅格条件分解的问题排查

解决流程与修正步骤

1. 修复「extents do not match」错误

terra::zonal要求区域栅格(BurntArea)与值栅格(binary_raster)的范围、分辨率完全匹配,而你提供的两个栅格范围存在差异,因此先将高分辨率二元栅格裁剪到粗分辨率火烧面积栅格的范围:

# 裁剪二元栅格至BurntArea的范围,保证两者范围一致
binary_cropped <- terra::crop(binary_raster, BurntArea)

再执行分区统计,计算每个粗像元内的可燃烧像素总数:

count_brpixel <- terra::zonal(binary_cropped, BurntArea, fun = "sum", as.raster = TRUE)

2. 计算单个可燃烧像素的火烧面积(处理除以0异常)

直接除法会导致无任何可燃烧像素的粗像元(count_brpixel=0)出现Inf或NA,需提前修正:

burnt_per_pixel <- BurntArea / count_brpixel
# 将无限值、NA替换为0(无火烧面积可分配)
burnt_per_pixel[is.infinite(burnt_per_pixel) | is.na(burnt_per_pixel)] <- 0

3. 匹配高分辨率(替换disagg为resample)

两个栅格的分辨率为非整数倍关系(506.25倍),terra::disagg仅支持整数分解倍数,因此改用resample实现分辨率匹配,选择最近邻插值保证粗像元值完整分配到对应细像元:

# 将粗分辨率结果重采样到二元栅格的分辨率
burnt_per_pixel_disagg <- terra::resample(burnt_per_pixel, binary_cropped, method = "near")

4. 生成最终高分辨率火烧面积栅格

若需要覆盖原始二元栅格的全范围(-180至180,-90至90),先将重采样后的栅格扩展到全范围并填充0,再与原始二元栅格相乘:

# 扩展到原始二元栅格的范围,超出BurntArea的区域填充0
burnt_per_pixel_disagg_full <- terra::extend(burnt_per_pixel_disagg, binary_raster, fill = 0)
# 仅给可燃烧像素分配火烧面积
final_file <- burnt_per_pixel_disagg_full * binary_raster

逻辑验证

  • 最终每个可燃烧像素的火烧面积 = 粗像元火烧面积比例 / 粗像元内可燃烧像素总数,符合均等分配需求
  • 不可燃烧像素(值为0)的最终火烧面积为0,符合规则
  • 扩展操作保证结果覆盖原始二元栅格的完整范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:33:20