Rでは、数百のポリゴンを含む単一のSpatialPolygons
オブジェクト(マルチポリゴン)があります。このSpatialPolygons
オブジェクトをPolygons
のリストに分割したい(つまり、親ポリゴンに穴を付けたままにしておく必要があります)。単一のSpatialPolygonsオブジェクトのポリゴン部分を分割する
どうすればいいですか?
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([email protected], slot, "Polygons")
を実行しています。私は
Polygons
の3つのリスト(すなわち、
Srs1
、
Srs2
、
Srs3
)を取得します。
しかし、私が解決しようとしている場合は、この例とは少し異なります。私が分割しようとしているSpatialPolygons
オブジェクトは、gUnaryUnion
関数(RGEOS
パッケージ内)で行われた幾何学的結合の結果です。 out <- lapply([email protected], slot, "Polygons")
を適用すると、Polygon
オブジェクト(n.b. Polygons
オブジェクトのリストではありません)の固有リストが取得されます。言い換えれば、各ポリゴンはその穴から分離されています。
私が手topol <- sapply(unlist(out), function(x) [email protected])
の実行:
> 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)によると:
rgeosはそれを正しく機能するためにする必要があります与えられたPOLYGONまたはMULTIPOLYGONジオメトリ内のすべての穴 は、特定のポリゴン に属している必要があります。 SpatialPolygonsクラスの実装では、現在 にこの情報が含まれていません。この制限を回避するには rgeosはPolygonsクラスの追加のコメント属性を使用します。 は、どの穴がどのポリゴンに属するかを示します。現在の の実装では、このコメントは、 スペースで区切られた数字のテキスト文字列で、数字の順序はPolygonsオブジェクトのPolygonsスロット内の Polygonオブジェクトの順序に対応します。 A 0 はPolygonオブジェクトがポリゴンであることを意味し、非ゼロの数字は を意味し、Polygonオブジェクトは穴を所有しているPolygonのインデックス を示す値を持つ穴です。
のでRGEOS
でcreateSPComment()
機能は、多角形や正孔を再集計するための回避策である可能性が高いです。