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

使用terra将模型输出重采样至任意网格:resample/project仅返回子集问题

解决方案:用terra包将栅格下采样到指定自定义网格

问题原因

你遇到的核心问题是原始栅格与目标栅格的空间范围不匹配:

  • 原始栅格raw是全球范围(经度-0.56359.44,纬度-89.789.7)
  • 你定义的目标栅格newgrid仅覆盖极小的局部范围(经度1128,纬度164)

因此resample()和project()只会处理两个栅格重叠的区域,自然返回的是子集而非完整的下采样结果。


针对两种常见需求的解决方案

需求1:下采样到与原始范围一致、指定分辨率的网格

这是最典型的下采样场景——保持原始数据的空间范围,仅将分辨率调整为指定的行数/列数:

library(terra)

# 构建原始栅格
raw <- rast(ext(c(-0.5625, 359.4375, -89.70215791342, 89.70215791342)),nrow=160,ncol=320)
values(raw) <- (1:ncell(raw))/10000+c(rep(1,ncell(raw)/4),rep(2,ncell(raw)/4),rep(1,ncell(raw)/4),rep(2,ncell(raw)/4))

# 创建与原始栅格范围、CRS一致,分辨率为64行128列的目标栅格
newgrid <- rast(ext(raw), nrow=64, ncol=128, crs=crs(raw))

# 执行下采样(用均值聚合更适合下采样场景,替代双线性插值)
new_raster <- resample(raw, newgrid, method="average")

# 查看结果
plot(new_raster)

注:如果聚合因子是整数(比如原始160行→目标80行,因子为2),也可以用aggregate(raw, fact=2, fun=mean)实现更高效的聚合下采样。

需求2:将原始栅格转换到自定义范围的指定网格

如果你确实需要将全球数据映射到自定义的局部范围(如经度1128、纬度164),可以直接使用resample(),但要明确这是将原始数据的重叠区域转换到目标网格,而非全局拉伸:

library(terra)

# 构建原始栅格
raw <- rast(ext(c(-0.5625, 359.4375, -89.70215791342, 89.70215791342)),nrow=160,ncol=320)
values(raw) <- (1:ncell(raw))/10000+c(rep(1,ncell(raw)/4),rep(2,ncell(raw)/4),rep(1,ncell(raw)/4),rep(2,ncell(raw)/4))

# 定义自定义范围的目标栅格
newgrid <- rast(xmin=1,xmax=128,ymin=1,ymax=64,nrow=64,ncol=128, crs=crs(raw))

# 重采样到目标网格
new_raster <- resample(raw, newgrid, method="bilinear")

# 查看结果
plot(new_raster)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:22:04