Estilizar automaticamente a varredura usando valores exclusivos no QGIS?

17

No ArcMap, é possível calcular automaticamente os valores exclusivos de uma varredura e, em seguida, aplicar um estilo diferente a cada valor exclusivo (consulte a 1ª imagem).

No entanto, no QGIS, preciso adicionar manualmente valores de estilo ao usar o estilo "pseudocolor de banda única" (consulte a segunda imagem). Existe uma maneira de preencher automaticamente os valores exclusivos, como o ArcMap?

ArcMap:

Valores únicos da simbologia raster do ArcMap

QGIS (como preencher automaticamente a lista de valores com valores exclusivos?):

Rastreio QGIS raster

Peet Whittaker
fonte
Você tem a classificação no lado direito. Não sei por que você recortou isso em sua captura de tela, pois estas são as opções que você precisa ... Basta definir o número de classes como sua diferença máxima - mínima +1. Use o mesmo intervalo de modo. O problema pode ser quando seus dados não são contíguos; é necessário excluir os valores não utilizados.
Matte
@ Matte De fato, no entanto, geralmente temos dados não contíguos com grandes lacunas. Portanto, não é prático excluir os valores que não estão realmente dentro da varredura (digamos, por exemplo, os únicos valores são 1 e 1000000, você precisaria excluir manualmente MUITOS números). Além disso, este assume algum a priori conhecimento dos valores exclusivos dentro do raster ...
Peet Whittaker

Respostas:

3

Para quem ainda procura por isso. Valores raster exclusivos foram adicionados ao QGIS 3. "Adicionado por Nyall Dawson aproximadamente 1 ano atrás

[FEATURE] Permite classificar o renderizador paletizado usando valores exclusivos de uma camada raster

Adiciona uma maneira fácil de estilizar rasters discretos, como classes de uso do solo, usando o renderizador Paletted. Basta selecionar o renderizador Paletted, escolher uma banda e clicar no botão "Add Unique Values". Os valores exclusivos de pixel serão buscados na camada e uma cor atribuída a cada um usando a rampa de cores atualmente selecionada ".

Baswein
fonte
7

Aqui está uma abordagem que pode ser útil. A ferramenta GRASS r.reporté capaz de calcular uma estatística básica para cada valor único em uma camada raster:

insira a descrição da imagem aqui

A saída pode ser gravada como um arquivo txt simples parecido com este (esquerda: valores únicos, direita: área coberta 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|
+-----------------------------------------------------------------------------+

O script de geoprocessamento a seguir leva esse arquivo de texto como uma entrada e configura um renderizador adequado (com cores aleatórias por conveniência) para a camada raster (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)

Graças aos lendários recursos de processamento do QGIS, você pode agrupar esses dois no modelador gráfico e adicionar um parâmetro de varredura para escolher simplesmente uma camada de varredura carregada:

insira a descrição da imagem aqui

Após salvar o modelo, clicando duas vezes na caixa de ferramentas de processamento, ele pode ser usado como uma ferramenta normal:

insira a descrição da imagem aqui

Com um resultado parecido com este (afloramento de um conjunto de dados natura2000 rasterizado):

insira a descrição da imagem aqui

Ou nas propriedades da camada:

insira a descrição da imagem aqui

Eu acho que isso precisa de algum aprimoramento na experiência do usuário, mas é o primeiro passo.

Jochen Schwarze
fonte
1
Não a melhor experiência do usuário, mas obrigado por compartilhar
RutgerH
Ao ver apenas a ferramenta criada como interface do usuário, não há nada de errado com a experiência do usuário, eu acho. E quem sabe, o que está acontecendo por trás da cena em ferramentas ESRI Geoprocessamento ...
Jochen Schwarze