【发布时间】:2020-09-17 20:42:31
【问题描述】:
我有一个空间点数据框 -> spatial_points
和一个多边形 -> spatial_poly
我可以使用多边形内的所有点进行子集化
subset_within <- spatial_points[spatial_poly,] which is nice and intuitive.
但是如果我想对多边形外的所有点进行子集化,我就不能使用
subset_ouside <- spatial_points[-spatial_poly,]
之前有人问过这个问题,答案是使用rgeos 包中的gDifference()。很好。
我的问题是,为什么 [ ] 用于内部选择,而不是相反?我不太明白错误信息
h(simpleError(msg, call)) 中的错误:评估错误 为函数“[”选择方法时的参数“i”:无效参数 一元运算符
只是好奇。谢谢。
编辑
这是一个从Subset spatial points with a polygon借来的例子
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")
##get points withing polygon
points_within <-spdf[poly1,] # this works
plot(spdf)
plot(poly1, add=T)
plot(points_within,col="blue",pch=16,add=T)
##get points outside polygon
points_outside <-spdf[-poly1,] # this does not work - why??
在这个简单的例子中,可以使用gDifference(),它在这个例子中有效。但是,我的 SpatialPointDataframe 非常大,使用 gDifference 会导致 R.
【问题讨论】:
-
嗨。您能告诉我们您正在使用哪些软件包吗?如果您在包
sp中创建SpatialPointsDataFrame并在sp中创建Polygon,那么spatial_points[spatial_poly,]只会引发错误。您能否将dput(spatial_points)和dput(spatial_poly)的结果添加到您的问题中? -
谢谢。实际上,你描述的确实有效。是的,使用 sp 但也使用 rgdal 和 raster。创建点文件是使用坐标()和我从外部源导入的形状文件。两者都使用 spTransform 进行转换。我对这两个文件都运行了 dput() 并且得到了一个非常长的 ascii 文件 - 你能告诉我我应该寻找什么吗?
-
也许你可以展示一个最小的例子(即通过坐标制作一个多边形,并通过再现行为的坐标制作几个点)
-
@Allan Cameron 添加了示例。
-
谢谢。请参阅我的答案以获得完整的解释。
标签: r spatial rgeo-shapefile