Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

 

Pied de page des forums

Powered by FluxBB