单个spatialPolygonsDataFrame行的子集多边形

时间:2015-02-16 18:46:36

标签: r maptools rworldmap

我想拆分一个由多个多边形几何组成的spatialPolygonsDataFrame行,我不确定实现这一目标的最明智的方法。例如,如果我们想要从这里的usa移除阿拉斯加,我们可以过滤掉质心超过50度的多边形。有谁知道这样做的相对无痛的方式?

require(rworldmap)
require(maptools)
data(countriesCoarse)
usa = countriesCoarse[168, ]

1 个答案:

答案 0 :(得分:0)

对于"Spatial-class"个对象,这种操作通常需要对组件数据结构进行一些痛苦的低级操作。 (当然,更大的期望是你会做一次,然后写一个你自己的好的包装函数,它完全符合你下次需要的时候!)

在任何情况下,这都是您的情况下的低级操作:

## Extract component "Polygon" objects
pp <- usa@polygons[[1]]@Polygons
## Find indices of non-Alaska Polygon objects
ii <- sapply(pp, function(X) mean(coordinates(X)[,2])<50)

## Put desired Polygon objects back together in a built-from-scratch SpatialPolygons obj.
## Note: ID will need to match row name of data.frame attached to SpatialPolygons object
USA49 <-
SpatialPolygons(list(Polygons(srl = pp[ii], ID = rownames(data.frame(usa)))),
                proj4string=CRS(proj4string(usa)))
## Reattach attributes in data.frame(usa)
USA49 <- SpatialPolygonsDataFrame(USA49, data = data.frame(usa))

## Check that it worked
plot(USA49, col="lightgrey")

enter image description here