Disegna automaticamente lo stile raster usando valori univoci in QGIS?


17

In ArcMap, è possibile calcolare automaticamente i valori univoci per un raster e quindi applicare uno stile diverso a ciascun valore univoco (vedere la prima immagine).

Tuttavia, in QGIS, devo aggiungere manualmente valori per lo stile quando uso lo stile "pseudocolore a banda singola" (vedi seconda immagine). Esiste un modo per popolare automaticamente i valori univoci come fa ArcMap?

ArcMap:

ArcMap valori univoci di simbologia raster

QGIS (come popolare automaticamente l'elenco di valori con valori univoci?):

QGIS raster stlies


Hai la classificazione sul lato destro. Non sono sicuro del motivo per cui hai tagliato questo nel tuo Screenshot in quanto queste sono le opzioni che ti servono ... Basta impostare il numero di classi sulla tua differenza min - min +1. Utilizzare la stessa modalità intervallo. Il problema potrebbe essere quando i dati non sono contigui, quindi è necessario eliminare i valori non utilizzati.
Matte

@Matte In effetti, tuttavia di solito abbiamo dati non contigui con grandi lacune. Pertanto, non è pratico eliminare i valori non effettivamente presenti nel raster (ad esempio, gli unici valori sono 1 e 1000000, è necessario eliminare manualmente MOLTI numeri). Inoltre, questo presuppone una conoscenza a priori dei valori unici all'interno del raster ...
Peet Whittaker,

Risposte:


3

Per quelli che ancora lo cercano. Valori raster unici sono stati aggiunti a QGIS 3. "Aggiunto da Nyall Dawson circa 1 anno fa

[CARATTERISTICA] Consenti la classificazione di rendering con palette usando valori univoci da un livello raster

Aggiunge un modo semplice per dare uno stile ai raster discreti come le classi landuse usando il renderizzatore Paletted. Basta selezionare il renderizzatore Paletted, scegliere una banda, quindi premere il pulsante "Aggiungi valori univoci". I valori di pixel univoci verranno recuperati dal livello e un colore assegnato a ciascuno utilizzando la rampa di colori attualmente selezionata. "


7

Ecco un approccio che potrebbe essere utile. Lo strumento GRASS r.reportè in grado di calcolare una statistica di base per ciascun valore univoco in un livello raster:

inserisci qui la descrizione dell'immagine

L'output può essere scritto come un semplice file txt simile a questo (a sinistra: valori univoci, a destra: area coperta da ciascun valore):

+-----------------------------------------------------------------------------+
|                      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|
+-----------------------------------------------------------------------------+

Il seguente script di geoprocessing prende questo file di testo come input e imposta un renderer adatto (con colori casuali per comodità) per il livello raster (Ispirato da LAWHEAD, J .: QGIS Python Programming Cookbook, p. 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)

Grazie alle leggendarie capacità di elaborazione di QGIS è possibile unire questi due elementi nel modellatore grafico e aggiungere un parametro raster per scegliere semplicemente un livello raster caricato:

inserisci qui la descrizione dell'immagine

Dopo aver salvato il modello, facendo doppio clic su di esso nella casella degli strumenti di elaborazione può essere utilizzato come un normale strumento:

inserisci qui la descrizione dell'immagine

Con un risultato simile al seguente (affioramento di un set di dati natura2000 rasterizzato):

inserisci qui la descrizione dell'immagine

O nelle proprietà del livello:

inserisci qui la descrizione dell'immagine

Penso che questo abbia bisogno di un certo perfezionamento nell'esperienza utente, ma è un primo passo.


1
non la migliore esperienza utente ma grazie per la condivisione
RutgerH

Vedendo solo lo strumento creato come interfaccia utente, credo che non ci sia nulla di sbagliato nell'esperienza utente. E chissà cosa sta succedendo dietro le quinte negli strumenti di Geoprocessing dell'ESRI ...
Jochen Schwarze,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.