Konvertieren Sie Raster in glatte Konturpolygone in QGIS

13

Ich hatte nur begrenzten Erfolg beim Erstellen von Polygonen mit glatten Konturen aus Rasterebenen.

Ich habe Konturlinien und Grenzpolylinien erstellt und dann QGIS Union verwendet. Dann benutze ich QGIS Polygonize. Verwenden Sie dann die Zonenstatistik für das ursprüngliche Raster, um den Wert für die Polygone abzurufen.

Die zweite Methode, die ich ausprobierte, bestand darin, Raster in Polygon umzuwandeln. Erstellen Sie dann eine neue Attributspalte, die auf die gewünschte Kontur gerundet ist. Dann löse ich Linien zwischen dem gleichen Wert auf. Dann benutze v.generalize. Diese Methode ist etwas schneller, lässt jedoch einige Polygone gezackt / ungeglättet.

Bildbeschreibung hier eingeben

Gibt es eine einfachere Methode, die die ganze Zeit funktioniert? Anscheinend sollte es einen einfachen Befehl geben, der den gesamten Prozess ausführt.

Rx_
quelle
2
Warum verwenden Sie Polygonize? Ist Ihr Eingabe-Raster kontinuierlich (wie ein Gleitkomma-DEM)? QGIS verfügt über ein Konturwerkzeug, das eine Verknüpfung zu GDAL_Contour ist. Qgistutorials.com/en/docs/working_with_terrain.html Versuchen Sie, Konturen oder hypsometrische Bereiche abzurufen ?
Michael Stimson
Die Eingabedatei ist eine TIF-Datei und die erforderliche Ausgabedatei ist eine Formdatei mit nur Polygonen in bestimmten Inkrementen. Ich habe zahlreiche Werkzeuge zum Erstellen von Polylinien gefunden, aber keine Polygone.
Rx_
Fairerweise versuchen Sie, hypsometrische Bereiche zu erhalten. Ich verwende (meistens) Esri, das eine Option zur Vereinfachung der durch Raster zu Polygon erstellten Polygone bietet, aber das hilft hier nicht weiter. Wie würde es aussehen, wenn Sie die Konturen aus dem DEM erstellen, einen Begrenzungsrahmen hinzufügen und dann polygonisieren würden? Anschließend können Sie Beschriftungspunkte erstellen, die Werte schneiden / abtasten und die Polygone mit den Attributen beschriften. Möglicherweise erhalten Sie einige Polygone mit demselben Wert, die aufgelöst werden können, aber das größere Problem besteht darin, mehr als ein Intervall zu überspringen. Ich habe Code, um Hypso aus Konturen zuzuweisen, aber er funktioniert mit ArcInfo-Coverage
Michael Stimson,
Was Sie beschreiben, ist das, was ich in meiner ersten Methode zu tun glaube. Es ist umständlich. Stellen Sie sicher, dass jede Datei über ein ID-Attribut verfügt, und löschen Sie anschließend Polygone, die nach der Polygonisierung keinen Bereich über Null enthalten. Es ist mir nicht gelungen, die konsistente korrekte Bezeichnung der Linie für die Übertragung auf das Polygon zu ermitteln. Die zweite Methode ist so nah dran, was ich will, aber v.generalize scheint nicht 100% der Zeit zu funktionieren. Ich wünschte, die Vereinfachung von ESRI-Polygonen wäre eine Option in QGIS, wie Sie betont haben.
Rx_

Antworten:

12

Ich habe die gleichen Probleme erlebt, die Sie bei Ihrer zweiten Methode hatten. Ich habe ein Raster in einen Vektor exportiert und versucht, v.generalise zu verwenden. Dabei erhalte ich meist glatte Polygone mit gelegentlichen "gestuften" Grenzen, die vom Algorithmus nicht beeinflusst worden zu sein scheinen.

Ich fand einen Prozess, der für meine Aufgabe funktionierte, nicht sicher, ob es der beste Weg ist, dachte aber, ich würde ihn teilen, falls er Ihnen hilft.

Ich habe mit einem ASCII-Raster aus der BoM begonnen , das so aussah: Bildbeschreibung hier eingeben

Was ich mir so etwas wie BoM gewünscht habe: Bildbeschreibung hier eingeben

Ich konnte mit den folgenden Schritten zu einem Ergebnis kommen (mit dem ich zufrieden war).

  • Laden Sie das Raster (in meinem Fall das ASCII-Raster aus der Stückliste) in QGIS.
  • In diskrete Klassen umcodiert. (Verarbeitungs-Toolbox> Gras> Raster> r.Recode)
  • Führen Sie einen Mehrheitsfilter aus, um zu bereinigen (Processing Toolbox> SAGA> Rasterfilter> Mehrheitsfilter).
  • Erstellt Konturen aus dem gefilterten Raster in Abständen von 1 und speichert sie in einem Attribut "Klasse" (da meine Klassen 1,2,3,4 usw. waren). (Raster 'Menü'> Extrahieren> Kontur)
  • Die Ausgabekonturen sind etwas verallgemeinert, aber ich habe v.generalisiert mit dem 'Schlangen'-Algorithmus verwendet, um sie zu glätten. (Processing Toolbox> Grass> Vector> v.generalize)
  • Ich habe dann die Linien in Polygone konvertiert. (Processing Toolbox> QGIS-Geoalgorithmen> Werkzeuge für Vektorgeometrie> Linien in Polygone)
  • Schließlich musste ich die einteiligen Polygone in mehrere Teile umwandeln, damit alle Polygone gut gezeichnet wurden. (Verarbeitungs-Toolbox> QGIS-Geoalgorithmen> Werkzeuge für Vektorgeometrie> Einzelteile zu Multiteil).

Nach dem Styling ist meine Ausgabe unten: Bildbeschreibung hier eingeben

Ich würde auch gerne hören, ob jemand einen einfacheren Weg kennt. Ursprünglich dachte ich ähnlich wie bei @Rx_, ich könnte einfach mein Raster in Vektor umwandeln und dann verallgemeinern, und ich wäre fertig. Was ich tun musste, war viel, viel länger.

Andrew Jeffrey
quelle
3

Ich mag die Antworten hier, aber ich kann nicht glauben, dass QGIS immer noch keinen schnellen und einfachen Weg hat, dies zu tun. MapInfo kann Konturen als Polygone oder Linien mit einem von Ihnen festgelegten Intervall generieren.

Es scheint eine solche Grundaufgabe zu sein und auch wichtig für das Erreichen von Ausmaßen. Wenn jemand eine aktualisierte oder schnellere Möglichkeit dazu hat, teile dies bitte mit!

MapInfoNewbie
quelle
1

Eine direktere Möglichkeit ist die direkte Verwendung gdal_countour(als Befehlszeilenprogramm) im "polygonalen Modus" (dh mit der -pOption).

Beispiel:

gdal_contour -p -amin min_val -amax max_val -i 1 input_raster.tif output_shape.shp

Dokumentation: https://gdal.org/programs/gdal_contour.html

Diese Option ist nur in Version> = 2.4 verfügbar (dies kann mit überprüft werden gdalinfo --version). Wenn Sie Ubuntu 18.4 verwenden, müssen Sie es möglicherweise von UbuntuGIS installieren

Paulo Vieira
quelle