Syntaxe des instructions conditionnelles dans les calculateurs de champ QGIS

12

J'ai un fichier de formes que je dois modifier. Il y a une colonne "CLASS" avec les attributs: "A", "B" et "C". Je dois changer "A" en "1", "B" en "2" et "C" en "3". Je l'ai essayé avec case whenfonction. Avec un cas, ce n'est pas un problème, mais comment ça marche avec 3 en ligne?

Est-il également possible de construire un modèle avec la FieldCalculatorfonction?


Je suppose que je l'ai compris! Est-ce correct?

CASE
  WHEN "VSt_K" IS 'E' THEN '5'
  WHEN "VSt_K" IS 'A' THEN '1'
  WHEN "VSt_K" IS 'B' THEN '2'
  WHEN "VSt_K" IS 'C' THEN '3'
END

Mais je ne peux pas utiliser cela dans la FieldCalculatorfonction modeleur ...

Pimpel
la source

Réponses:

14

Si vous calculez un champ de type String , voici la bonne syntaxe:

CASE 
  WHEN "VSt_K" = 'A' THEN '1'
  WHEN "VSt_K" = 'B' THEN '2'
  WHEN "VSt_K" = 'C' THEN '3'
END

Au lieu de cela, s'il s'agit d'un type entier :

CASE 
  WHEN "VSt_K" = 'A' THEN 1
  WHEN "VSt_K" = 'B' THEN 2
  WHEN "VSt_K" = 'C' THEN 3
END

ÉDITER

La syntaxe de Advanced Python Field Calculatorin Processing Toolbox est différente de celle de la calculatrice QGIS Field standard. Vous devez donc écrire vos expressions conditionnelles en utilisant Python:

Expression globale:

def getValue(x):
    if x == 'A':
        value = '1'
    elif x == 'B':
        value = '2'
    elif x == 'C':
        value = '3'
    # ...and so on
    return value

Formule:

value = getValue( <VSt_K> )

Remarque: il est possible d'utiliser le Advanced Python Field Calculatordans Modeler, mais vous devez spécifier le ou les champs source directement dans sa formule, car les champs ne peuvent pas être utilisés comme paramètres d'entrée lors de l'utilisation de cet algorithme. Vous pouvez également définir un paramètre String d'entrée contenant la formule par défaut. Lorsque vous exécutez le modèle, vous pouvez éventuellement modifier le ou les champs source dans le paramètre d'entrée Formule, ce qui rend le modèle parfaitement réutilisable avec d'autres données.

Antonio Falciano
la source
Merci, ça marche! Mais savez-vous aussi comment utiliser la calculatrice de champ (avec la syntaxe indiquée) dans le modeleur?
Pimpel
J'ai ajouté plus de détails dans la réponse, expliquant comment le faire. J'espère que cela t'aides.
Antonio Falciano
Je vous remercie! J'ai essayé mais il y a un petit problème. Maintenant, le résultat est que je viens de changer le "C" en "3". Quand j'ai ajouté la chaîne 'elif x ==' D ': value =' 4 ', je n'ai que le "D" changé en "4".
Pimpel
Si vous calculez un nouveau champ à partir de zéro, il devrait fonctionner comme prévu.
Antonio Falciano
Je ne sais pas pourquoi mais lorsque je lance mon modèle maintenant (n'a rien changé), il dit: ... valeur de retour, FORMULE = valeur = getValue () Échec Erreur d'exécution de l'algorithme 0 variable locale 'valeur' ​​référencée avant l'affectation Voir journal pour plus de détails
Pimpel