如何将孤立的栅格值添加到周围的类?

时间:2021-04-14 19:12:38

标签: r aggregate raster spatial

给定的是初始栅格

    r <- raster(ncol=10, nrow=10)
values(r) <- c(1,1,2,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,3,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,2,3,3, 3,2,2,2,2,3,3,3,3,1, 2,2,2,2,2,2,3,2,3,1, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,1)
plot(r)

enter image description here

团块中有几个“岛”。我正在寻找的是一种将这个孤立像素添加到主要周围类的方法。以便我收到以下栅格:

r1 <- raster(ncol=10, nrow=10)
values(r1) <- c(1,1,1,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,3,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,3,3,3, 2,2,2,2,2,3,3,3,3,3, 2,2,2,2,2,2,3,3,3,3, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3)
plot(r1)

enter image description here

孤立的像素被添加到主导的周围类中,但如果至少一个相邻的单元具有相同的值,则仍然存在。

如何实现这个结果?

1 个答案:

答案 0 :(得分:1)

您可以将 focal 与自定义函数参数一起使用。类似于下面的内容。

f <- function(i) {
    if (is.na(i[5])) return(NA)
    s <- sum(i[5] == i, na.rm=TRUE)
    if (s == 1) {
        b <- table(i)
        m <- max(b, na.rm=TRUE)
        if (m > 1) {
            b <- as.numeric( names(which.max(b)[1]) )
            return(b)
        } 
    } 
    i[5]
}

您的示例数据如下,但请注意,我更改了一个值以使其与您的绘图 (r[3,6]) 相匹配,并且我将范围设置为 c(0,1,0,1) 以避免拥有全局经纬度数据 - - 这可能会令人困惑,因为然后连接最左侧和最右侧的单元格,并且您会得到一个单元格的不同结果。您还可以指定平面 CRS。

library(raster)
r <- raster(ncol=10, nrow=10, xmn=0, xmx=1, ymn=0, ymx=1)
values(r) <- c(1,1,2,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,2,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,2,3,3, 3,2,2,2,2,3,3,3,3,1, 2,2,2,2,2,2,3,2,3,1, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,1)
plot(r)

rr <- focal(r, matrix(1,3,3), f, pad=TRUE)
plot(rr)

enter image description here

这与您为右下角的 2 个灰色单元格显示的内容不同,因为根据您指定的规则,您显示的内容不正确。这些单元格都具有相同值的邻居。