提高 R 中 150gb+ 栅格切片的区域统计计算速度terra 包和 vrt

问题描述

我在 R 中工作 - 我有一个 60 厘米分辨率的光栅 (.tif) 图块目录,从 Google Earth Engine (NAIP 2018 NDVI) 下载。 (由于我的多边形数据对人类主体的要求,我在 pc 上而不是在 Google Earth Engine 上运行我的分析。)这 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()命令对我不起作用,因为我使用 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

example polygons image/map - spatially transformed to anonymize - 1 of 982 polygons to extract over the mosaic-ed raster or vrt of spatRasters

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...