【问题标题】:Fill the gaps in raster stack using subsequent layers使用后续图层填充栅格堆栈中的间隙
【发布时间】:2016-02-02 18:53:03
【问题描述】:

假设我有一个栅格堆栈,其中每一层都有数据间隙。我想使用堆栈中接下来的两层来填充每一层的间隙:

library(raster)
r1 <- raster(ncol=20,nrow=20, xmn=0, xmx=20, ymn=0,ymx=20)
r1[] <- 1:20
r2 <- r3 <- r4 <- r5 <- r1
set.seed(0)
r1[sample(1:ncell(r1), size = 20)] <- NA
r2[sample(1:ncell(r2), size = 30)] <- NA
r3[sample(1:ncell(r3), size = 10)] <- NA
r4[sample(1:ncell(r4), size = 18)] <- NA
r5[sample(1:ncell(r5), size = 18)] <- NA

s <- stack(r1, r2, r3, r4, r5)

在这种情况下,r2 和 r3 将用于填补 r1 中的空白,依此类推。

【问题讨论】:

    标签: r raster


    【解决方案1】:

    不确定这是否是您想要的,但它会给您一个开始。我还是 R 新手,所以可能还有另一种方法。

    library(raster)
    r1 <- raster(ncol=20,nrow=20, xmn=0, xmx=20, ymn=0,ymx=20)
    r1[] <- 1:20
    r2 <- r3 <- r4 <- r5 <- r1
    set.seed(0)
    r1[sample(1:ncell(r1), size = 20)] <- NA
    r2[sample(1:ncell(r2), size = 30)] <- NA
    r3[sample(1:ncell(r3), size = 10)] <- NA
    r4[sample(1:ncell(r4), size = 18)] <- NA
    r5[sample(1:ncell(r5), size = 18)] <- NA
    
    s <- stack(r1, r2, r3, r4, r5)
    
    for(i in 1:(nlayers(s) - 2) ){
        s[[i]] <- merge( s[[i]], mask( s[[(i+1)]], s[[i]], inverse = TRUE))
        s[[i]] <- merge( s[[i]], mask( s[[(i+2)]], s[[i]], inverse = TRUE))
    }
    

    【讨论】:

    • 由于我正在处理大型栅格堆栈,因此我需要将其放入函数中。叠加功能可以完成这项工作,但我不知道它如何与一个堆栈中的图层一起使用。
    • 好吧,但是r1被原来的r2和r3填充,然后r2被原来的r3和r4填充等等的基本思路正确吗?
    • “将其放入函数中”会如何改变?
    • 另外,您的光栅图像有多大?
    • 为什么大小很重要?
    【解决方案2】:

    MikeJewski 的解决方案可能有效,但cover 函数就是为此而设计的,而且更直接。目前还不清楚如何你想使用接下来的两层。平均值:

    for(i in 1:(nlayers(s) - 2) ){
        s[[i]] <- cover( s[[i]], mean( s[[(i+1):(i+2)]], na.rm=TRUE))
    }
    

    或者最接近的(如 MikeJewski 假设的那样):

    for(i in 1:(nlayers(s) - 2) ){
        s[[i]] <- cover( s[[i]], s[[(i+1)]])
        s[[i]] <- cover( s[[i]], s[[(i+2)]])
    }
    

    这将是另一种但可能效率低下的方法:

    f <- function(x) {
        for(i in 1:((ncol(x)-2)) ){
            x[is.na(x[,i]),i]  <- x[is.na(x[,i]),i+1]  
            x[is.na(x[,i]),i]  <- x[is.na(x[,i]),i+2]  
        }
        x
    }
    
    ss <- calc(s, f)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 2014-11-01
      • 1970-01-01
      相关资源
      最近更新 更多