gpt4 book ai didi

r - r中使用mosaic合并多个geotiff

转载 作者:行者123 更新时间:2023-12-01 18:57:37 25 4
gpt4 key购买 nike

我在同一文件夹中有 50 个 geotiff 文件。它们全部代表世界不同地区的海拔数据。我想合并某些 geotiff 文件,我发现 R 中的mosaic 可能对我们有帮助。我已将这些 geotiff 移至同一文件夹中,并编写了一个 R 脚本,如下所示:

setwd()
a<-list.files(pattern="*.tiff",file.name=TRUE)
combind<-merge(a,fun=mean)

但是,该脚本返回了一个错误:as.data.frame(y) 中出现错误

请问如何改进我的脚本?

最佳答案

编辑 2023-06:使用 terra::vrt()terra::mosaic()

由于 gdalUtils 似乎已经有一段时间没有维护了,您可以使用与我原来的答案类似的方法,只需使用更新的 terra 包即可raster 包的后继者:

library(terra)

vrt(
x = list.files(path = "folder/to/images", pattern = "*.tif$", full.names = TRUE),
filename = "dem.vrt"
)
# afterwards read it as if it was a normal raster:
dem <- rast("dem.vrt")

另一种可能性是使用terra::mosaic()。这使您可以更好地控制重叠像素中的聚合函数。为此,您首先使用 sprc()rast 对象列表中创建一个栅格集合,然后使用 mosaic 将它们组合成一个栅格。

library(terra)
# vector of file names
fls <- list.files("your/folder", ".tif$", full.names = TRUE)
# list of rast objects
r_lst <- lapply(fls, rast)
# create spatial raster collection
coll <- sprc(r_list)

# combine all rasters
mosaic(coll, function = "mean")

使用gdalUtils的原始答案

您可以利用强大的GDAL功能。根据我的经验,这些比纯 R 代码快得多。

我的方法是使用library(gdalUtils):

首先,构建一个虚拟光栅文件( vrt ):

library(gdalUtils)
setwd(...)
gdalbuildvrt(gdalfile = "*.tif", # uses all tiffs in the current folder
output.vrt = "dem.vrt")

然后,将虚拟光栅复制到实际的物理文件:

gdal_translate(src_dataset = "dem.vrt", 
dst_dataset = "dem.tif",
output_Raster = TRUE # returns the raster as Raster*Object
# if TRUE, you should consider to assign
# the whole function to an object like dem <- gddal_tr..
options = c("BIGTIFF=YES", "COMPRESSION=LZW"))

另一个纯粹的(可能)光栅包解决方案是:

f <- list.files(path = "your/path", pattern = ".tif$", full.names = TRUE)
rl <- lapply(f, raster)

do.call(merge, c(rl, tolerance = 1))

您必须调整容差,因为光栅文件可能不会具有相同的来源。

关于r - r中使用mosaic合并多个geotiff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50234139/

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