Terra中重采样栅格:直接重采样还是先聚合再重采样?
栅格重采样:直接
resample还是先聚合再重采样? 你的场景最优解:直接用resample()
在你描述的场景中——两个同投影栅格,高分辨率是低分辨率的4倍但原点不同,最终只需对齐到目标低分辨率栅格——直接调用resample(rast_high, rast_low, method="bilinear")是最简洁高效的方案。它一步完成分辨率匹配+原点对齐,不需要额外处理聚合后的对齐问题,而且你的测试也显示,两种方法仅边缘区域有细微差异,核心数据结果一致。
什么时候适合先聚合再重采样?
先聚合后重采样并非无用,以下场景更适合这种流程:
- 需要保留中间低分辨率数据:如果后续工作中还要用到那个"高分辨率聚合后的低分辨率栅格"(比如和其他同分辨率栅格做运算),先聚合可以避免重复做重采样操作。
- 超大栅格性能优化:当高分辨率栅格数据量极大时,先通过
aggregate()把数据量按倍数压缩(比如4倍分辨率对应fact=4),再做重采样能大幅减少内存占用和计算时间。 - 自定义统计需求:如果需要对高分辨率栅格先做特定的聚合统计(比如取最大值、中位数,而非重采样的插值逻辑),再对齐到目标栅格,这种情况必须先做聚合。
代码差异解释
看你给出的示例代码:
rast_low <- rast(nrows=10, ncols=10, xmin=0, xmax=10, ymin=0, ymax=10) values(rast_low) <- 1:ncell(rast_low) origin(rast_low) <- 0.5 rast_high <- rast(nrows=48, ncols=40, xmin=1, xmax=11, ymin=-1, ymax=11) values(rast_high) <- 1:ncell(rast_high) # 直接重采样(最优方案) rast_resamp <- resample(rast_high, rast_low, method="bilinear") # 先聚合再重采样 rast_agg <- aggregate(rast_high, fact=2, fun="mean") rast_aggresamp <- resample(rast_agg, rast_low, method="bilinear") # 对比差异 diff <- rast_aggresamp - rast_resamp
两种方法的差异主要来自:
- 直接重采样是把高分辨率栅格的像素直接插值匹配到
rast_low的每个像素上,完全贴合目标栅格的范围和原点。 - 先聚合再重采样是先对高分辨率栅格做了一次均值聚合(这里
fact=2其实是把分辨率放大2倍,和你的4倍目标分辨率不匹配,可能是笔误),再把聚合后的栅格插值对齐到rast_low,边缘区域因为原始范围和目标范围不完全重叠,就会出现差异。
内容的提问来源于stack exchange,提问作者Jaken
相关产品推荐
相关产品推荐

