バウンディングボックス内のラスター値をカウントする(空間範囲)


11

バウンディングボックスが与えられた場合、value == 11)arcpy、または2)Rのラスターパッケージのラスター内の特定の値(たとえば、の数に興味がある)の数をカウントするにはどうすればよいですか?

回答:


10

ではRcrop値を抽出するために使用し、(たとえばtableそれらをカウントします。


例として、地球を覆う1度のグリッドを作成しましょう。

library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)

extent使用するために境界ボックスはオブジェクトに変換されますcrop

y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)

それを行った後、集計は簡単です:

table(getValues(y.raster))

この出力では、最初の行に値が一覧表示され、2番目の行に対応するカウントが一覧表示されます。

165 166 167 ... 257 258
  1   2   3 ...   2   1

チェックとして、ラスターと範囲をプロットできます。

plot(x.raster)
plot(y.extent, add=T)

地図


3

マイナーな追加:(メモリセーフな)関数 "freq"も使用できます。

whuberの答えに従って:

library(raster)
x.raster <- raster(outer(179:0, 0:359, '+'), xmn=-180, xmx=180, ymn=-90, ymx=90)
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)

しかし今すぐ:

freq(y.raster)

これは、非常に大きなオブジェクト(ファイル上のラスター)でのみ重要です。'freq'は2列の行列(値/カウント)を返し、 'table'は表を返します。


とにかく、画像をトリミングするのではなく、空間クエリを実行するだけですか?切り取りは処理が非常に遅い場合があります。

1
切り取りは非常に高速でなければなりません。テストとして、crop地球を覆う1分間のグリッドの操作のタイミングを計りました。10800行と21600列(233,280,000セル)があります。トリミングは、合計経過時間1.36秒で実行されました。
whuber

また、高速であるべきだと思いますが、上記とこの空間クエリを比較することができます。v <- extract(x.raster, y.extent) その後に table(v)
Robert Hijmans

1
ロバート、どの図書館のextract出身ですか?これは一部ではなくrasterRヘルプシステム(??)もこの名前の関数を見つけられません。
whuber

これは、ラスターパッケージの関数です。?extractは(少なくとも私にとっては)それを示しています
ロバートHijmans
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.