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