Raster automatisch mit eindeutigen Werten in QGIS formatieren?

17

In ArcMap ist es möglich, die eindeutigen Werte für ein Raster automatisch zu berechnen und dann jedem eindeutigen Wert einen anderen Stil zuzuweisen (siehe erstes Bild).

In QGIS muss ich jedoch manuell Werte für das Styling hinzufügen, wenn ich den "Singleband Pseudocolor" -Stil verwende (siehe zweites Bild). Gibt es eine Möglichkeit, die eindeutigen Werte wie in ArcMap automatisch aufzufüllen?

ArcMap:

Eindeutige Werte für die ArcMap-Raster-Symbologie

QGIS (wie füllt man die Werteliste automatisch mit eindeutigen Werten auf?):

QGIS-Raster im Stehen

Peet Whittaker
quelle
Sie haben die Klassifizierung auf der rechten Seite. Nicht sicher, warum Sie dies in Ihrem Screenshot ausschneiden, da dies die Optionen sind, die Sie benötigen ... Legen Sie einfach die Anzahl der Klassen auf Ihre maximale / minimale Differenz +1 fest. Verwenden Sie den gleichen Intervallmodus. Problem kann sein, wenn Ihre Daten nicht zusammenhängend sind, dann müssen Sie die nicht verwendeten Werte löschen.
Matte
@ Matte In der Tat haben wir jedoch normalerweise nicht zusammenhängende Daten mit großen Lücken. Daher ist es nicht praktisch, die Werte zu löschen, die sich nicht im Raster befinden (z. B. sind die einzigen Werte 1 und 1000000, Sie müssten manuell viele Zahlen löschen). Darüber hinaus übernimmt dies einige a priori Kenntnis der einzigartigen Werte innerhalb des Raster ...
Peet Whittaker

Antworten:

3

Für diejenigen, die noch danach suchen. QGIS 3 wurden eindeutige Rasterwerte hinzugefügt. "Hinzugefügt von Nyall Dawson vor ungefähr 1 Jahr

[FEATURE] Ermöglicht das Klassifizieren eines Paletten-Renderers mit eindeutigen Werten aus einer Rasterebene

Fügt mithilfe des Renderers "Palettiert" eine einfache Möglichkeit zum Stylen diskreter Raster wie Landnutzungsklassen hinzu. Wählen Sie einfach den Paletten-Renderer aus, wählen Sie einen Bereich aus und klicken Sie dann auf die Schaltfläche "Eindeutige Werte hinzufügen". Die eindeutigen Pixelwerte werden aus der Ebene abgerufen und jeder Farbe mit Hilfe des aktuell ausgewählten Farbverlaufs zugewiesen. "

Baswein
quelle
7

Hier ist ein Ansatz, der hilfreich sein könnte. Das GRASS-Tool r.reportkann eine grundlegende Statistik für jeden eindeutigen Wert in einer Rasterebene berechnen:

Bildbeschreibung hier eingeben

Die Ausgabe kann als einfache txt-Datei wie folgt geschrieben werden (links: eindeutige Werte, rechts: Bereich, der von jedem Wert abgedeckt wird):

+-----------------------------------------------------------------------------+
|                      Category Information                        |    square|
|   #|description                                                  |     miles|
|-----------------------------------------------------------------------------|
|1111| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  1.249845|
|1113| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.062666|
[...]
|3412| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.013926|
|4111| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  4.713902|
|4211| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.083555|
|4212| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |  0.135777|
|-----------------------------------------------------------------------------|
|TOTAL                                                             | 17.048727|
+-----------------------------------------------------------------------------+

Das folgende Geoverarbeitungsskript verwendet diese Textdatei als Eingabe und richtet einen geeigneten Renderer (mit zufälligen Farben) für die Rasterebene ein (Inspired by LAWHEAD, J .: QGIS Python Programming Cookbook, S. 135):

##giswg=group
##thexml=file
##theraster=raster
from random import randint
from PyQt4.QtGui import QColor
from qgis.core import *
myraster = processing.getObject(theraster)
infile = open(thexml, 'r')
univalues = [l.split('|')[1] for l in [f for f in infile.readlines()][4:-4]]
s = QgsRasterShader()
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.EXACT)
i = []
for u in univalues:
    i.append(QgsColorRampShader.ColorRampItem(float(u), QColor('#%06x' % randint(0, 2**24)), u))
c.setColorRampItemList(i)
s.setRasterShaderFunction(c)
ps = QgsSingleBandPseudoColorRenderer(myraster.dataProvider(), 1, s)
myraster.setRenderer(ps)

Dank der legendären Verarbeitungsfunktionen von QGIS können Sie diese beiden im grafischen Modellierer zusammenfassen und einen Rasterparameter hinzufügen, um einfach einen geladenen Raster-Layer auszuwählen:

Bildbeschreibung hier eingeben

Nachdem Sie das Modell gespeichert haben, können Sie es wie ein normales Werkzeug verwenden, indem Sie in der Bearbeitungs-Toolbox darauf doppelklicken:

Bildbeschreibung hier eingeben

Mit einem Ergebnis, das wie folgt aussieht (Aufschluss eines gerasterten Natura2000-Datensatzes):

Bildbeschreibung hier eingeben

Oder in den Layereigenschaften:

Bildbeschreibung hier eingeben

Ich denke, dies bedarf einer Verfeinerung der Benutzererfahrung, aber es ist ein erster Schritt.

Jochen Schwarze
quelle
1
nicht die beste Benutzererfahrung, aber danke für das Teilen
RutgerH
Ich denke, wenn man nur das Tool sieht, das als Benutzeroberfläche erstellt wurde, ist an der Benutzererfahrung nichts auszusetzen. Und wer weiß, was in den ESRI-Geoverarbeitungswerkzeugen hinter den Kulissen passiert ...
Jochen Schwarze