使用R中给定条件内的值进行栅格缓冲

时间:2016-06-22 15:05:03

标签: r filter buffer raster threshold

我有一个包含温度值的光栅文件和一个坐标点列表作为我想要的缓冲区的中心,颜色为红色,如图所示:

temperatures field and centroids colored in red

如何在包含符合条件Tmax= Tcentroid+6ºC的所有相邻单元格的质心周围提取缓冲区? 此外,我想重叠缓冲区,如果它们相交,将它们合并为一个缓冲区。

1 个答案:

答案 0 :(得分:0)

这是一种获得它的方法。通过gdistance

中的函数,可能有一种更有效的方法

示例数据:

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

算法(注意我使用的是默认&#34; rook&#34;邻接规则):

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='+')