R raster: menutupi raster dengan poligon juga menghilangkan sel yang tertutup sebagian?

9

Saya ingin menutup raster berdasarkan nilai-nilai poligon: yaitu, setel ke NA semua nilai raster yang tidak tercakup oleh poligon. Namun, tampaknya raster::mask()topeng sel (yaitu mengaturnya untuk NA) bahkan jika mereka sebagian tertutup?

Ini mirip dengan pertanyaan: Memotong raster dengan poligon - sel yang hilang sebagian berada di luar poligon , tetapi tidak seperti itu crop(), mask()tidak memiliki snap="out"pilihan.

Periksa: di sini titik kanan segitiga menyentuh sel, namun sel-sel itu ditutup.

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)

masukkan deskripsi gambar di sini

Matifou
sumber

Jawaban:

15

Dokumentasinya memang agak membingungkan. Ini menyatakan bahwa:

[...] semua sel yang tidak tercakup oleh objek Spasial diatur untuk memperbarui nilai

Tetapi sebenarnya, yang dibahas di sini hanya berarti jika centroid sel berada di dalam poligon. Memang, mask()panggilan rasterize(), yang menyatakan:

Untuk poligon, nilai ditransfer jika poligon menutupi bagian tengah sel raster.

Solusi yang saya temukan adalah menggunakan rasterize()secara langsung, dengan getCover=TRUEopsi, yang mengembalikan cakupan setiap sel. Kemudian atur ke nilai-nilai NA yang memiliki nol, dan gunakan itu sebagai topeng baru:

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

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

masukkan deskripsi gambar di sini

Matifou
sumber