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


