我在 R 中工作 - 我有一个分辨率为 60 厘米的栅格 (.tif) 切片目录,从 Google 地球引擎 (NAIP 2018 NDVI) 下载。(由于人类受试者对我的多边形数据的要求,我在 pc 上而不是在 Google 地球引擎中运行我的分析。)这 52 个图块的大小为 1.2-3.8GB。我也有 982 个多边形,我正在尝试从这些栅格中计算区域平均值。我的代码(如下)使用 terra 包,我没有将切片镶嵌成一个非常大的单一栅格,而是选择创建一个 VRT(虚拟栅格)文件。
我在 Xeon Gold 6134 @ 3.2GHZ 上运行此代码,并拥有 128GB 的内存。无论我将 terraOptions() 设置为什么,R 甚至都没有接近使用我的处理器或内存潜力的很大一部分。
使用此代码,所有 982 个多边形将需要 11.8 天才能运行。如果有人能指出我可能尚未尝试过的特定技巧/工具,我将不胜感激(例如,我尝试使用所有 terraOptions,我尝试了 raster 包和exact_extract 包。该exact_extract()
功能不会t 对我有用,因为我使用 SpatRaster/VRT 和sf
多边形对象作为输入 - 再次避免镶嵌非常大的奇异栅格。)
谢谢你。(我很抱歉我无法共享数据,因为它太大或与人类主题相关......)这是未循环的代码:
编辑:52 个 1.2-3.8GB 的磁贴。我最初对 150GB 总目录大小的报价不正确,因为这是 ArcGIS 中的压缩大小。
library(terra)
c <- "path/to directory of raster tiles"
v <- "path/new.vrt" # name of virtual raster
ras_lst <- list.files(c, full.names=T, pattern=".tif$")
terra::vrt(ras_lst, v, overwrite = T)
ras <- rast(v)
w <- vect("path to polygon shapefile")
w2 <- terra::project(w, terra::crs(ras)) # transform proj to same as raster tiles
e2 <- terra::extract(ras, w2, fun="mean")
e2 # zonal mean value for 1 polygon (of 982)
show(ras) 产生:
class : SpatRaster
dimensions : 212556, 247793, 1 (nrow, ncol, nlyr)
resolution : 5.389892e-06, 5.389892e-06 (x, y)
extent : -118.964, -117.6284, 33.68984, 34.8355 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs
source : naip2018mos.vrt
name : naip2018mos