Annonce
Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).
En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.
Pages: 1
- Sujet précédent - QGIS: SVP Aide sur PQGIS (MAJ Champ existant en fonction d'un autre) - Sujet suivant
#1 Wed 13 March 2019 13:08
- philippeschitter
- Juste Inscrit !
- Lieu: Drancy
- Date d'inscription: 2 Nov 2005
- Messages: 1
QGIS: SVP Aide sur PQGIS (MAJ Champ existant en fonction d'un autre)
Bonjour à toute la communauté,
Je me permets de vous contacter pour une demande en Python :
Je cherche à mettre à jour, en Python pour QGIS, un champ existant ( "ETIQUETTE") d'une table attributaire en fonction d'un autre champ ("MODE_ADDUC"), c'est-à-dire l'équivalent d'un CASE WHEN .... THEN .... ELSE ..... END en langage SQL.
-----------------------------------------------------------------
J'ai testé le code suivant en utilisant une condition if .....elif .......else (au lieu du CASE WHEN du langage SQL) :
Code:
#TEST : mettre à jour un champ existant avec boucle from PyQt4.QtCore import * from qgis.core import * vl = iface.activeLayer() vl.startEditing() #step 1 vl.updateFields() idx = vl.dataProvider().fieldNameIndex( 'ETIQUETTE' ) adduc = vl.dataProvider().fieldNameIndex( 'MODE_ADDUC' ) #step 2 for f in vl.getFeatures(): if f[adduc] == 'AERIEN': f[idx] = 'CIEL' elif f[adduc] == 'FACADE': f[idx] = 'MUR' elif f[adduc] == 'SOUTERRAIN': f[idx] = 'TERRE' else: f[idx] = 'RIEN' vl.updateFeature( f ) vl.commitChanges()
mais la console Python me retourne
Code:
Traceback (most recent call last): File "", line 2, in KeyError: '-1'
Pouvez-vous m'aider ?
-----------------------------------------------------------------
Pour info :
Le même type de code fonctionne, mais sans la condition if .... elif .... else :
Code:
#mettre à jour un champ existant from PyQt4.QtCore import QVariant from qgis.core import QgsField, QgsExpression, QgsFeature vl = iface.activeLayer() vl.startEditing() #step 1 vl.updateFields() idx = vl.fieldNameIndex( 'ETIQUETTE' ) #step 2 for f in vl.getFeatures(): f[idx] = 'ETIQPHIL' vl.updateFeature( f ) vl.commitChanges()
En vous remerciant par avance,
Philippe Schitter
Hors ligne
#2 Wed 13 March 2019 16:01
Re: QGIS: SVP Aide sur PQGIS (MAJ Champ existant en fonction d'un autre)
Bonjour,
Il se pourrait que votre champ MODE_ADDUC soit absent
Appliquez ce code, si une valeur = -1, cela indique que le champ n'existe pas
Code:
#TEST : mettre à jour un champ existant avec boucle from PyQt5.QtCore import * from qgis.core import * vl = iface.activeLayer() vl.startEditing() #step 1 vl.updateFields() idx = vl.dataProvider().fieldNameIndex( 'ETIQUETTE' ) adduc = vl.dataProvider().fieldNameIndex( 'MODE_ADDUC' ) # print print(idx, adduc)
geodata au cerema et petits billets en géomatique
Hors ligne
Pages: 1
- Sujet précédent - QGIS: SVP Aide sur PQGIS (MAJ Champ existant en fonction d'un autre) - Sujet suivant