Ich habe ein großes Shapefile mit 200.000 Polygonen, aber die Datei ist zu groß für die Anwendung, die es verwenden wird. Ich möchte diese Polygone verallgemeinern und eine viel kleinere Datei erstellen.
Ich habe versucht, dies in QGIS mit dem Tool "Geometrien vereinfachen" zu tun. Ich habe dies an einem sehr kleinen Teil meines Shapefile versucht und bin mit den Ergebnissen zufrieden, habe aber ein kleines Problem, das ich nicht lösen kann. Ich habe das Bild angehängt, um das Problem zu zeigen.
WEISSE Grenzen sind Grenzen vor der Vereinfachung. ROTE Grenzen sind nach Vereinfachung. Die Problembereiche sind orange eingekreist. Wie Sie sehen können, enthalten "vereinfachte Grenzen" einige Bereiche, die nach der Vereinfachung zu keinem der vorherigen Polygone gehören.
Wie vereinfache ich dieses Shapefile und behalte gemeinsame Grenzen zwischen Polygonen als einzelne Linie bei und eliminiere Bereiche, die nach der Vereinfachung erstellt wurden?
ZUSÄTZLICHE INFORMATION:
Nachdem Sie die vorgeschlagenen Anweisungen befolgt haben
- Konvertieren Sie Polygone in Linien
- Linien vereinfachen
- Konvertieren Sie Linien zurück in Polygone
Ich erhalte die folgenden Ergebnisse. Es ist etwas besser als zuvor, aber ich bekomme immer noch Bereiche außerhalb der ursprünglichen Polygone (siehe weiße Bereiche im Bild unten).
@ Andrew schlug vor, dass ich jede Linie einem benachbarten Polygon zuordne, aber ich weiß nicht, wie ich das in QGIS machen soll.
Ich versuche immer noch, den Prozess der Vereinfachung von Polygonen abzuschließen. Ich habe die in diesem Beitrag vorgeschlagenen Anweisungen befolgt und als ich dachte, ich hätte akzeptable Ergebnisse erzielt, trat ein weiteres Problem auf. Unten ist die Zusammenfassung dessen, was ich mit Bildern von Ergebnissen gemacht habe. Alle Schritte wurden mit der Toolbox PROCESSING in QGIS ausgeführt.
- Zuerst habe ich Polygone in Linien konvertiert
- Zweitens habe ich Zeilen mit v.clean mit break-Option bereinigt. Dies führte zu CLEANED VECTOR LAYER und ERROR LAYER. Die Fehlerebene (grüne Punkte auf dem bereitgestellten Bild) hat an jedem Linienschnitt einen grünen Punkt. Ich weiß nicht was das bedeutet.
- Drittens habe ich Linien mit dem Werkzeug "GEOMETRIE VEREINFACHEN" vereinfacht (was zu roten Linien in den Bildern führt). Beim Vergleich von vereinfachten roten Linien und originalen orangefarbenen Linien bin ich mit dem Ergebnis zufrieden.
- Viertens wollte ich Linien mit dem Werkzeug "Polygonisieren" in "VERARBEITUNG" wieder in Polygone konvertieren und erhielt Ergebnisse, die ich nicht erwartet hatte (zweites Bild mit schattierten Polygonen in dunkler olivfarbener Farbe). Es sieht aus wie mit Polygonisierern verbundene Schnittpunkte von Fehlerebenen und erstellt völlig andere Polygonsätze, wobei vereinfachte Linien ignoriert werden.
Könnte jemand erklären, was hier schief gelaufen ist?
Warum wurden rote vereinfachte Linien nicht richtig in vereinfachte Polygone umgewandelt?
Wie Sie sehen, bin ich kein GIS-Experte, muss dies aber selbst tun. Ich weiß nicht, ob ich zu weit von der Lösung entfernt bin, aber es ist frustrierend, dass ich vereinfachte Linien sehe, die ich für akzeptabel hielt, aber nicht in Polygone konvertieren kann.
Hier sind zwei Bilder mit Ergebnissen der letzten beiden Schritte des Prozesses:
v.generalize
eine weitere großartige Option ist. Hoffe das hilft.Antworten:
Ich habe mit GRASS v.generalize aus der Processing Toolbox ein ziemlich gutes Ergebnis mit Standardwerten erzielt:
Einige Zeilen bleiben unberührt.
quelle
Ich bin mit Qgis2.16 auf dieses Problem gestoßen, konnte GRASS jedoch nicht dazu bringen, ein topologisch korrektes Ergebnis wie @AndreJ zu liefern.
Eine gute Problemumgehung besteht darin, die Snap-Toleranz von v.in.ogr in den erweiterten Parametern des Tools v.generalize.simplify zu ändern . Der Standardwert ist -1, wodurch das Einrasten von GRASS verhindert wird.
Wenn Sie hier einen kleinen Wert eingeben (z. B. 1e-05 m), wird das Einrasten aktiviert und GRASS erkennt die gemeinsamen Ränder der Polygone. Die Vereinfachung ergibt dann eine topologisch korrekte Schicht ohne Löcher.
Hinweis: Wenn Sie die Fangtoleranz auf höhere Werte einstellen, können Sie die Polygone sogar so ändern, dass sehr dünne gelöscht werden können, wenn Sie möchten. Folgen Sie dieser Operation mit v.clean mit rmarea und einem Schwellenwert, der groß genug ist, um die kleinen Reste zu löschen, und fertig!
quelle
Konvertieren Sie zuerst Ihr Polygon in Linien
Verwenden Sie v.clean, um Ihre Topologie zu bereinigen (mit der Option "break").
dann vereinfachen Sie Ihre Zeilen
Schließlich drehen Sie Ihre Linien wieder in Polygone um (mit polygonize)
BEARBEITEN: Um die Attribute Ihrer Polygone zu erhalten, ist es am besten, wenn Sie keine mehrteiligen Polygone im Originaldatensatz haben , die Schwerpunkte der alten und der vereinfachten Polygone abzurufen und sie basierend auf der nächstgelegenen Position zu verbinden (Schwerpunkte sollten) nicht viel bewegen, wenn Sie Ihre Grenzen nur geringfügig ändern)
quelle
Sie können das Problem mit einem Verarbeitungsmodell (ex SEXTANTE) wie folgt lösen:
Skriptversion:
Anmerkung: Die einzige Einschränkung ist , dass das gemeinsame Feld sein muss ,
ID
inJoin attributes table
, weil der einzige Bereich des AusgangsLines to polygons
. Aus diesem Grund ist das gemeinsame Feld keine variable Eingabe des Modells. DaherID
muss in der Eingabe-Polygon-Ebene ein Feld verfügbar sein.quelle