2014-10-22 136 views
17

我开始与具有该数据来创建地图加纳(可在http://www.diva-gis.org/datadown)各区的SpatialPolygonsDataFrame。我正在尝试创建一个矩阵,其中区域的名称为行和列名称,内部为0s/1s,以表示两个区域是否相邻(相邻)。查找相邻多边形中的R(邻居)

我发现在spdep似乎有希望的几个功能,但我无法弄清楚如何使用它们用于此目的。我可以使用poly2nb创建一个带有数据的“nb”文件,但我不确定如何从这里开始或者即使我在正确的轨道上。

我真的很感激任何帮助!谢谢!

+1

这个问题也许应该被要求http://gis.stackexchange.com这里关闭。 – 2014-10-22 01:34:28

+0

Nah,我们得到了这个:-)但是,为了将来的参考,@帕斯卡的权利。对于R + GIS相关的q,这是一个很好的地方。 – hrbrmstr 2014-10-22 01:54:50

回答

25

我认为你正在寻找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 

在快速浏览,它看起来右:

enter image description here

我不知道这加纳行政区文件你使用,所以这是一个猜测,这些都是多边形的顺序,所以你需要捅[email protected]并将条目映射到管理区域名称。

+1

+1 - 真不可思议。提交以备将来参考。 – thelatemail 2014-10-22 02:33:48

+0

太简单了 - 我真的需要熟悉'rgeos'! – jbaums 2014-11-07 07:40:06

11

请不要滥用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参数使用(即不要”。 t返回一个矩阵),但如果需要捕捉可能会失败。 spdep::poly2nb()是首选路由,因为它使得捕捉成为可能,并且因为nb S3类比矩阵更灵活。

可以用spdep::poly2nb()来加上rgeos::gUnarySTRtreeQuery()的输出,该输出提供了具有重叠边界框的多边形列表作为候选邻居。这可以快速处理真正的大数据集。

您也可以张贴与R-空间上R-SIG-地理问题。

+2

我不确定这是否回答了问题。 – 2015-08-31 19:20:55

+4

如果您有针对用户的投诉或指导,请在meta上发帖(一旦您有5个代表),但不要在响应中放入噪音,因为这会刺激其他人,这似乎是您想避免的。 – rene 2015-08-31 19:24:56

+0

如果您需要多边形贴紧(如果多边形或边框之间的空白不完全匹配),我认为此答案是有用的。我使用gTouches的原始答案,并且比我预期的要少得多。也许如果答案被编辑,以明确这将有所帮助。 – eclark 2017-06-14 23:22:22