Sintassi delle istruzioni condizionali nei calcolatori di campo QGIS


12

Ho uno shapefile che devo modificare. Esiste una colonna "CLASS" con gli attributi: "A", "B" e "C". Devo cambiare "A" in "1", "B" in "2" e "C" in "3". L'ho provato con la case whenfunzione. In un caso non è un problema ma come funziona con 3 di fila?

È anche possibile creare un modello con la FieldCalculatorfunzione?


Immagino di averlo capito! È giusto?

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

Ma non posso usarlo nella FieldCalculatorfunzione modellatore ...

Risposte:


14

Se stai calcolando un campo di tipo String , questa è la sintassi corretta:

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

Invece, se è di tipo intero :

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

MODIFICARE

La sintassi di Advanced Python Field Calculatorin Processing Toolbox è diversa da quella del calcolatore di campo QGIS standard. Quindi dovresti scrivere le tue espressioni condizionali usando Python:

Espressione globale:

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

Formula:

value = getValue( <VSt_K> )

Nota: è possibile utilizzare Advanced Python Field Calculatorin Modeler, tuttavia è necessario specificare i campi di origine direttamente nella sua formula, poiché i campi non possono essere utilizzati come parametri di input quando si utilizza questo algoritmo. In alternativa, è possibile definire un parametro String di input contenente la formula predefinita. Quando si esegue il modello, è possibile eventualmente modificare i campi di origine nel parametro di input Formula, rendendo il modello perfettamente riutilizzabile con altri dati.


Grazie, funziona! Ma sai anche come potrei usare il calcolatore di campo (con la sintassi mostrata) nel modellatore?
Pimpel,

Ho aggiunto ulteriori dettagli nella risposta, spiegando come farlo. Spero che sia di aiuto.
Antonio Falciano,

Grazie! Ho provato ma c'è un piccolo problema. Ora il risultato è che ho appena cambiato la "C" in "3". Quando ho aggiunto la stringa 'elif x ==' D ': value =' 4 'ho solo cambiato la "D" in "4".
Pimpel,

Se si calcola un nuovo campo da zero, dovrebbe funzionare come previsto.
Antonio Falciano,

Non so perché ma quando sto eseguendo il mio modello ora (non ha cambiato nulla), dice: ... return value, FORMULA = value = getValue () Errore fallito nell'esecuzione dell'algoritmo 0 variabile locale 'value' a cui si fa riferimento prima dell'assegnazione Vedi log per maggiori dettagli
Pimpel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.