Ich habe eine Polygonvektorebene, die den von einer Flut überfluteten Bereich darstellt. Die Ebene wurde so erstellt, dass einige der Bereiche aus mehreren kleineren berührenden Polygonen bestehen (siehe Abbildung unten mit der Bezeichnung "Originaldaten").
Ich möchte die Polygone dort auflösen, wo sie sich berühren. Wenn ich das Auflösungs-Geoverarbeitungswerkzeug in den fTools von QGIS verwende, das die GEOS-Bibliothek verwendet, erhalte ich einige unerwartete Ergebnisse (siehe "Mit QGIS fTools auflösen"). Es scheint, dass GEOS keinen Schwellenwert verwendet, um festzustellen, ob sich Polygone berühren, wie in den folgenden Abschnitten erwähnt:
http://trac.osgeo.org/qgis/ticket/3126
http://trac.osgeo.org/qgis/ticket/3184
http://hub.qgis.org/issues/2806
Der gleiche Ansatz in ArcGIS liefert das erwartete Ergebnis (siehe "Mit ArcGIS 10.1 auflösen").
Anscheinend ist dies eher eine "Funktion" von GEOS als ein Fehler. Gibt es eine Möglichkeit, die Daten zu korrigieren, um das erwartete Ergebnis zu erzielen? Ein geringfügiger Präzisionsverlust (einige cm?) Könnte für mich akzeptabel sein. Idealerweise könnte ich die Lösung als Vorverarbeitungsschritt in ein QGIS-Plugin schreiben.
Verwandte Frage (ohne Antworten): Wie wird der Toleranzwert des Geoverarbeitungswerkzeugs in QGIS festgelegt?
Link zu Beispieldaten als Shapefile: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip
Antworten:
In diesem Fall müssen Sie dem Auflösungswerkzeug helfen, indem Sie zuerst die Topologie korrigieren. So können Sie dies in GRASS tun.
Wenn Sie das Shapefile laden, sieht GRASS es folgendermaßen:
Jedes Kreuz markiert einen Bereich. Sie können sehen, dass sich an den Grenzlinien einige Kreuze befinden: Dies sind die Splitterpolygone, die durch den leichten Versatz zwischen den Grenzlinien verursacht werden.
Entfernen Sie die Splitterpolygone, die durch die Lücken zwischen den realen Polygonen gebildet werden:
Fang die Grenzlinien:
Brechen Sie die Grenzlinien an den neuen Kreuzungen:
Entfernen Sie die jetzt doppelten Grenzlinien:
Löse die Polygone auf
Et voilà:
quelle
Verwenden Sie den GRASS GIS-Befehl v.dissolve (im Sextante-Plugin -> GRASS-Befehle -> Vektor).
Wenn ich Sie schnell reproduziere Beispiel:
Das Ergebnis mit v.dissolve:
Erläuterung
Das Problem ist leicht zu verstehen. Ein Shapefile hat keine Topologie. Wenn zwei Bereiche einen gemeinsamen Rand haben, wird dieser Rand zweimal digitalisiert und auch doppelt gespeichert.
Sie sehen dies deutlich, wenn Sie versuchen, das Shapefile zu bearbeiten:
GRASS GIS (als ArcGIS) ist ein topologisches GIS. Wenn Sie das Shapefile in GRASS importieren, hat die resultierende Ebene eine Topologie: Die gemeinsame Grenze zwischen zwei Bereichen ist einmal vorhanden und wird gemeinsam genutzt.
Aus diesem Grund können beim Auflösen eines Shapefiles ( zwei Grenzen auflösen ) Probleme auftreten (in QGIS, GvSIG, OpenJUMP oder dem alten ArcView 3.x), siehe ArcUserI: Grundlegendes zu Topologie und Shapefiles .
In GRASS wurde v.dissolve entwickelt, um gemeinsame Grenzen zwischen Bereichen mit derselben Kategorienummer aufzulösen
quelle
v.dissolve
hat einen Toleranzparameter, der das Problem des OP behebt .v.dissolve
, scheint es zu funktionieren, außer dass es das kleine Quadrat in der Mitte der Features "ausfüllt". i.stack.imgur.com/AA59l.png