在 R 中,我有一个SpatialPolygons
包含数百个多边形的对象(即多个多边形)。我想分割这个SpatialPolygons
对象放入列表中Polygons
(即孔应保持连接到父多边形)。
知道如何做到这一点吗?
EDITED:
使用以下提供的示例sp
包裹:
# simple example, from vignette("sp"):
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
然后运行out = lapply(SpP@polygons, slot, "Polygons")
。我得到了三个的列表Polygons
(i.e. Srs1
, Srs2
, Srs3
).
然而,我试图解决的案例与这个例子有点不同。这SpatialPolygons
我试图分割的对象是与以下对象进行几何并集的结果gUnaryUnion
函数(在RGEOS
包裹)。如果我申请out <- lapply(merged.polygons@polygons, slot, "Polygons")
,我得到一个独特的列表Polygon
对象(注意不是列表Polygons
对象)。换句话说,每个多边形与其孔分开。
跑步topol <- sapply(unlist(out), function(x) x@hole)
I get:
> length(topol)
[1] 4996
> sum(topol, na.rm=TRUE)
[1] 469
根据RGEOS
v0.3-2 手册 (http://cran.r-project.org/web/packages/rgeos/rgeos.pdf http://cran.r-project.org/web/packages/rgeos/rgeos.pdf):
为了使 rgeos 正常工作,所有孔都必须
在给定的 POLYGON 或 MULTIPOLYGON 几何图形中必须属于
特定的多边形。 SpatialPolygons 类实现不
目前包含此信息。解决此限制
rgeos 在 Polygons 类上使用附加注释属性
指示哪个孔属于哪个多边形。在目前的情况下
实现此注释是由数字分隔的文本字符串
空格,其中数字的顺序对应于
多边形对象的多边形槽中的多边形对象。一个 0
表示 Polygon 对象是一个多边形,非零数字表示
Polygon 对象是一个洞,其值指示索引
“拥有”该洞的多边形的形状。
So the createSPComment()
函数于RGEOS
可能是重新聚合多边形和孔的解决方法。