Wie verallgemeinere ich SpatialPolygons und behalte die Topologie in R?

18

Ich möchte ein SpatialPolygonsDataFrame in R verallgemeinern , um das Zeichnen effizienter zu gestalten. Die Polygone, die ich habe, führen zu riesigen PDF-Plots, die langsam geladen und schwer in ein Dokument zu integrieren sind.

Ich habe versucht, die gSimplifyFunktion aus dem rgeosPaket zu verwenden, aber leider wird die Topologie der Polygone nicht beibehalten.

Gibt es eine Alternative, die ich verwenden kann?

Yellowcap
quelle
keine wirkliche lösung, aber könntest du stattdessen im raster (jpg / png) plotten? Diese Frage zum Stackoverflow, in der die Reduzierung von pdfsize erörtert wird, kann von Nutzen sein: stackoverflow.com/questions/8521299/…
djq
Das Plotten der Karten als Rasterbild ist eine Option, aber wann immer möglich möchte ich Vektorgrafiken verwenden. Die Bildqualität ist besser, wenn Vektorgrafiken verwendet werden, insbesondere wenn die digitale Version von Dokumenten angezeigt wird.
Yellowcap
gSimplify()hat einen optionalen Parameter, topologyPreserveder standardmäßig verwendet wird FALSE. Haben Sie versucht, dies einzustellen TRUE?
krlmlr

Antworten:

7

Es gibt eine Diskussion darüber auf R-Sig-Geo . Um eine endgültige Antwort zu erhalten, sollten Sie dort nachfragen, da es Völker gibt, die die Einsichten von räumlichem R kennen.

Sie können dies jedoch auch in GIS-Desktopanwendungen tun (exportieren Sie die Form mit dem Befehl writeOGR aus rgdal oder writePolyShape () aus maptools) wie QuantumGIS, GRASS oder SAGA.

Verwenden Sie für QuantumGIS die Optionen Vektor / Geometriewerkzeuge / Geometrien vereinfachen (Ich habe die Topologie getestet und behalte sie nicht bei, sie wird jedoch auf Rumänien angewendet.

Für GRASS verwenden Sie v.generalize (lesen Sie das Handbuch für Informationen zu den Algorithmen, es gibt einige).

Für SAGA müssen Sie zuerst das Polygon in eine Linie konvertieren (Formen - Linien / Polygone in Linien konvertieren), dann die Linien vereinfachen (Formen Linien / Linienvereinfachung) und schließlich die Linien in Polygone konvertieren (Formen - Polygone / Linien in Polygone konvertieren). Ich habe dies getestet und das Ergebnis hat die Topologie erhalten.

Prost und viel Glück,

Niculita Mihai
quelle
In der Zwischenzeit habe ich auch einen Onlinedienst gefunden, der Vereinfachungen durchführt und dabei Topologien beibehält : mapshaper.org . Ich habe es als Alternative verwendet, da es in R anscheinend nicht direkt möglich ist (QGis ist nicht wirklich topologieerhaltend und ich kenne die anderen Softwarepakete nicht)
Yellowcap
1
Ich habe Ihre Beobachtung mit Saga 2.0.8 getestet und die Topologie des Ergebnisses ist nicht erhalten!
Fabian Zeindl
2

Es gibt jetzt das wunderbare rmapshaperPaket von Andy Teucher, das eine Simplify-Funktion enthält, die "topologisch bewusste Multi-Polygon-Vereinfachung durchführt".

Aus ihrem Github-Repo ein Anwendungsbeispiel:

states_simp <- ms_simplify(states_sp)

wo states_spist ein spatialPolygons*Objekt.

Weitere Informationen finden Sie in der README-Datei des Pakets: https://github.com/ateucher/rmapshaper

Phil
quelle
0

das sollte helfen:

  • gSimplify(..., topologyPreserve=T)aus dem GEOSPaket
Petermeißner
quelle
2
Leider bewahrt die Topologie-Aufbewahrungsoption in gSimplifynicht wirklich die Topologie über mehrere Polygone. Ich denke, es bezieht sich mehr auf die Topologie von Einzel- oder Multipolygonen. Bei einem Shapefile mit vielen Polygonen wird die Topologie nicht beibehalten.
Yellowcap