0

私は R で作業しています。Google Earth Engine (NAIP 2018 NDVI) からダウンロードした解像度 60cm のラスター (.tif) タイルのディレクトリがあります。(ポリゴン データには人間を対象とする必要があるため、Google Earth Engine ではなく PC で解析を実行しています。) 52 個のタイルのサイズはそれぞれ 1.2 ~ 3.8 GB です。また、これらのラスターからゾーン平均を計算しようとしている 982 個のポリゴンもあります。私のコード (以下) は terra パッケージを使用しており、タイルを非常に大きな特異なラスターにモザイク化する代わりに、VRT (仮想ラスター) ファイルを作成することを選択しました。

このコードを Xeon Gold 6134 @ 3.2GHZ で実行しており、128GB の RAM を搭載しています。terraOptions() を何に設定しても、R はプロセッサまたは RAM の潜在能力のかなりの部分を使用することさえできません。

このコードでは、982 個のポリゴンすべてを実行するのに 11.8 日かかります。まだ試していないかもしれない特定のトリック/ツールを誰かが教えてくれたら、非常にありがたいです (たとえば、すべての terraOptions で作業してみました。raster パッケージと exact_extract パッケージを試しましたexact_extract()。 SpatRaster/VRT とsfポリゴン オブジェクトを入力として使用しているので、うまくいきません。非常に大きな特異なラスターをモザイク化するのを避けるためです。)

ありがとうございました。(データが大きすぎるか、人間の被験者に関連しているため、データを共有できないことをお詫びします...)ループされていないコードは次のとおりです。

編集:それぞれ1.2〜3.8GBの52タイル。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