2014-10-22 104 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