0
我正在R中使用两个shapefile,我试图选择其中一个包含另一个shp的质心的多边形。如何从R中的另一个shapefile获取包含多边形质心的shapefile的多边形?
我已经能够分别获得每个文件的质心(附图),但是我找不到完成上述任务的方法。在这个例子中,我们假设我只想得到里面有蓝色质心(来自shp2)的多边形(shp1)。
谢谢!
我正在R中使用两个shapefile,我试图选择其中一个包含另一个shp的质心的多边形。如何从R中的另一个shapefile获取包含多边形质心的shapefile的多边形?
我已经能够分别获得每个文件的质心(附图),但是我找不到完成上述任务的方法。在这个例子中,我们假设我只想得到里面有蓝色质心(来自shp2)的多边形(shp1)。
谢谢!
你可以使用gCentroid()
和gContains()
从rgeos包:
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)
非常感谢!这工作在一个很好和优雅的方式。但现在我有另一个问题... 如果我想获得包含另一个shape文件质心的每个shapefile的多边形,我怎么能做到这一点?类似于,同时获得“x的质心在y中”和“y的质心在x中”。不知道我的解释是否足够好... 再次感谢! – JBSacristan
不客气。你的意思是像'ii < - apply(gContains(p1,cc,byid = TRUE),2,any)。 xx < - gCentroid(p1,byid = TRUE)[ii];点(xx,col =“blue”)'? –
行动!对不起,我没有回答。它以可视化的方式运行良好。再次感谢您的答案! – JBSacristan