gpt4 book ai didi

r - 在 R 中合并多个栅格

转载 作者:行者123 更新时间:2023-12-03 14:36:45 27 4
gpt4 key购买 nike

我一直在寻找一种节省时间的方法来合并 R 中的多个光栅图像。这些是来自乞力马扎罗山南部地区的相邻 ASTER 场景,我的目标是将它们放在一起以获得一个大图像。

这是我到目前为止得到的(对象“ast14dmo”表示 RasterLayer 对象列表):

# Loop through single ASTER scenes
for (i in seq(ast14dmo.sd)) {
if (i == 1) {
# Merge current with subsequent scene
ast14dmo.sd.mrg <- merge(ast14dmo.sd[[i]], ast14dmo.sd[[i+1]], tolerance = 1)
} else if (i > 1 && i < length(ast14dmo.sd)) {
tmp.mrg <- merge(ast14dmo.sd[[i]], ast14dmo.sd[[i+1]], tolerance = 1)
ast14dmo.sd.mrg <- merge(ast14dmo.sd.mrg, tmp.mrg, tolerance = 1)
} else {
# Save merged image
writeRaster(ast14dmo.sd.mrg, paste(path.mrg, "/AST14DMO_sd_", z, "m_mrg", sep = ""), format = "GTiff", overwrite = TRUE)
}
}

正如您肯定猜到的那样,该代码有效。但是,考虑到每个单个光栅对象大约有 70 mb 大,合并需要很长时间。我也尝试过 Reduce 和 do.call,但失败了,因为我无法传递绕过光栅文件不同来源的参数“tolerance”。

有人知道如何加快速度吗?

最佳答案

您可以使用 do.call

ast14dmo.sd$tolerance <- 1
ast14dmo.sd$filename <- paste(path.mrg, "/AST14DMO_sd_", z, "m_mrg.tif", sep = "")
ast14dmo.sd$overwrite <- TRUE
mm <- do.call(merge, ast14dmo.sd)

这里有一些数据,来自 raster::merge 中的示例
r1 <- raster(xmx=-150, ymn=60, ncols=30, nrows=30)
r1[] <- 1:ncell(r1)
r2 <- raster(xmn=-100, xmx=-50, ymx=50, ymn=30)
res(r2) <- c(xres(r1), yres(r1))
r2[] <- 1:ncell(r2)

x <- list(r1, r2)
names(x) <- c("x", "y")
x$filename <- 'test.tif'
x$overwrite <- TRUE
m <- do.call(merge, x)

关于r - 在 R 中合并多个栅格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15876591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com