使用多边形对空间点进行子集筛选

5

我有一个SpatialPolygonsDataFrame(spolydf)和一个SpatialPointsDataFrame(spointdf)。这些层具有不同的范围,但是存在重叠。

我可以使用以下方法选择在多边形内部的点:

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

如何选择多边形外的点?我尝试过

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

但是它不起作用。我肯定是漏掉了什么简单的东西 - 请帮忙。

你可能想使用函数 over 来查找哪些点落在多边形内。 - Sébastien Rochette
谢谢,但我正在寻找落在多边形外部的点。 - user2175481
是的,我知道,但两个答案是相关的。如果您使用 sp::over,则将保留所有点。那些覆盖多边形的点将具有多边形信息,其他点将具有 NA。然后您可以进行过滤。如果您没有提供可重现的示例,我无法向您展示。 - Sébastien Rochette
2个回答

5

可能有点晚了,但我今天遇到了同样的问题,所以我想发布我的解决方案,使用rgeos包中的gDifference()函数:

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)

enter image description here


0
我发现最简单的方法是:
library(splancs)
set.seed(123)
my.shape <- matrix(runif(10), 5)
my.points <- data.frame(x=runif(500), y=runif(500))
my.points$in.shape <- 1:500 %in% inpip(my.points, my.shape)

plot(my.points[1:2], col=1 + my.points$in.shape)
polygon(my.shape)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接