#1 Sat 20 July 2024 07:07
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
QGIS: Attribuer une valeur automatiquement
Bonjour,
Je dispose d'un Shape avec un champ "pylône" qui donne le numéro de pylône. Un numéro de pylône est le plus souvent présent deux fois dans ce champ. Je voudrais que dans un nouveau champ on mette la valeur 1 lorsque le numéro de pylône apparaît pour la première fois dans la liste et la valeur 0 lorsque ce numéro de pylône est répété. Cela demanderait de trier ce champ d'abord je pense. Comment faire?
Merci.
Hors ligne
#2 Sat 20 July 2024 16:42
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3885
Re: QGIS: Attribuer une valeur automatiquement
Bonjour,
Je pense que ce devrait être un champ virtuel (pour faire au plus simple) et une fonction d'agregats, genre count devrait faire l'affaire.
Hors ligne
#3 Sat 20 July 2024 17:04
- arnaudp
- Participant occasionnel
- Date d'inscription: 20 Sep 2020
- Messages: 24
Re: QGIS: Attribuer une valeur automatiquement
Bonjour Conejo,
Nous mettre à jour le champ avec un script python :
On ajoute les à une liste les identifiants rencontrés pour les compter. Et nous éditons un champ durant le traitement.
Code:
pyloneID = [] # On défini un liste qui va contenir les identifants des pylones et nous permettre des les compter. layer = iface.activeLayer() # On récupère la couche active. if layer.isEditable() : # On s'assure qu'elle soit en mode Édition # on créer un champ 'firstOccur' qui va contenir le 0 ou le 1 en fonction layer.dataProvider().addAttributes([QgsField('firstOccur',QVariant.Int)]) layer.updateFields() # Toutes les valeurs du champs sont NULL features = layer.getFeatures() for feature in features: print('Identifiant du pylône : '+str(feature['Pylone'])) pyloneID.append(feature['Pylone']) # On ajoute l'identifiant à notre liste temporaire print('Nombre d\'occurrence dans la liste : '+str(pyloneID.count(feature['Pylone']))) # On contre le nombre de fois que l'identifiant courrant apparait dans la liste if pyloneID.count(feature['Pylone']) = 1 : feature['firstOccur'] = 1 # Si on rencontre l'identifiant pour la première fois on défini le champ à 1 else: feature['firstOccur'] = 0 # Sinon nous le mettons à 0 layer.updateFeature(feature) # Nous mettons à jour l'entité else : print('La couche n\'est pas éditable. On abandonne.') print('bye-bye')
https://imgur.com/a/SBwqzdD
J'espère que ça résous le problème.
Arnaud
Hors ligne
#4 Tue 23 July 2024 13:51
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Attribuer une valeur automatiquement
Bonjour,
Merci de vos réponses.
J'ai utilisé FME, avec lequel je me suis débrouillé.
Merci quand même.
Hors ligne