R:大規模なDEMをダウンロードし、投影を変更し、小規模に調整する


11

これは、GISソフトウェアで数秒しかかからないプロセスです。Rでそれをしようとすると、大量のメモリを使用して失敗します。私のコードに何か問題がありますか、これはRができないことですか?RがGrass内で動作することを読んだことがありますが、R内からGrass関数を使用できますか?

library(raster)

# I have many environmental rasters in this format
new_r <- raster(ncol=615, nrow=626, xmn=-156.2, xmx=-154.8, ymn=18.89, ymx=20.30)
res(new_r) <- 0.00225
projection(new_r) <- "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs +towgs84=0,0,0"

R> new_r ### not too big with a few hundred cells per side
class       : RasterLayer 
dimensions  : 627, 622, 1  (nrow, ncol, nlayers)
ncell       : 389994 
resolution  : 0.00225, 0.00225  (x, y)
projection  : +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs +towgs84=0,0,0 
extent      : -156.2, -154.8, 18.89, 20.3  (xmin, xmax, ymin, ymax)
values      : none

# I get the DEM at much higher resolution (zipfile is 182Mb)
zipurl <- "ftp://soest.hawaii.edu/coastal/webftp/Hawaii/dem/Hawaii_DEM.zip"
DEMzip <- download.file(zipurl, destfile = "DEMzip")
unzip("DEMzip", exdir = "HIDEM")
HIDEM <- raster("HIDEM/hawaii_dem")

R> HIDEM ### 10m resolution, file is way too big
class       : RasterLayer 
dimensions  : 15067, 13136, 1  (nrow, ncol, nlayers)
ncell       : 197920112 
resolution  : 10, 10  (x, y)
projection  : +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0 
extent      : 179066, 310426, 2093087, 2243757  (xmin, xmax, ymin, ymax)
values      : HIDEM/hawaii_dem 
min value   : 0 
max value   : 4200 

# the following line fails (after a long time)
new_HIDEM <- projectRaster(HIDEM, new_r)

好奇心が強い、あなたが使用しているパッケージは何ですか?
djq

@celenius:このパッケージが呼び出されるraster
J.勝利。

回答:


9

ソースをraster見ると、データセットがメモリに収まるかどうかを推測し、収まる場合はメモリ内で、そうでなければディスク上で操作を実行します。chunksize(一度に処理するセル)とmaxmemory(メモリに読み込むセルの最大数)を明示的に設定することで、強制的に計算を実行できます。

setOptions(chunksize = 1e+04, maxmemory = 1e+06)

または、GDALで直接変換を実行できます。

gdalwarp -t_srs '+proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0' HIDEM/hawaii_dem hawaii_dem_utm.tif

これはおそらく最速のオプションであり、GIS環境を明示的に設定する必要はありません。


それはそれをしませんでしたが、これはしました:setOptions(chunksize = 1e+04, maxmemory = 1e+06)8分、実際のGISをインストールして使用するのにかかるよりもはるかに短い時間。
J.ウィン。

@J。ウィンチェスター:回答を更新し、より良いアプローチとして設定を含めるようにしました。パッケージの作成者は、いつ、なぜクラッシュするのかを知りたいと思うでしょうし、これを反映するようにデフォルトを更新することを望みます。
scw

1
ターゲットが処理できる場合は、gdalwarpからGeoTIFFに(ロスレス)圧縮とタイリング(デフォルトは256x256)を追加することをお勧めします。-co COMPRESS = LZW -co TILED = YES
mdsumner

ロバート・ハイマンズに事件について知らせた。より小さいDEMでは、デフォルトの設定は最適に近いため、これまでのところ謎です。
J.ウィン。

すごい!これにより、RasterLayerを(3GB)netcdfにエクスポートすることもできましたwriteRaster
デビッドルバウアー

3

Rとグラスの統合にspgrass6パッケージを使用することもできます。著者はRoger Bivand(spの著者)です

このパッケージには、R内で草を完全に実行(またはその逆)し、Rと草の間でデータを交換する多くの機能があります。

詳細については、http//cran.r-project.org/web/packages/spgrass6/index.html


1

こんにちは、

これは、GISソフトウェアで数秒しかかからないプロセスです。Rでそれをしようとすると、大量のメモリを使用して失敗します。

あなたは質問に答え、GRASSまたはGDALでそれを行い、他のタスクのためにRのままにします。


1
完全を期すために、Rで草を実行するにはspgrassパッケージを参照する必要があります。
johanvdw

1
3番目のオプションは、saga gisの使用です。サガとRを接続するモジュール(RSAGA)があります。
johanvdw

このR関数はGDALを使用するように設計されていますが、この場合はうまく使用されていないようです。私の質問は、「このタスクを実行できるGISソフトウェアは何ですか」ではなく、「Rでこのタスクを最適に達成するにはどうすればよいか」です。
J.ウィン。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.