2014-10-22 42 views
17

Tôi bắt đầu với một SpatialPolygonsDataFrame có dữ liệu để tạo bản đồ của các quận của Ghana (có sẵn tại http://www.diva-gis.org/datadown). Tôi đang cố gắng tạo ra một ma trận với tên của các huyện như tên hàng và cột và 0s/1s trong nội thất để cho biết nếu hai huyện là liền kề (lân cận) hay không.Tìm các đa giác liền kề trong R (hàng xóm)

Tôi đã tìm thấy một số chức năng trong spdep có vẻ đầy hứa hẹn, nhưng tôi không thể tìm ra cách sử dụng chúng cho mục đích này. Tôi đã có thể tạo một tập tin "nb" với dữ liệu bằng cách sử dụng poly2nb, nhưng tôi không chắc chắn làm thế nào để tiến hành từ đây hoặc thậm chí nếu tôi đang đi đúng hướng.

Tôi thực sự đánh giá cao bất kỳ trợ giúp nào! Cảm ơn bạn!

+1

Câu hỏi này có thể được yêu cầu http://gis.stackexchange.com và đóng tại đây. –

+0

Không, chúng tôi đã nhận điều này :-) Nhưng, để tham khảo trong tương lai, quyền của Pascal @. Đó là một nơi tuyệt vời cho R + GIS liên quan đến q. – hrbrmstr

Trả lời

25

Tôi nghĩ rằng bạn đang tìm kiếm 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 

On lướt qua, có vẻ đúng:

enter image description here

Tôi không chắc chắn mà Ghana tập tin huyện hành chính bạn sử dụng, do đó, đó là một dự đoán và những người đang có trong thứ tự đa giác, vì vậy bạn sẽ cần phải poke tại [email protected] và bản đồ các mục để quản trị tên huyện.

+1

+1 - Thật đáng kinh ngạc. Nộp đi để tham khảo trong tương lai. – thelatemail

+0

Thật đơn giản - tôi thực sự cần phải tự làm quen với 'rgeos'! – jbaums

11

Vui lòng không lạm dụng rgeos. Đây không phải là câu trả lời thỏa đáng - không có tên quận. Câu hỏi ban đầu là trong bất kỳ trường hợp tầm thường, như spdep::nb2mat() thực hiện điều này (với một chút chăm sóc với những cái tên hàng ma trận và cột):

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 

Sử dụng rgeos::gTouches() thể làm việc, đặc biệt là nếu đối số returnDense=FALSE được sử dụng (ví dụ don'. t trả về ma trận), nhưng có thể thất bại nếu cần chụp. spdep::poly2nb() là tuyến đường ưu tiên, vì nó làm cho việc chụp có thể xảy ra, và bởi vì lớp nb S3 linh hoạt hơn nhiều so với ma trận.

Có thể làm thủ tục spdep::poly2nb() với đầu ra là rgeos::gUnarySTRtreeQuery(), cung cấp danh sách đa giác có hộp giới hạn trùng lặp làm ứng cử viên hàng xóm. Điều này xử lý các tập dữ liệu thực sự nhanh chóng.

Bạn cũng có thể đăng câu hỏi liên quan đến không gian R trên R-sig-geo.

+2

Tôi không chắc chắn điều này sẽ trả lời câu hỏi. –

+4

nếu bạn có khiếu nại hoặc hướng dẫn cho người dùng, vui lòng đăng lên meta (một khi bạn có 5 đại diện) nhưng không đặt tiếng ồn đó vào câu trả lời của bạn vì điều đó kích thích những người khác có vẻ như bạn muốn tránh. – rene

+0

Tôi nghĩ câu trả lời này rất hữu ích nếu bạn cần chụp đa giác (trong trường hợp khoảng trắng giữa các đa giác hoặc đường viền không khớp chính xác). Tôi đã sử dụng câu trả lời ban đầu với gTouches và đã nhận được hàng xóm ít hơn tôi đã mong đợi. Có lẽ nếu câu trả lời đã được chỉnh sửa để làm cho rõ ràng nó sẽ giúp đỡ. – eclark

Các vấn đề liên quan