Style raster automatique en utilisant des valeurs uniques dans QGIS?

17

Dans ArcMap, il est possible de calculer automatiquement les valeurs uniques d'un raster, puis d'appliquer un style différent à chaque valeur unique (voir la 1ère image).

Cependant, dans QGIS, je dois ajouter manuellement des valeurs de style lors de l'utilisation du style "Pseudocolor Singleband" (voir 2ème image). Existe-t-il un moyen de remplir automatiquement les valeurs uniques comme le fait ArcMap?

ArcMap:

Valeurs uniques de la symbologie raster ArcMap

QGIS (comment remplir automatiquement la liste de valeurs avec des valeurs uniques?):

QGIS raster stlying

Peet Whittaker
la source
Vous avez le classement sur le côté droit. Vous ne savez pas pourquoi vous avez coupé cela dans votre capture d'écran car ce sont les options dont vous avez besoin ... Réglez simplement le nombre de classes à votre différence max - min +1. Utilisez le même intervalle de mode. Le problème peut être lorsque vos données ne sont pas contigües, vous devez alors supprimer les valeurs non utilisées.
Mat
@Matte En effet, cependant, nous avons généralement des données non contiguës avec de grandes lacunes. Ainsi, il n'est pas pratique de supprimer les valeurs qui ne se trouvent pas réellement dans le raster (par exemple, les seules valeurs sont 1 et 1000000, vous devez supprimer manuellement BEAUCOUP de nombres). De plus, cela suppose une connaissance a priori des valeurs uniques au sein du raster ...
Peet Whittaker

Réponses:

3

Pour ceux qui recherchent toujours cela. Des valeurs raster uniques ont été ajoutées à QGIS 3. "Ajouté par Nyall Dawson il y a environ 1 an passé

[FONCTION] Autoriser la classification du rendu palettisé à l'aide de valeurs uniques à partir d'une couche raster

Ajoute un moyen simple de styliser des rasters discrets tels que des classes d'utilisation du sol à l'aide du rendu à palette. Sélectionnez simplement le rendu à palette, choisissez une bande, puis appuyez sur le bouton "Ajouter des valeurs uniques". Les valeurs de pixels uniques seront extraites du calque et une couleur attribuée à chacun en utilisant la rampe de couleurs actuellement sélectionnée. "

Baswein
la source
7

Voici une approche qui pourrait être utile. L'outil GRASS r.reportest capable de calculer une statistique de base pour chaque valeur unique dans une couche raster:

entrez la description de l'image ici

La sortie peut être écrite comme un simple fichier txt ressemblant à ceci (gauche: valeurs uniques, droite: zone couverte par chaque valeur):

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

Le script de géotraitement suivant prend ce fichier texte en entrée et configure un rendu approprié (avec des couleurs aléatoires pour plus de commodité) pour la couche raster (Inspiré par 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)

Grâce aux capacités de traitement légendaires de QGIS, vous pouvez les assembler dans le modeleur graphique et ajouter un paramètre raster afin de choisir simplement une couche raster chargée:

entrez la description de l'image ici

Après avoir enregistré le modèle, en double-cliquant dessus dans la boîte à outils de traitement, il peut être utilisé comme un outil normal:

entrez la description de l'image ici

Avec un résultat ressemblant à ceci (affleurement d'un jeu de données natura2000 rasterisé):

entrez la description de l'image ici

Ou dans les propriétés du calque:

entrez la description de l'image ici

Je pense que cela nécessite un certain raffinement dans l'expérience utilisateur, mais c'est une première étape.

Jochen Schwarze
la source
1
pas la meilleure expérience utilisateur mais merci pour le partage
RutgerH
En ne voyant que l'outil créé comme interface utilisateur, il n'y a rien de mal à l'expérience utilisateur, je pense. Et qui sait, que se passe-t-il en coulisse dans les outils de géotraitement ESRI ...
Jochen Schwarze