0

我在 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

在此处输入图像描述

4

0 回答 0