如何使用 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
的替代方法。
至于选择最佳分辨率等,这取决于您的需求以及您的数据可能合理支持的内容。但一个重要的一般考虑因素是您希望尽可能避免重采样 --- 因为它会降低数据质量。
我有三个部分重叠的 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
的替代方法。
至于选择最佳分辨率等,这取决于您的需求以及您的数据可能合理支持的内容。但一个重要的一般考虑因素是您希望尽可能避免重采样 --- 因为它会降低数据质量。