【问题标题】:Mosaic rasterstacks using minimum of certain layer使用特定图层的最小值的马赛克栅格堆栈
【发布时间】:2015-06-10 08:13:56
【问题描述】:

我正在尝试根据重叠区域中应采用具有最大最低视角的像素这一标准来拼接 42 个遥感栅格堆栈(具有 250 个波段)

除了我的光栅堆栈之外,我还有 42 个光栅(每个堆栈一个),每个像素都有相应的视角。

知道如何解决这个问题吗?

我尝试在堆栈中包含视角栅格,并使用类似于

mosaic(a,b,fun=function(x)(min(x[[251]])) 

但这没有用......

有什么建议吗?

提前致谢,

R.

【问题讨论】:

标签: r r-raster mosaic


【解决方案1】:

当问这样的 R 问题时,您应该使用代码设置一个简单的示例,以更好地说明您的问题并使其更容易回答。

问题来了

library(raster)
r <- raster(ncol=100, nrow=100)
r1 <- crop(r, extent(-10, 11, -10, 11))
r2 <- crop(r, extent(0, 20, 0, 20))
r3 <- crop(r, extent(9, 30, 9, 30))

# reflectance values
r1[] <- 1:ncell(r1)
r2[] <- 1:ncell(r2)
r3[] <- 1:ncell(r3)

set.seed(0)
# nadir values
n1 <- setValues(r1, runif(ncell(r1)))
n2 <- setValues(r2, runif(ncell(r2)))
n3 <- setValues(r3, runif(ncell(r3)))

您的问题是如何根据 n 中的值合并/马赛克 r (当存在具有值的重叠单元格时,使用具有最高对应值的 r(i) 的值 n(i) )。

这是解决它的一般方法:

r <- list(r1, r2, r3)
n <- list(n1, n2, n3)

whichmax <- function(x, ...) { 
    ifelse(all(is.na(x)), NA, which.max(x)) 
}

n$fun <- whichmax
# which layer has the highest nadir value?   
m <- do.call(mosaic, n)

q <- list()
for (i in 1:length(r)) {
    y <- r[[i]]
    x <- crop(m, y)
    y[x != i] <- NA
    q[i] <- y
}

M <- do.call(merge, q)

【讨论】:

  • 很抱歉没有提供示例,但无论如何感谢您提供的出色解决方案。
  • 鲁本,请给这家伙一些帮助。他在多个堆栈交换中回答您的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 2019-07-03
  • 1970-01-01
相关资源
最近更新 更多