2

大きな (266,000 要素、1.7Gb) SpatialPolygonsDataFrame があり、これを 90m 解像度の RasterLayer (~100,000,000 セル) に変換しようとしています。

SpatialPolygonsDataFrame には関心のある 12 の変数があるため、12 の RasterLayers を作成する予定です。

現在、 を使用するrasterize()と、各変換に約 2 日かかります。そのため、合計処理時間は約 1 か月と予想されます。

誰でもより速いプロセスを提案できますか? これは、ArcMap で 10 ~ 40 倍高速になると思いますが、一貫性を保つために R で実行したいと考えています。これは楽しい挑戦です。

一般的なコード

######################################################
### Make Rasters
######################################################
##Make template
r<-raster(res=90,extent(polys_final))

##set up loop
loop_name <- colnames(as.data.frame(polys_final))

for(i in 1:length(loop_name)){
a <-rasterize(polys_final, r, field=i)
writeRaster(a, filename=paste("/Users/PhD_Soils_raster_90m/",loop_name[i],".tif",sep=""), format="GTiff")
}
4

1 に答える 1

3

gdal_rasterizeこれは、GDAL、特に関数を使用する場合だと思います。

多くの空間処理を行っている場合は、マシンに GDAL が既にインストールされている可能性があり、コマンドを使用して R 内から GDAL コマンドを実行できますsystem()raster私はテストも何もしませんでしたが、これはRでパッケージを使用するよりもはるかに高速になるはずです.

たとえば、次のコードは河川のシェープファイルからラスターを作成します。このコードは、フィーチャが存在する場合は値が 1 で、フィーチャが存在しない場合は値が 0 の出力ファイルを作成します。

path_2_gdal_function <- "/Library/Frameworks/GDAL.framework/Programs/gdal_rasterize"
outRaster <- "/Users/me/Desktop/rasterized.tiff"
inVector <- "/Full/Path/To/file.shp"
theCommand <- sprintf("%s -burn 1 -a_nodata 0 -ts 1000 1000 %s  %s", path_2_gdal_function, inVector, outRaster)
system(theCommand)
  • -ts引数は、出力ラスターのサイズをピクセル単位で提供します
  • 引数は-burn、フィーチャが存在する出力ラスターに入れる値を指定します
  • -a_nodata特徴が見つからない場所にどの値を入れるかを示します

あなたの場合、-a attribute_name出力ラスターに焼き付けられる入力ベクトルの属性の名前を指定する引数を追加する必要があります。可能な引数の詳細については、こちらをご覧ください。

注:関数は、関数sprintf()を使用してコマンドラインに渡されるテキスト文字列をフォーマットするためにのみ使用されますsystem()

于 2018-02-01T17:15:59.240 に答える