【问题标题】:How to add isolated raster values to surrounding class?如何将孤立的栅格值添加到周围的类?
【发布时间】:2021-04-15 04:19:50
【问题描述】:

给定一个初始栅格

    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)

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

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)

孤立的像素被添加到主要的周围类别中,但如果至少一个相邻单元格具有相同的值,则保留。

如何实现这个结果?

【问题讨论】:

    标签: r aggregate raster spatial


    【解决方案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) 以避免拥有全局 lon/lat 数据——这可以是令人困惑,因为那时最左边和最右边的单元格是连接的,并且您会得到一个单元格的不同结果。您还可以指定平面 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)
    

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

    【讨论】:

    • 它有效!我认为关于焦点,但是我无法自己编写函数。你是对的,根据我制定的规则,应该保留 2 个灰色单元格,最好使用设置范围而不是使用全局 lon/lat。这些是我在提供样本数据时的错误。很好,现在已经澄清了,希望不会让任何人感到困惑。
    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    相关资源
    最近更新 更多