如何使用 R 中的 terra 包对部分重叠的栅格进行重采样?

How to resample partially overlapping rasters using terra package in R?

我有三个部分重叠的 DEM 栅格,它们具有不同的起源、分辨率(仅略有不同)和范围。我知道我需要使用 terra 的重采样功能而不是合并或聚合,因为不同的来源等,但我不确定如何启动一个空栅格以用于具有适当原点、分辨率和范围的重采样,或者如何处理重叠区域。

是否有推荐的方法来选择使用现有栅格的原点和分辨率(例如中值与 min/max 值)?如何最好地处理重叠数据?有没有一种有效的方法来生成这样的栅格?

以下是展示如何你可以做到这一点的方法。

示例数据

library(terra)
x <- rast(xmin=0, xmax=10, ymin=0, ymax=10, res=1, vals=1)
y <- rast(xmin=9, xmax=19, ymin=0, ymax=10, res=0.9, vals=2)
z <- rast(xmin=0, xmax=10, ymin=8.1, ymax=18.1, res=1, vals=3)

您可能希望使用其中一个输入栅格作为模板。假设您喜欢 y。在那种情况下:

a <- list(x, z)
b <- lapply(a, \(i) {
     x <- extend(rast(y), i)
     resample(i, crop(x, i, "out"))
   })

b <- sprc(c(b, y))
m <- merge(b)
 

或者创建一个新的模板光栅。那样的话,先求出合并的extent

a <- list(x, y, z)
b <- sapply(a, \(i) ext(i) |> as.vector())
e <- ext(min(b[1,]), max(b[2,]), min(b[3,]), max(b[4,]))

# use the extent to create a raster with the desired spatial resolution 
r <- rast(e, res=1)

现在如上:

gg <- lapply(a, \(i) resample(i, crop(r, i, "out")))
g <- merge(sprc(gg))

或者像这样

src <- sprc(a)
ss <- impose(src, r)
s <- max(ss, na.rm=TRUE)

我想其中一些可以包装到 terra 方法中。

另请参阅 mosaic 作为 merge 的替代方法。

至于选择最佳分辨率等,这取决于您的需求以及您的数据可能合理支持的内容。但一个重要的一般考虑因素是您希望尽可能避免重采样 --- 因为它会降低数据质量。