我有两个分辨率不同的栅格,我想要的是基于栅格B的比例覆盖来遮蔽栅格A的区域。例如,如果至少1/3,则我希望遮蔽栅格A的像素。其中有一个被光栅B覆盖。 我不知道如何执行此操作,因此将不胜感激。
library(raster)
A <- raster(matrix(1:60,3,4))
B <- raster(matrix(1:20,5,6))
答案 0 :(得分:0)
您的栅格在x和y上的0和1之间的相同范围内具有不同的分辨率。 A是4x3,B是6x5。
par(mfrow=c(1,2))
plot(A)
plot(B)
第一步可能是将两者对齐以具有相同的分辨率,以便我们可以应用遮罩功能。 raster :: disaggregate函数将每个像元分成整数列和行。在这种情况下,在低分辨率下,我可以将每个单元格拆分为另一个矩阵的列数和行数,因此A的四列可以分别拆分为6,B的六列可以拆分为4。这样两个都宽24。 (感谢this answer的帮助。)
A_resize <- disaggregate(A, fact = c(dim(B)[2], dim(B)[1]), method = "bilinear")
B_resize <- disaggregate(B, fact = c(dim(A)[2], dim(A)[1]), method = "bilinear")
par(mfrow=c(1,2))
plot(A_resize)
plot(B_resize)
我正在解释您的问题,表示当同一位置B的值小于最大值的1/3时,您想屏蔽A。
我们可以制作B_resize
的修改版本,该版本将最大<1/3的所有内容重新分类为NA。 (感谢this answer的帮助。)
B_mask <- reclassify(B_resize,
rbind(c(0, B@data@max * 1/3, NA),
c(B@data@max * 1/3, B@data@max, 1)))
plot(B_mask)
然后我们可以用它来掩盖A:
par(mfrow = c(1,1))
plot(mask(A_resize,B_mask))