Syntax bedingter Anweisungen in QGIS-Feldrechnern


12

Ich habe ein Shapefile, das ich ändern muss. Es gibt eine Spalte "CLASS" mit den Attributen "A", "B" und "C". Ich muss "A" in "1", "B" in "2" und "C" in "3" ändern. Ich habe es mit case whenFunktion versucht . In einem Fall ist es kein Problem, aber wie funktioniert es mit 3 in Reihe?

Ist es auch möglich, mit der FieldCalculatorFunktion ein Modell zu erstellen ?


Ich denke, ich habe es herausgefunden! Ist das richtig?

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

Aber ich kann dies nicht in der Modeler- FieldCalculatorFunktion verwenden ...

Antworten:


14

Wenn Sie ein Feld vom Typ String berechnen , ist dies die richtige Syntax:

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

Stattdessen, wenn es vom Typ Integer ist :

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

BEARBEITEN

Die Syntax der Advanced Python Field Calculator in Processing Toolbox unterscheidet sich von der des Standard-QGIS-Feldrechners. Sie sollten also Ihre bedingten Ausdrücke mit Python schreiben:

Globaler Ausdruck:

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

Formel:

value = getValue( <VSt_K> )

Hinweis: Es ist möglich, das Advanced Python Field Calculatorin Modeler zu verwenden. Sie müssen jedoch die Quellfelder direkt in der Formel angeben, da Felder bei Verwendung dieses Algorithmus nicht als Eingabeparameter verwendet werden können. Alternativ können Sie einen Eingabe-String-Parameter definieren, der die Standardformel enthält. Wenn Sie das Modell ausführen, können Sie eventuell die Quellfelder im Eingabeparameter Formula ändern, sodass das Modell für andere Daten perfekt wiederverwendbar ist.


Danke, es funktioniert! Aber wissen Sie auch, wie ich den Feldrechner (mit der gezeigten Syntax) im Modeler verwenden könnte?
Pimpel

Ich habe der Antwort weitere Details hinzugefügt und erklärt, wie es geht. Hoffe das hilft.
Antonio Falciano

Vielen Dank! Ich habe es versucht, aber es gibt ein kleines Problem. Jetzt ist das Ergebnis, dass ich gerade das "C" in "3" geändert habe. Wenn ich den String 'elif x ==' D ': value =' 4 'hinzufüge, wird nur das "D" in "4" geändert.
Pimpel

Wenn Sie ein neues Feld von Grund auf neu berechnen, sollte es wie erwartet funktionieren.
Antonio Falciano

Ich weiß nicht warum, aber wenn ich mein Modell jetzt laufe (nichts geändert habe), heißt es: ... Rückgabewert, FORMEL = Wert = Wert (getValue) Fehler beim Ausführen der lokalen Variablen 'Wert' von Algorithmus 0, auf die vor der Zuweisung verwiesen wurde Weitere Informationen finden Sie im Protokoll
Pimpel am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.