我想创建一个正方形网格并识别与一组其他网格单元相邻的网格单元,其二进制变量取 1。在下面的示例中,我想生成一个单元格 ID 的向量,该单元格 ID 与边界相邻id g13 和 g24:
require(sp)
grid <- GridTopology(c(0,0), c(1,1), c(5,5))
polys <- as(grid, "SpatialPolygons")
centroids <- coordinates(polys)
id <- names(polys)
tr <- ifelse(id == "g13" | id == "g24", 1, 0)
ex <- SpatialPolygonsDataFrame(polys, data = data.frame(id = id, tr = tr, row.names = row.names(polys)))
plot(ex)
text(coordinates(polys), labels = row.names(polys))
这样它输出一个向量,所有匹配的 g13 为 (g7, g8, g9, g12, g14, g17, g18, g19) 和一个匹配的 g24 为 (g18, g19, g20, g23, g24, g25)。非常感谢任何和所有的想法。
最佳答案
rgeos::gTouches
非常适合这个:
library(rgeos)
adj <- gTouches(polys, polys[which(ex$tr==1)], byid=TRUE)
apply(adj, 1, which)
# $g13
# g7 g8 g9 g12 g14 g17 g18 g19
# 7 8 9 12 14 17 18 19
#
# $g24
# g18 g19 g20 g23 g25
# 18 19 20 23 25
而且,因为每个人都喜欢图片:
plot(ex, col=ifelse(seq_along(ex) %in% c(unlist(adj), which(ex$tr==1)), 'gray', NA))
text(coordinates(polys), labels=row.names(polys))
关于r - 识别 R 中网格中最近的邻居(空间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810015/