微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决提高 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?