在 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(邻居)中查找相邻的多边形的主要内容,如果未能解决你的问题,请参考以下文章

查找给定多边形 w.r.t 的两个“边界”顶点。已知(光源)点

R - 查找按位二进制邻居(一次翻转一位)

组合按特定顺序的相邻 3D 多边形

将相邻矩形合并为多​​边形的算法

在多边形 PHP 中查找点

多边形重叠百分比