1

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

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

1 回答 1

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")

在此处输入图像描述

于 2015-02-17T17:42:33.207 回答