Wie fülle ich Löcher in Polygonen automatisch?

12

Gibt es in QGIS eine Option zum automatischen Füllen von Löchern in Polygonen durch Einstellen von Parametern, z. B. maximale Fläche, Abstand zwischen Grenzlinien? Ich möchte Löcher löschen / füllen, die sehr "dünn" / klein sind.

J-Man
quelle
1
Interessieren Sie sich für Löcher (Ringe in Polgyons) oder für die Verringerung von Lücken zwischen einzelnen Polygonen?
Simbamangu
Muss dies eine QGIS-basierte Lösung sein? Ich habe zuvor darüber gebloggt, wie dies mithilfe von räumlichem SQL in PostGIS erreicht werden kann ( geospatial.commons.gc.cuny.edu/2013/11/04/… ). Wenn Sie PostGIS nicht ausführen, könnte ich dies wahrscheinlich für Sie an SpatiaLite anpassen. Wenn Sie QGIS verwenden, ist SpatiaLite möglicherweise bereits in Ihrer Toolchain enthalten.
Lee Hachadoorian

Antworten:

11

Unter Verwendung von QGIS 2.10.1-Pisa mit Processing Version 2.10.2 stehen in der Processing Toolbox einige Tools zur Verfügung :

  • Füllen Sie Löcher , mit denen Sie die maximale Fläche festlegen können .
  • Löschen Sie das Lochwerkzeug , das auf die gesamte Eingabeebene angewendet wird.

Hoffe das hilft!

Joseph
quelle
1
Nur um zu überprüfen, ob der maximale Flächenparameter die maximale Größe eines zu füllenden Lochs ist? Wenn also in einem Meter-UTM-Projekt das Maximum 10.000 wäre, würde dies bedeuten, dass das größte zu füllende Loch ein Hektar groß wäre und ein größeres noch vorhanden wäre?
BillW
1
@ BillW - Ja, ich glaube, das ist genau das, was es tut :)
Joseph
10

Ich hatte mit diesem Shapefile das gleiche Problem wie Sie, da es viele Lücken zwischen Polygonen gab.

Originaldatei mit Lücken

Um das Problem zu lösen, können Sie eine geringfügige Änderung der Methode von tshiffle verwenden:

  1. Führen Sie zunächst den Unterschied zwischen Ihrer Datei und einem Polygon aus, das die gesamte Ausdehnung abdeckt.

Extent_polygon

Difference_tool

Durch diese Aktion wird ein neues Shapefile erstellt, das nur aus einem Polygon besteht. Sie müssen es also in einzelne Teile zerlegen. Dazu können Sie das Werkzeug Vektor / Geometrie / Mehrteilig zu Einzelteilen verwenden.

Difference_result

Multi_to_single

Löschen Sie danach die externe Entität. Jetzt haben Sie in einem neuen Shapefile mehrere Polygone, die die Lücken Ihrer ursprünglichen Abdeckung abdecken.

Lücken_bedeckt

  1. Führen Sie eine Verbindung zwischen den Anfangsdaten und den einzelnen Teilen durch. Verwenden Sie das SAGA-Tool, da die Standardoption QGIS Duplikate in der Datenbank erstellt.

Union

  1. Alle Lücken werden jetzt als leere Datensätze in der Datenbank angezeigt (für das Beispiel 72 Zeilen). Sortieren Sie Ihre Tabelle mithilfe eines Bereichsfelds und nehmen Sie den Wert aus dem kleinsten Polygon in der Originaldatei. Für diesen Fall 0,13645 Hektar.

Datenbank

  1. Verwenden Sie abschließend das Werkzeug "Splitterpolygone entfernen" mit den im Bild gezeigten Einstellungen.

Geben Sie hier die Bildbeschreibung ein

  1. Das Endergebnis weist keine Lücken auf.

Geben Sie hier die Bildbeschreibung ein

gtapko
quelle
Können Sie weitere Informationen zur Auswahl der Parameter hinzufügen? Was ist der Wert"? Die QGIS-Dokumentationsseite enthält nur sehr wenige Details. Sehr elegante Antwort, schade, dass der Erstbenutzer keine der Antworten akzeptiert hat!
user3386170
1
'Wert' ist die Größe, die Sie für den Vergleich verwenden. In dem Beispiel wurde das verwendete Feld "Fläche" in Hektar festgelegt, also bedeutet 0,1: Polygone entfernen, die kleiner oder gleich 0,1 Hektar sind.
Gtapko
gtapko, können Sie bitte weitere Details zu Phase 3 angeben? Ich kann es nicht verstehen, danke
NewGIS
4

Es gibt vielleicht elegantere Lösungen, aber das hat bei mir immer funktioniert.

1) Erstellen Sie "lochfüllende" Polygone. Zeichnen Sie dazu ein riesiges Polygon, das größer als das Original ist, und verwenden Sie das Werkzeug "Differenz". Wenn Sie ein viel größeres Polygon gezeichnet haben, haben Sie alle "lochfüllenden" Polygone sowie ein einzelnes größeres Polygon, das die ursprüngliche Form umgibt. Löschen Sie dieses große Polygon und behalten Sie die "lochfüllenden" Polygone bei.

2) Fügen Sie die "lochfüllenden" Polygone mit dem ursprünglichen Shapefile zusammen. Wenn Sie nur Löcher füllen möchten, die einem bestimmten Kriterium entsprechen (dh unter X Quadratkilometern), können Sie hier danach filtern.

3) Lösen Sie das neu zusammengeführte Polygon in einem gemeinsamen Feld auf.

tshiffle
quelle
Unklar über Schritt 3, wie jemand das gemeinsame Feld finden wird?
iRfAn
In diesem Schritt kann das gemeinsame Feld alles sein, das Ziel ist es, einfach die Grenzen zwischen den Polygonen aufzulösen. Sie können ein vorhandenes Feld verwenden oder einfach eines hinzufügen.
Tshiffle
4

In Python / Shapely kann dies Ihr Polygon ausfüllen:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)
mszel
quelle
2

Ich habe einige Erklärungen gesehen, die dem gleichen Weg wie gtapko und tshiffle folgten, aber keine hat bei mir funktioniert, weil die ungültigen Geometrien das Differenzwerkzeug funktionsunfähig gemacht haben. Also habe ich mir eine eigene Lösung ausgedacht, die nicht zu 100% automatisiert, aber überschaubar ist. Wahrscheinlich hat das schon jemand gedacht, aber ich gehe mein Risiko ein:

1) Erstellen Sie eine ID auf der ursprünglichen, beschädigten Ebene

Das Erstellen eines ID-Attributs ist einfach, aber auch meine Lösung. Ich werde darauf eingehen.

Zuerst müssen Sie Ihre Attributtabelle öffnen und dann zum Feldrechner gehen , der eine Schaltfläche ist, die einem Abakus ziemlich ähnlich ist. Dort haben Sie die Möglichkeit, ein neues Feld zu erstellen oder ein vorhandenes zu aktualisieren. Auf dem Bild oben erstelle ich eine neue mit dem Namen "ID". Die Formel befindet sich am Ende des Bildes. (Es tut mir leid, dass ich mein QGIS in einer anderen Sprache eingerichtet habe. Da das Design und die Formeln in allen Sprachversionen genau gleich sind, denke ich nicht, dass es uns hier im Weg stehen wird.)

2) Konvertieren Sie die Polygone in Linien

Dieser Schritt befindet sich im Abschnitt Vektor> Geometrie im Menü. Ihre konvertierte Form sollte folgendermaßen aussehen:

Gleich nach dem Konvertieren der Polygone in Linien müssen Sie genau das Gegenteil tun, nämlich ...

3) Konvertieren Sie Linien in Polygone

Die Optionen liegen direkt nebeneinander. Auch hier macht uns die Sprachbarriere nichts aus.

4) Freuen Sie sich Der Grund, warum Sie die Schritte 2 und 3 ausgeführt haben, ist, dass Sie jetzt sicher sind, dass diese Linien als Polygone betrachtet werden, was bedeutet, dass sie jetzt eine eigene Linie in der Attributtabelle haben. Wenn Sie es ausprobieren, sieht es folgendermaßen aus:

Das erste ist IMMER das gesamte Polygon (vertrau mir, ich habe heute ein paar hundert Zeilen gelöscht ...) und der Rest sind die losen Linien in der Mitte. Sie können die Bearbeitung aktivieren und sich auf die Aktion vorbereiten. Wenn Sie dies versuchen möchten, sollten Sie zwei Dinge beachten: Ordnen Sie Ihre Tabelle nach ID , so dass Sie sicher sind, dass Sie nichts verpassen, und wählen Sie mithilfe von Shift Datencluster aus, genau wie bei jedem anderen Programm .

Ich bin mir bewusst, dass dies nicht die Crème de la Crème der QGIS-Problemlösung ist, aber wenn Sie in einer Situation sind, in der die Werkzeuge aufgrund der ungültigen Geometrie, die diese Linie erzeugt, nicht funktionieren (ich habe sogar versucht, sie anhand der ID aufzulösen, aber es hat nicht funktioniert), dann könnte dies ein Ausweg sein.

Eric Lino
quelle
Könnten Sie Ihre Bilder aktualisieren? Links sind kaputt!
Simbamangu
Hallo. Es tut mir leid, aber anscheinend hat Photobucket meine Bilder entführt und ich habe den Zugriff darauf verloren. Ich habe bereits ein Ticket geöffnet und versuche, wieder Zugang zu erhalten. Ich melde mich wann immer möglich bei Ihnen.
Eric Lino