В 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) — точка с широтно-долгой локализацией. Я хотел бы найти идентификатор (окрестности) (см. bairrorio.fort), содержащий точку p.


person Vasco    schedule 27.05.2015    source источник
comment
bairrorio.fort[bairrorio.fort$long==long & bairrorio.fort$lat==lat,"id"] даст то, что вы хотите   -  person user227710    schedule 28.05.2015
comment
проверьте over() в пакете sp.   -  person cory    schedule 28.05.2015
comment
Вы уверены, что точка 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] символ (0)   -  person Vasco    schedule 28.05.2015
comment
Не используйте readShapeSpatial для чтения шейп-файла. Используйте readOGR из пакета rgdal.   -  person    schedule 28.05.2015


Ответы (1)


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

library(sp)
library(magrittr)

bairrorio.fort %>% 
  split(.$id) %>% 
  sapply(function(x) point.in.polygon(p[1], p[2], x$long, x$lat) > 0) %>%  
  names(.)[.]
person bergant    schedule 27.05.2015