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

Terra栅格重采样丢失小区域:原因及保留小区域的方法

Terra栅格重采样小区域丢失的问题解决

问题现象

  • 原始栅格叠加效果:原始栅格叠加效果
  • 重采样后效果:重采样后栅格效果

精细栅格分辨率为0.1m,粗糙栅格分辨率为0.5m。将精细栅格重采样至粗糙栅格分辨率时,仅包含少量精细像素的粗糙单元格直接消失了。

使用的代码如下:

# 绘制原始栅格
plot(fine, col = "red")
plot(rough, add = T)
  
# 最大值法重采样
resampled <- resample(fine, rough, "max")

# 绘制重采样后的栅格
plot(resampled , col = "red")

需求:输出栅格中,只要精细栅格存在至少一个像素的区域都能保留。


问题原因

核心原因是**resample默认的"max"方法未忽略NA值**:当粗糙栅格的单元格内同时包含精细栅格的非NA像素和大量NA像素时,未设置na.rm=TRUE的max计算会直接返回NA,导致这些仅含少量精细像素的单元格被判定为无值区域,绘图时自然消失。

少数情况下也可能存在栅格对齐偏差:精细栅格与粗糙栅格的原点、范围未完全匹配,导致小区域的精细像素刚好落在粗糙栅格单元格的采样范围之外,但从叠加图来看这种概率极低。


解决方法

针对需求,有两种直接可行的方案:

方案1:自定义重采样函数(保留原始像素最大值)

使用带na.rm=TRUE的自定义max函数,确保只要单元格内有非NA像素,就返回其最大值:

# 绘制原始栅格
plot(fine, col = "red")
plot(rough, add = T)

# 自定义max重采样,忽略NA值
resampled <- resample(fine, rough, fun = function(x) max(x, na.rm = TRUE))

# 替换全NA单元格产生的NaN为标准NA(保证栅格格式一致)
resampled[is.nan(resampled)] <- NA

# 绘制重采样后的栅格
plot(resampled, col = "red")

方案2:二进制标记(仅保留存在性)

如果只需要标记“是否存在精细栅格像素”,不需要保留原始值,可以先将精细栅格转为二进制栅格,再用"any"方法重采样:

# 将精细栅格转为二进制(非NA为1,NA为0)
fine_binary <- classify(fine, cbind(NA, 0), right=TRUE)
fine_binary[!is.na(fine)] <- 1

# 重采样:只要单元格内有1(即存在精细像素)就返回1
resampled_binary <- resample(fine_binary, rough, fun = any)

# 绘制结果
plot(resampled_binary, col = "red")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:30:41