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 16 July 2021 17:00

Demonshine
Participant occasionnel
Date d'inscription: 27 May 2021
Messages: 21

QGIS/Python: iteration script en fonction des valeurs d"un champ

Bonjour,

J'ai réalisé un script Python qui permet de numéroter les polygones d'une couche en fonction d'un ordre précis. Cependant, j'aimerais que la numérotation se fasse en fonction des noms de mes polygones. C'est-à-dire pour un polygone nommé "XX", exécuter mon script pour me numéroter tous les polygones appelés "XX" de 1 à n et pour un polygone nommé "YY" et présent dans la même table, réitérer l'opération en réinitialisant la  numérotation de 1 à n pour tous les polygones nommés "YY" et donc indépendamment des polygones qui ne portent pas le même nom. J'ai un champ "nom" dans la table qui regroupe tous mes polygones me permettant de les différencier.

Voici mon script qui marche avec une numérotation sur toute ma table sans prendre en compte les noms des polygones :


Code:

from qgis.utils import iface
from PyQt5.QtCore import QVariant

layer = iface.activeLayer()
idfield = 'num_page'


coords = [[round(f.geometry().centroid().asPoint().x(),0),round(f.geometry().centroid().asPoint().y(),0),f.id()]]
coords.sort(key=lambda k: (k[1],-k[0]), reverse=True)
order = [i[2] for i in coords]

i = layer.fields().indexFromName(idfield)
attrMap = {id: {i:e} for e,id in enumerate(order,1)}
layer.dataProvider().changeAttributeValues(attrMap)

Pour faire ce script en fonction du champ "nom" de ma table, j'ai essayé d'utiliser la fonction for f in layer.getFeature() mais cela ne marche pas.

Auriez-vous une solution s'il-vous-plaît ?

Merci d'avance pour votre aide,

Hors ligne

 

Pied de page des forums

Powered by FluxBB