私は 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