我正在使用R中的两个shapefile,我正在尝试选择其中一个包含另一个shp的质心的多边形。
我已经能够分别得到每个文件的质心(附图),但我找不到完成上述任务的方法。在这个例子中,假设我想在它们内部只获得带有蓝色质心(来自shp2)的多边形(shp1)。
谢谢!
答案 0 :(得分:2)
您可以使用 rgeos 包中的gCentroid()
和gContains()
:
library(raster) ## For data and functions used to make example SpatialPolygons objects
library(rgeos) ## For topological operations on geometries
## Make a couple of example SpatialPolygons objects, p1 & p2
p1 <- shapefile(system.file("external/lux.shp", package="raster"))
r <- raster(extent(p1))
r[] <- 1:10
p2 <- rasterToPolygons(r, dissolve=TRUE)
## Find centroids of p2
cc <- gCentroid(p2, byid=TRUE)
## Select Polygons in p1 that contain at least one of centroids from p2
p3 <- p1[apply(gContains(p1, cc, byid=TRUE), 2, any),]
## Plot to check that that worked
ared <- adjustcolor("red", alpha=0.6)
plot(p1)
plot(p3, add=TRUE, col="wheat")
plot(p2, add=TRUE, border=ared)
points(cc, pch=16, col=ared)