R を使用して、ポリゴン レイヤーを使用してラスター レイヤーからデータを抽出しようとしています。ポリゴンはラスター セルよりもはるかに小さいです。
今、私はライブラリextract()
から呼び出しraster
ます:
a <- extract(raster, polygons, weights = TRUE, small = TRUE)
a
# ...
# [[1551]]
# value weight
# 209 0.03 # top left cell - more than 50% of the polygon area
2 つの問題があります。重みは、ポリゴンによってカバーされるセル領域の割合であり、重みは 1/100 に丸められます。私の場合、出力には左上のセルのみが表示されます (値 209) - 他の 3 つのセルの重みはゼロに丸められ、除外されました。ただし、左下のセルはポリゴンの大部分をカバーしているため、これも含める必要があります。
適切な加重平均が必要です。これを使用して他の方法で行うことはできますextract()
か? それとも他の方法ですか?
PS: 余談: の重みextract()
はうまく設計されていないと思います。重みは、特定のセルがカバーするポリゴン領域の割合である必要があります。その逆ではありません。そうすれば、多角形の加重平均も計算しやすくなり (各行の 2 つの数値を乗算して合計するだけです)、1/100 に丸めることは大きな問題にはなりません。
再現可能な例- (ファイルをダウンロード- 簡易版、実際のデータははるかに大きい):
require(raster)
rast <- raster("my.tif")
poly <- readOGR(".", "socc_buff_Rx")
a <- extract(rast, poly, weights = TRUE, small = TRUE)
a