我有两个不同分辨率的栅格,我想要的是基于栅格B的比例覆盖来遮蔽栅格A的区域。例如,如果至少1/3的像素被栅格B覆盖,我想遮蔽栅格A的像素。
我不知道如何做到这一点,所以任何帮助将不胜感激。
library(raster)
A <- raster(matrix(1:60,3,4))
B <- raster(matrix(1:20,5,6))发布于 2019-09-21 12:40:12
您的光栅在x和y上的0和1之间是相同范围内的不同分辨率。A是4x3,B是6x5。
par(mfrow=c(1,2))
plot(A)
plot(B)

第一步可能是将两者对齐,使其具有相同的分辨率,以便我们可以应用掩码函数。raster::disaggregate函数将每个单元格拆分为整数个列和行。在这种情况下,在低分辨率的情况下,我可以将每个单元格拆分为另一个矩阵的列数和行数,因此A的4列可以拆分为6列,B的6列可以拆分为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的值小于max的1/3时,你想屏蔽掉A。
我们可以制作一个修改版本的B_resize,它将所有小于最大值1/3的内容重新分类为安娜。(感谢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))

https://stackoverflow.com/questions/57754499
复制相似问题