2016-06-22 72 views
-1

我有一個包含溫度值和座標點作爲我所需緩衝器的中心的一個列表中的光柵文件給定的條件內的值,在圖中以紅色着色像:光柵緩衝帶中的R

temperatures field and centroids colored in red

如何從包含匹配條件Tmax= Tcentroid+6ºC的所有鄰居單元的質心周圍提取緩衝區? 另外我想重疊緩衝區,如果它們相交,合併成一個單一的。

+0

你想一個特定的卜內獲取值可以匹配條件(獲取緩衝區中的所有值,刪除那些不匹配並刪除空間重複項的值);或者應該由條件決定緩衝區大小(是緩衝區的條件;這看起來有點複雜)?另外,請設置一個可重複的例子。 – RobertH

+0

我希望緩衝區內的值符合條件。在附接在圖像I嘗試在緩衝器內的細胞是那些小於或等於6例示的情況下 [1]:http://i.stack.imgur.com/71PAs.png – ADM

回答

0

這是一個獲得該方法的方法。有可能是一個更有效的方式通過函數在gdistance包來完成

示例數據:

library(raster) 
r <- raster(ncol=36, nrow=18) 
r[] <- 1:ncell(r) 
xy <- cbind(-55, seq(-25, 20, by=20)) 

算法(請注意,我使用的是默認的「車」鄰接規則):

start <- cellFromXY(r, xy) 
svalues <- extract(r, xy) 

result <- list() 
for (i in 1:nrow(xy)) { 
    value <- svalues[i] 
    cells <- start[i] 
    allcells <- cells 
    while(TRUE) { 
     adj <- adjacent(r, cells, pairs=FALSE) 
     asel <- which(abs(r[adj] - value) < 5) 
     if (length(asel) == 0) break 
     cells <- adj[asel] 
     cells <- cells[!cells %in% allcells] 
     allcells <- c(allcells, cells) 
    } 
    result[[i]] <- allcells 
} 

檢查結果:

p <- xyFromCell(r, unlist(result)) 
plot(r) 
points(xy, pch=20) 
points(p, pch='+') 
+0

謝謝你你的回答,但我意識到我沒有正確解釋我需要什麼。就我的理解而言,緩衝區包含了所有的柵格值,並且從中心點開始尋找符合條件的值。我真正需要的是從中心開始尋找那些相鄰且符合條件的值。一旦發現第一個值與條件不匹配,我想停止在那個方向上尋找相鄰。這意味着條件決定了緩衝區大小。 – ADM

+0

我改變了我的答案以反映 – RobertH

+0

非常感謝。 – ADM