web-dev-qa-db-ja.com

Rで隣接するポリゴンを見つける(隣接)

ガーナの地区の地図を作成するためのデータを含むSpatialPolygonsDataFrameから始めています( http://www.diva-gis.org/datadown で入手可能)。 2つの地区が隣接(隣接)しているかどうかを示すために、地区の名前を行名と列名、内部に0s/1を使用してマトリックスを作成しようとしています。

Spdepで有望と思われる関数をいくつか見つけましたが、この目的でそれらを使用する方法がわかりません。 poly2nbを使用してデータを使用して「nb」ファイルを作成することはできましたが、ここからどのように進めるか、または正しい方向に進んでいるかどうかがわかりません。

助けていただければ幸いです。ありがとうございました!

23
Megan E.

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

使用しているガーナの行政区画ファイルがわからないため、推測であり、ポリゴン順になっているため、ghana@dataを調べて、エントリを行政区画名にマップする必要があります。

33
hrbrmstr

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クラスが行列よりもはるかに柔軟であるため、推奨されるルートです。

spdep::poly2nb()の出力でrgeos::gUnarySTRtreeQuery()をプライミングすることができます。これにより、隣接する候補として境界ボックスが重なっているポリゴンのリストが提供されます。これにより、非常に大きなデータセットが高速に処理されます。

R-sig-geoにR-spatialに関する質問を投稿することもできます。

20
Roger Bivand