In R habe ich einzelne SpatialPolygons
-Objekte (d. h. Multi-Polygone), die mehrere hundert Polygone enthalten. Ich möchte dieses SpatialPolygons
-Objekt in eine Liste von Polygons
aufteilen (d. H. Löcher sollten am übergeordneten Polygon hängen bleiben).
Irgendeine Idee, wie man das macht?
BEARBEITET:
Verwenden Sie das folgende Beispiel im Paket sp
:
Dann läuft out = lapply(SpP@polygons, slot, "Polygons")
. Ich bekomme eine Liste von drei Polygons
(d. H.% Co_de%, Srs1
, Srs2
).
Der Fall, den ich zu lösen versuche, unterscheidet sich jedoch etwas von diesem Beispiel. Das Objekt Srs3
, das ich zu teilen versuche, ist das Ergebnis einer geometrischen Vereinigung, die mit der Funktion SpatialPolygons
(im Paket gUnaryUnion
) durchgeführt wurde. Wenn ich RGEOS
anwende, erhalte ich eine eindeutige Liste von out <- lapply(merged.polygons@polygons, slot, "Polygons")
-Objekten (n.b. keine Liste von Polygon
-Objekten). Mit anderen Worten, jedes Polygon ist von seinen Löchern getrennt.
Running Polygons
Ich bekomme:
%Vor% Gemäß dem topol <- sapply(unlist(out), function(x) x@hole)
v0.3-2 Handbuch ( Ссылка ) :
Damit rgeos richtig funktionieren, müssen alle Löcher vorhanden sein innerhalb einer gegebenen POLYGON- oder MULTIPOLYGON-Geometrie muss zu a gehören spezifisches Polygon. Die Implementierung der SpatialPolygons-Klasse tut dies nicht enthalten derzeit diese Informationen. Um diese Einschränkung zu umgehen rgeos verwendet ein zusätzliches Kommentarattribut für die Polygons-Klasse gibt an, welches Loch zu welchem Polygon gehört. Unter dem Strom Implementierung Dieser Kommentar ist eine Zeichenkette aus Zahlen, die durch Räume, in denen die Reihenfolge der Zahlen der Reihenfolge der Zahlen entspricht Polygon-Objekte im Polygons-Slot des Polygons-Objekts. A 0 Impliziert, dass das Polygon-Objekt ein Polygon ist, das eine Zahl ungleich Null impliziert Das Polygon-Objekt ist ein Loch mit dem Wert, der den Index angibt des Polygons, das das Loch "besitzt".
Daher ist die RGEOS
-Funktion in createSPComment()
wahrscheinlich ein Workaround zum erneuten Zusammenführen von Polygonen und Löchern.
Nach meinem Verständnis möchte das OP ein SpatialPolygons
-Objekt in eine Liste von Polygons
umwandeln, wobei Löcher erhalten bleiben, falls vorhanden.
Das SpP
-Objekt, das vom OP erstellt wird, enthält drei Polygone, von denen das dritte ein Loch hat.
Sie können lapply
verwenden, um durch jedes Polygon in SpP
zu wechseln und eine Liste von SpatialPolygons
zurückzugeben. Der Unterschied zwischen einem Polygons
und SpatialPolygons
Objekt besteht in der Addition von Plotauftragsinformationen. Da jedes resultierende SpatialPolygons
eine Länge von 1 hat, ist diese Information jedoch überflüssig.
Wenn eine Liste von Polygons
benötigt wird, ziehen Sie einfach den entsprechenden Slot aus dem Objekt SpatialPolygons
: