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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 04 May 2018 18:41

Arnau31
Juste Inscrit !
Date d'inscription: 2 May 2018
Messages: 1

QGIS: Créer une colonne d'indices automatiques d'après la Classif

Bonjour,

Débutant en QGis et ayant cherché un peu sur le forum, je n'ai pas encore trouvé mon bonheur smile.

Je cherche à affecter un indice dans une nouvelle colonne de ma table d'attribut vecteur qui dépendrait de mon analyse thématique > ruptures de Jenks, et celà de façon automatique (mon fichier vecteur changera à chaque lancement, du coup les valeurs limites données par Jenks aussi).

J'essaie également de faire cela sous le modeleur graphique.

Merci par avance smile.

Arnaud

Hors ligne

 

#2 Fri 11 May 2018 11:35

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: Créer une colonne d'indices automatiques d'après la Classif

Bonjour,

Il n'y a, à ma connaissance, pas de fonction native afin de récupérer l'indice courant de l'élément dans la légende

Voici une fonction que j'ai créée pour ce faire, à insérer dans l'éditeur de fonction du calculateur d'expression puis à utiliser dans un champ virtuel :

Code:

"""
Define new functions using @qgsfunction. feature and parent must always be the
last args. Use args=-1 to pass a list of values as arguments
"""

from qgis.utils import *
from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def getClassParam(param, feature, parent):
    
    # recup des param.
    lyr = iface.activeLayer()
    rdr = lyr.rendererV2()
    attr = rdr.legendClassificationAttribute()
    value = feature[attr]
    
    # on itère dans la légende
    rgs = rdr.ranges()
    for index, rg in enumerate(rgs) :
        lbl = rg.label()
        minValue = float(lbl.split(' - ')[0])
        maxValue = float(lbl.split(' - ')[1])
        if value >= minValue and value < maxValue :
            indexClass = index
            minValueClass = minValue
            maxValueClass = maxValue

    if param == 'index' :
        return indexClass
    elif param == 'min' :
        return minValueClass
    elif param == 'max' :
        return maxValueClass

A utiliser comme suit, avec deux paramètres :

Code:

getClassParam([paramètre à récupérer : index, min ou max])

Par exemple, à mettre en étiquette :

Code:

getClassParam( 'index')||' : '||getClassParam( 'min')||' - '||getClassParam( 'max')

geodata au cerema et petits billets en géomatique

Hors ligne

 

Pied de page des forums

Powered by FluxBB