2015-05-27 3 views
1

У меня есть шейп-файл, и я бы хотел найти многоугольник, содержащий список точек. Например,В R найдите многоугольник, содержащий точку - Shapefile

rio <- readShapeSpatial("setores_rio.shp") 
bairrorio.fort<- fortify(rio , region = "neighborhood") 

head(bairrorio.fort) 
    long  lat order hole piece   group   id 
1 -43.17769 -22.91814  1 FALSE  1 330455705001.1 330455705001 
2 -43.17771 -22.91814  2 FALSE  1 330455705001.1 330455705001 
3 -43.17771 -22.91808  3 FALSE  1 330455705001.1 330455705001 
4 -43.17793 -22.91811  4 FALSE  1 330455705001.1 330455705001 
5 -43.17811 -22.91768  5 FALSE  1 330455705001.1 330455705001 
6 -43.17802 -22.91766  6 FALSE  1 330455705001.1 330455705001 

Предположим, что p = c (long, lat) является точкой с длинной локализацией lat. Я хотел бы найти id (окрестности) (см. Bairrorio.fort), содержащий точку p.

+0

'bairrorio.fort [bairrorio.fort $ долго == долго и bairrorio.fort $ == Lat Lat, "идентификатор"]' даст то, что вы хотите – user227710

+1

проверить 'over()' в пакете sp. – cory

+0

Вы уверены, что точка p = c (long, lat) может быть любой точкой? Он не работает ... Я думаю, что ваше предложение может работать только для точки в bairrorio.fort, тем не менее, когда я бегу с p = c (-43.17769 -22.91814) (см. Первый ряд bairrorio.fort) результат is> bairrorio.fort [bairrorio.fort $ long == -43.17769 & bairrorio.fort $ lat == -22.91814, "id"] character (0) – Vasco

ответ

1

Вы можете использовать point.in.polygon из зр:

library(sp) 
library(magrittr) 

bairrorio.fort %>% 
    split(.$id) %>% 
    sapply(function(x) point.in.polygon(p[1], p[2], x$long, x$lat) > 0) %>% 
    names(.)[.] 
Смежные вопросы