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

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.

#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