Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Fri 04 June 2021 15:09

Ludo
Participant assidu
Lieu: Messanges
Date d'inscription: 5 Sep 2005
Messages: 231
Site web

QGIS/Python: Rafraichir la legende du panneau layers

Bonjour à tous,
J'essaie de gérer le style d'un raster en python
Cela fonctionne comme je le souhaite pour le raster, néanmoins plusieurs soucis demeurent :

Sur la capture jointe, voila le résultat obtenu après le traitement python
Ma première question : comment faire que la légende du panneau layers (à gauche) soit mise à jour et corresponde à ce que j'ai dans le panneau style (à droite)
A noter qu'il suffit que j'aille dans ce panneau style, que je valide par Apply pour que ça soit répercuté dans le panneau layers ... évidement je cherche à le faire en Python

Ma deuxième question :
Sauriez vous comment faire en python pour obtenir le meme comportement que lorsqu'on va dans le panneau style / legend setting et qu'on décoche use continuous legend -> ce qui permet d'avoir les différents items de la rampe de couleur affiché avec leur label ?

Mon code actuel :

Code:

rlayer = QgsProject.instance().mapLayersByName('ma_couche')[0]
extent = rlayer.extent()
provider = rlayer.dataProvider()

colDic={'1':'#fff5eb','2':'#7f2704'}
fcn = QgsColorRampShader()
fcn.setColorRampType(QgsColorRampShader.Interpolated)
stats = provider.bandStatistics(1, QgsRasterBandStats.All, extent, 0)
min = stats.minimumValue
max = stats.maximumValue

lst2 = [ QgsColorRampShader.ColorRampItem(min, QColor(colDic['1']), str(min)),
        QgsColorRampShader.ColorRampItem(max, QColor(colDic['2']), str(round(max)))]

fcn.setColorRampItemList(lst2)

shader = QgsRasterShader()
shader.setRasterShaderFunction(fcn)
renderer = QgsSingleBandPseudoColorRenderer(rlayer.dataProvider(), 1, shader)
rlayer.setRenderer(renderer)
rlayer.triggerRepaint()
iface.layerTreeView().refreshLayerSymbology(rlayer.id())

Merci à tous


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Fri 04 June 2021 15:15

Ludo
Participant assidu
Lieu: Messanges
Date d'inscription: 5 Sep 2005
Messages: 231
Site web

Re: QGIS/Python: Rafraichir la legende du panneau layers

Je viens de voir que le soucis semble connu ici https://github.com/qgis/QGIS/issues/29536
Néanmoins de mon côté je suis sous QGIS 3.18, cela semblait résolu depuis ...

Hors ligne

 

#3 Fri 04 June 2021 15:28

Ludo
Participant assidu
Lieu: Messanges
Date d'inscription: 5 Sep 2005
Messages: 231
Site web

Re: QGIS/Python: Rafraichir la legende du panneau layers

Et bien après test en version 3.12, cela semble parfaitement fonctionner ...
Si vous avez une solution pour la 3.18, ça m’intéresse tout de même

Hors ligne

 

Pied de page des forums

Powered by FluxBB