【问题标题】:raster buffering with values within a given condition in RR中给定条件内的值的光栅缓冲
【发布时间】:2016-10-24 14:56:36
【问题描述】:

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

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

【问题讨论】:

  • 是否要获取特定缓冲区中与条件匹配的值(获取缓冲区中的所有值,删除不匹配的值并删除空间重复项);或者条件是否应该确定缓冲区大小(条件是缓冲区;这看起来有点复杂)?另外,请设置一个可重现的示例。
  • 我想要缓冲区中与条件匹配的值。在附加的图像中,我尝试举例说明缓冲区中的单元格小于或等于 6 的情况。[1]:i.stack.imgur.com/71PAs.png

标签: r filter buffer raster threshold


【解决方案1】:

这是一种实现方法。通过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='+')

【讨论】:

  • 感谢您的回答,但我意识到我没有正确解释我需要什么。据我从您的回答中了解到,缓冲区包含所有栅格值,并且从中心点开始,它会在其中查找与条件匹配的值。我真正需要的是从中心开始查找那些相邻且符合条件的值。一旦找到与条件不匹配的第一个值,我就想停止在该方向上寻找相邻的值。这意味着条件决定了缓冲区的大小。
  • 我更改了答案以反映这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 2021-03-12
  • 2023-03-17
  • 2017-10-31
相关资源
最近更新 更多