Diseñar automáticamente el ráster con valores únicos en QGIS?

17

En ArcMap, es posible calcular automáticamente los valores únicos para un ráster y luego aplicar un estilo diferente a cada valor único (vea la primera imagen).

Sin embargo, en QGIS, tengo que agregar manualmente valores para el estilo cuando uso el estilo de "pseudocolor de banda única" (ver segunda imagen). ¿Hay alguna forma de completar automáticamente los valores únicos como lo hace ArcMap?

ArcMap:

Valores únicos de simbología de ráster de ArcMap

QGIS (¿cómo rellenar automáticamente la lista de valores con valores únicos?):

QGIS trama stlying

Peet Whittaker
fuente
Tienes la clasificación en el lado derecho. No estoy seguro de por qué corta esto en su Captura de pantalla, ya que estas son las opciones que necesita ... Simplemente configure el número de clases en su diferencia máxima-mínima +1. Utilice el modo mismo intervalo. El problema puede ser cuando sus datos no están con usted, entonces debe eliminar los valores no utilizados.
Mate
@Matte De hecho, sin embargo, generalmente tenemos datos no contiguos con grandes brechas. Por lo tanto, no es práctico eliminar los valores que no están realmente dentro del ráster (por ejemplo, los únicos valores son 1 y 1000000, tendría que eliminar manualmente MUCHOS números). Además, esto supone un conocimiento a priori de los valores únicos dentro de la trama ...
Peet Whittaker

Respuestas:

3

Para aquellos que todavía buscan esto. Se han agregado valores ráster únicos a QGIS 3. "Agregado por Nyall Dawson hace aproximadamente 1 año

[CARACTERÍSTICA] Permitir clasificar el renderizador paletizado utilizando valores únicos de una capa ráster

Agrega una manera fácil de diseñar rásteres discretos como clases de uso de la tierra utilizando el renderizador Paletizado. Simplemente seleccione el renderizador Paletizado, elija una banda, luego presione el botón "Agregar valores únicos". Los valores de píxeles únicos se obtendrán de la capa y se asignará un color a cada uno utilizando la rampa de color seleccionada actualmente ".

Baswein
fuente
7

Aquí hay un enfoque que podría ser útil. La herramienta GRASS r.reportes capaz de calcular una estadística básica para cada valor único en una capa ráster:

ingrese la descripción de la imagen aquí

La salida se puede escribir como un archivo txt simple que se ve así (izquierda: valores únicos, derecha: área cubierta por cada valor):

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

La siguiente secuencia de comandos de geoprocesamiento toma este archivo de texto como entrada y configura un renderizador adecuado (con colores aleatorios para mayor comodidad) para la capa ráster (Inspirado por 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)

Gracias a las legendarias capacidades de procesamiento de QGIS, puede poner estos dos juntos en el modelador gráfico y agregar un parámetro ráster para simplemente elegir una capa ráster cargada:

ingrese la descripción de la imagen aquí

Después de guardar el modelo, al hacer doble clic en el cuadro de herramientas de procesamiento, puede usarse como una herramienta normal:

ingrese la descripción de la imagen aquí

Con un resultado similar a este (afloramiento de un dataset natura2000 rasterizado):

ingrese la descripción de la imagen aquí

O en las propiedades de la capa:

ingrese la descripción de la imagen aquí

Creo que esto necesita un poco de refinamiento en la experiencia del usuario, pero es un primer paso.

Jochen Schwarze
fuente
1
no es la mejor experiencia para el usuario, pero gracias por compartir
RutgerH
Al ver solo la herramienta creada como la interfaz de usuario, creo que no hay nada de malo en la experiencia del usuario. Y quién sabe, qué sucede detrás de escena en las herramientas de geoprocesamiento de ESRI ...
Jochen Schwarze