#1 Fri 13 January 2017 10:12
- Sophie_Géo
- Participant actif
- Lieu: Nantes
- Date d'inscription: 16 Jul 2012
- Messages: 59
QGIS 2.14: Attribuer un rownumber par occurrence
Bonjour,
Je cherche à attribuer un rownumber par type d'occurrence via la calculatrice de champ mais qu'il recommence à 0 à chaque fois et de manière automatique sans avoir à les sélectionner manuellement au préalable.
Par exemple :
TYPE ID
MAISON MAISON_0001
MAISON MAISON_0002
MAISON MAISON_0003
APPARTEMENT APPARTEMENT_0001
APPARTEMENT APPARTEMENT_0002
APPARTEMENT APPARTEMENT_0003
J'ai déjà généré ça : "TYPE"+'_'+lpad(to_string(@row_number),4,0)
Mais que rajouter pour faire un genre de "group by"?
Merci!
Sophie
Hors ligne
#2 Fri 13 January 2017 10:21
Re: QGIS 2.14: Attribuer un rownumber par occurrence
Avec un CASE WHEN type= maison THEN votre formule et vous répétez ça pour le type Appartement.
Si vous avez peu de TYPE différents, c'est faisable rapidement.
Hors ligne
#3 Fri 13 January 2017 10:26
- Sophie_Géo
- Participant actif
- Lieu: Nantes
- Date d'inscription: 16 Jul 2012
- Messages: 59
Re: QGIS 2.14: Attribuer un rownumber par occurrence
Oui mais j'en ai beaucoup justement^^
Je voulais m'éviter ça
Hors ligne
#4 Tue 17 January 2017 08:35
- Anthony Philibert
- Juste Inscrit !
- Date d'inscription: 25 Oct 2016
- Messages: 5
Re: QGIS 2.14: Attribuer un rownumber par occurrence
Bonjour, j'ai développé un petit script python qui devrait répondre à votre besoin.
Allez voir à la fin de ce sujet. N'oubliez pas de travailler sur une copie de votre couche.
http://georezo.net/forum/viewtopic.php?id=104073
Voici le code adapter à votre cas.
Il vous faudra remplacer les éléments chemin_absolu_de_votre_couche , nom_du_champ et champ_a_mettre_a_jour par ceux de votre de couche.
Code:
# -*- coding: utf8 -*- #====================================================================== # Déclaration du chemin d'accès d'une couche #====================================================================== chemin = "chemin_absolu_de_votre_couche" #====================================================================== # Ouverture de la couche et ajout au registre. #====================================================================== couche = QgsVectorLayer(chemin ,"chemin","ogr") QgsMapLayerRegistry.instance().addMapLayer(couche) #====================================================================== # Récupération de la liste des entités unique d'un champ #====================================================================== ch_entite_unique = couche.fieldNameIndex("nom_du_champ") liste_entite_unique = couche.uniqueValues(ch_entite_unique) #====================================================================== # Mise en mode édition de la couche #====================================================================== couche.startEditing() #====================================================================== # Ecriture du nouvel identifiant selon les valeurs du champ choisi précédemment #====================================================================== for a in liste_entite_unique: req = QgsFeatureRequest().setFilterExpression(' "PACAGE" =\'' + str(a)+ '\' ') for i, feature in enumerate(couche.getFeatures(req)): if i < 9: feature['ID'] ="000" + str(i + 1) elif i < 99 : feature['ID'] ="00" + str(i + 1) elif i < 999 : feature['ID'] ="0" + str(i + 1) else: feature['ID'] = str(i + 1) couche.updateFeature(feature) #====================================================================== # Enregistrement des changements de la couche #====================================================================== couche.commitChanges() #====================================================================== # Fermeture de la couche de travail #====================================================================== QgsMapLayerRegistry.instance().removeMapLayer(couche)
Dernière modification par Anthony Philibert (Tue 17 January 2017 08:40)
Hors ligne