如何根据其他栅格R的比例覆盖范围删除栅格像素

时间:2019-09-02 09:28:02

标签: r raster masking cover

我有两个分辨率不同的栅格,我想要的是基于栅格B的比例覆盖来遮蔽栅格A的区域。例如,如果至少1/3,则我希望遮蔽栅格A的像素。其中有一个被光栅B覆盖。 我不知道如何执行此操作,因此将不胜感激。

library(raster)

A <- raster(matrix(1:60,3,4))
B <- raster(matrix(1:20,5,6))

1 个答案:

答案 0 :(得分:0)

您的栅格在x和y上的0和1之间的相同范围内具有不同的分辨率。 A是4x3,B是6x5。

par(mfrow=c(1,2)) 
plot(A)
plot(B)

enter image description here

第一步可能是将两者对齐以具有相同的分辨率,以便我们可以应用遮罩功能。 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)

enter image description here

我正在解释您的问题,表示当同一位置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)

enter image description here

然后我们可以用它来掩盖A:

par(mfrow = c(1,1))
plot(mask(A_resize,B_mask))

enter image description here

相关问题