-->

合并中的R多个栅格(Merging multiple rasters in R)

2019-08-20 06:23发布

我一直试图找到一种省时高效的方式来合并多个光栅图像中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大。 我也试图减少和do.call,但失败,因为我不能错过参数“宽容”规避该光栅文件的不同来源。

任何人有如何加快速度的想法?

Answer 1:

您可以使用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)
x$filename <- 'test.tif'
x$overwrite <- TRUE
m <- do.call(merge, x)


Answer 2:

从Raster包中的“合并”功能是有点慢。 对于大型项目,以更快的选择是与R. GDAL命令工作

library(gdalUtils)
library(rgdal)

建立你想加入(当前工作目录)的所有光栅文件的列表。

all_my_rasts <- c('r1.tif', 'r2.tif', 'r3.tif')

做一个模板栅格文件建立到。 认为这是一个很大的空白画布瓷砖添加的。

e <- extent(-131, -124, 49, 53)
template <- raster(e)
projection(template) <- '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
writeRaster(template, file="MyBigNastyRasty.tif", format="GTiff")

合并所有光栅像素块成一个大的光栅。

mosaic_rasters(gdalfile=all_my_rasts,dst_dataset="MyBigNastyRasty.tif",of="GTiff")
gdalinfo("MyBigNastyRasty.tif")

这应该相当不错的速度(快于光栅包合并),但如果你有成千上万的瓷砖,你甚至可能要考虑先建立一个VRT。



Answer 3:

您可以使用Reduce这样的例子:

Reduce(function(...)merge(...,tolerance=1),ast14dmo.sd)


Answer 4:

我面临着同样的问题,我用

#Read desired files into R
data_name1<-'file_name1.tif' 

r1=raster(data_name1)

data_name2<-'file_name2.tif'

r2=raster(data_name2)

#Merge files
new_data <- raster::merge(r1, r2)

虽然它并没有产生新的合并光栅文件,它存储在数据环境和打印时产生的合并地图。



Answer 5:

SAGA GIS镶嵌工具( http://www.saga-gis.org/saga_tool_doc/7.3.0/grid_tools_3.html )为您提供了最大的灵活性合并数字层,并在并行默认运行! 你只需要所有栅格/影像SAGA .sgrd格式首先转换,然后运行命令行saga_cmd。



文章来源: Merging multiple rasters in R