在 R(邻居)中查找相邻的多边形
Posted
技术标签:
【中文标题】在 R(邻居)中查找相邻的多边形【英文标题】:Finding adjacent polygons in R (neighbors) 【发布时间】:2014-12-17 09:42:39 【问题描述】:我从一个 SpatialPolygonsDataFrame 开始,它包含用于创建加纳地区地图的数据(可在 http://www.diva-gis.org/datadown 获得)。我正在尝试创建一个矩阵,其中区域的名称作为行和列名称以及内部的 0s/1,以指示两个区域是否相邻(相邻)。
我在 spdep 中发现了几个看起来很有希望的函数,但我不知道如何将它们用于此目的。我能够使用 poly2nb 使用数据创建一个“nb”文件,但不确定如何从这里开始,或者即使我在正确的轨道上。
非常感谢任何帮助!谢谢!
【问题讨论】:
这个问题可能应该问gis.stackexchange.com并在此处关闭。 不,我们得到了这个 :-) 但是,为了将来参考,@Pascal 是对的。这是 R+GIS 相关 q 的好地方。 【参考方案1】:我想你在找gTouches
:
library(rgeos)
library(rgdal)
# using http://data.biogeo.ucdavis.edu/data/diva/adm/GHA_adm.zip
ghana <- readOGR("GHA_adm", "GHA_adm1")
gTouches(ghana, byid=TRUE)
## 0 1 2 3 4 5 6 7 8 9
## 0 FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE
## 1 TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE
## 2 TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE
## 3 TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE
## 4 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
## 5 FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE
## 6 FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
## 7 FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
## 8 FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
## 9 TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
快速浏览一下,它看起来是正确的:
我不确定您使用的是哪个加纳行政区文件,所以这是一个猜测,并且这些文件是按多边形顺序排列的,所以您需要戳ghana@data
并将条目映射到行政区名称。
【讨论】:
这么简单-我真的需要熟悉rgeos
!【参考方案2】:
请不要滥用 rgeos。这不是一个令人满意的答案——没有地区名称。最初的问题在任何情况下都是微不足道的,因为spdep::nb2mat()
这样做(稍微注意矩阵行和列名):
library(spdep)
library(sp)
ghana <- readRDS("GHA_adm1.rds")
row.names(ghana) <- as.character(ghana$NAME_1)
nb <- poly2nb(ghana)
mat <- nb2mat(nb, style="B")
colnames(mat) <- rownames(mat)
mat
使用rgeos::gTouches()
可以工作,特别是如果使用returnDense=FALSE
参数(即不返回矩阵),但如果需要捕捉可能会失败。 spdep::poly2nb()
是首选路线,因为它使捕捉成为可能,并且因为 nb S3 类比矩阵灵活得多。
可以使用rgeos::gUnarySTRtreeQuery()
的输出来初始化spdep::poly2nb()
,它提供具有重叠边界框的多边形列表作为候选邻居。这可以快速处理非常大的数据集。
您还可以在 R-sig-geo 上发布与 R-spatial 相关的问题。
【讨论】:
我不确定这是否能回答问题。 如果您对用户有任何投诉或指导,请在 meta 上发帖(一旦您有 5 个代表),但不要在您的回答中添加噪音,因为这会激怒其他人,这似乎是您想要避免的. 如果您需要多边形捕捉(如果多边形或边框之间的空白不完全匹配),我认为这个答案很有帮助。我使用 gTouches 的原始答案并且得到的邻居比我预期的要少。也许如果对答案进行了编辑以使其清楚,它会有所帮助。以上是关于在 R(邻居)中查找相邻的多边形的主要内容,如果未能解决你的问题,请参考以下文章