R raster: che một raster bằng đa giác cũng loại bỏ các ô được che một phần?


9

Tôi muốn che giấu một raster dựa trên các giá trị của đa giác: tức là, đặt thành NA tất cả các giá trị của raster không được bao phủ bởi các đa giác. Tuy nhiên, dường như raster::mask()che dấu các tế bào (tức là đặt chúng thành NA) ngay cả khi chúng được che phủ một phần?

Điều này tương tự với câu hỏi: Cắt một raster bởi một đa giác - các ô bị thiếu một phần bên ngoài đa giác , nhưng không giống như crop(), mask()không có snap="out"tùy chọn.

Kiểm tra: ở đây điểm bên phải của hình tam giác chạm vào một ô, tuy nhiên các ô đó bị che đi.

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)

nhập mô tả hình ảnh ở đây

Câu trả lời:


15

Các tài liệu thực sự là một chút bối rối. Nó nói rằng:

[...] tất cả các ô không được bao phủ bởi đối tượng Không gian được đặt thành updatevalue

Nhưng trên thực tế, ở đây bao gồm phương tiện duy nhất nếu các tế bào trọng tâm là trong đa giác. Thật vậy, mask()các cuộc gọi rasterize(), trong đó nêu:

Đối với đa giác, các giá trị được chuyển nếu đa giác bao phủ trung tâm của một ô raster.

Giải pháp tôi tìm thấy là sử dụng rasterize()trực tiếp, với getCover=TRUEtùy chọn, trả về phạm vi bảo hiểm của từng ô. Sau đó, đặt thành giá trị NA có 0 và sử dụng giá trị này làm mặt nạ mới:

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

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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.