Мозаичные растровые стеки с использованием минимума определенного слоя

Я пытаюсь создать мозаику из 42 растровых стеков дистанционного зондирования (с 250 каналами) на основе критерия, согласно которому в перекрывающихся областях следует брать пиксель с наибольшим углом обзора надира.

Помимо моих растровых стеков у меня также есть 42 растра (по одному на каждый стек) с соответствующим углом обзора для каждого пикселя.

Есть идеи, как это решить?

Я попытался включить растр угла обзора в стек и использовать что-то похожее на

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

но это не сработало...

Любой совет?

Заранее спасибо,

R.


person rubenvdk    schedule 10.06.2015    source источник
comment
Пожалуйста, задайте этот вопрос здесь: gis.stackexchange.com/questions/tagged/r   -  person    schedule 10.06.2015


Ответы (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)))

Ваш вопрос заключается в том, как объединить/мозаично r на основе значений в n (когда есть перекрывающиеся ячейки со значениями, используйте значение 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)
person Robert Hijmans    schedule 11.06.2015
comment
Извините, что не привел пример, но все равно спасибо за отличное решение. - person rubenvdk; 11.06.2015
comment
Рубен, отдай должное парню за его помощь, пожалуйста. он отвечает на ваш вопрос в нескольких обменах стеками! - person aaryno; 12.06.2015