Rラスター:ポリゴンでラスターをマスキングすると、部分的に覆われたセルも削除されますか?


9

ポリゴンの値に基づいてラスターをマスクしたい:つまり、ポリゴンでカバーされていないラスターのすべての値をNAに設定します。ただし、raster::mask()部分的に覆われている場合でも、セルをマスクする(つまり、NAに設定する)ようです。

これは質問に似ています:ポリゴンでラスターをトリミングする-部分的にポリゴンの外側にあるセルが欠落していますが、とは異なりcrop()、オプションmask()がありませんsnap="out"

チェック:三角形の正しい点がセルに接触していますが、そのセルはマスクされています。

library(raster)
library(sp)

r <- raster(xmn=1, xmx=5, ymn=1, ymx=5, nrows=4, ncols=4)
r[] <- 1:length(r)

Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(4.1,4,2),c(2,3,2)))

SpP = SpatialPolygons(list(Polygons(list(Sr1), "s1"), Polygons(list(Sr2), "s2")), 1:2)

plot(mask(r, SpP))
plot(SpP,  add=TRUE)

ここに画像の説明を入力してください

回答:


15

ドキュメントは確かに少し混乱しています。それはそれを述べています:

[...] Spatialオブジェクトでカバーされていないすべてのセルがupdatevalueに設定されます

しかし、実際には、ここでカバーされるのは、セルの重心がポリゴン内にある場合のみです。実際、mask()はを呼び出しrasterize()ます。

ポリゴンの場合、ポリゴンがラスターセルの中心をカバーする場合、値が転送されます。

私が見つけた解決策は、各セルのカバレッジを返すオプションを使用してrasterize()直接使用することでしたgetCover=TRUE。次に、ゼロを持つNA値に設定し、それを新しいマスクとして使用します。

SpP_ras <- rasterize(SpP, r, getCover=TRUE)
SpP_ras[SpP_ras==0] <- NA

plot(mask(r, SpP_ras))
plot(SpP,  add=TRUE)

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.