2016-03-04 41 views

回答

2

你可以使用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) 

enter image description here

+0

非常感谢!这工作在一个很好和优雅的方式。但现在我有另一个问题... 如果我想获得包含另一个shape文件质心的每个shapefile的多边形,我怎么能做到这一点?类似于,同时获得“x的质心在y中”和“y的质心在x中”。不知道我的解释是否足够好... 再次感谢! – JBSacristan

+0

不客气。你的意思是像'ii < - apply(gContains(p1,cc,byid = TRUE),2,any)。 xx < - gCentroid(p1,byid = TRUE)[ii];点(xx,col =“blue”)'? –

+0

行动!对不起,我没有回答。它以可视化的方式运行良好。再次感谢您的答案! – JBSacristan

相关问题