Подмножество пространственных точек с многоугольником

У меня есть SpatialPolygonsDataFrame (spolydf) и SpatialPointsDataFrame (spointdf). Слои имеют разную протяженность, но перекрываются.

Я могу выбрать точки, которые попадают в многоугольник, используя

fall.within.poly <- spointdf[spolydf,]

Как выбрать точки, выходящие за пределы многоугольника? попробовал

fall.outside.poly <- spointdf[-spolydf,]

но не работает. Я упускаю что-то простое - любая помощь, пожалуйста.


person user2175481    schedule 19.04.2018    source источник
comment
Вы можете использовать функцию over, чтобы определить, какие точки попадают в полигоны.   -  person Sébastien Rochette    schedule 21.04.2018
comment
Спасибо, но я ищу точки, выходящие за пределы многоугольника.   -  person user2175481    schedule 21.04.2018
comment
Да, я знаю, но оба ответа связаны. Если вы используете sp::over, вы сохраните все свои очки. Те, которые расположены над полигонами, будут иметь информацию о полигонах, другие будут иметь NA. Затем вы можете фильтровать. Без воспроизводимого примера я не могу вам показать.   -  person Sébastien Rochette    schedule 21.04.2018


Ответы (1)


Немного поздно, но сегодня у меня была такая же проблема, поэтому я решил опубликовать свое решение, используя gDifference() из пакета rgeos:

require(rgeos)
require(sp)

##create spdf
coords=expand.grid(seq(150,151,0.1),seq(-31,-30,0.1))
spdf=data.frame("lng"=coords[,1],"lat"=coords[,2])
coordinates(spdf) = ~lng+lat
proj4string(spdf)<- CRS("+init=epsg:4326")
plot(spdf)

##create poly
poly1 = SpatialPolygons(list(Polygons(list(Polygon(cbind(c(150.45,150.45,150.75,150.75,150.45),c(-30.75,-30.45,-30.45,-30.75,-30.75)))),ID=1)))
proj4string(poly1)<- CRS("+init=epsg:4326")
lines(poly1)

##get difference
out = gDifference(spdf,poly1)
points(out,col="red",pch=16)

введите здесь описание изображения

person drJones    schedule 13.09.2018