Sintaxis de declaraciones condicionales en calculadoras de campo QGIS

12

Tengo un archivo de forma que necesito modificar. Hay una columna "CLASE" con los atributos: "A", "B" y "C". Necesito cambiar "A" en "1", "B" en "2" y "C" en "3". Lo probé con la case whenfunción. Con un caso no es un problema, pero ¿cómo funciona con 3 en fila?

¿También es posible construir un modelo con la FieldCalculatorfunción?


¡Supongo que lo descubrí! ¿Es esto correcto?

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

Pero no puedo usar esto en la FieldCalculatorfunción de modelador ...

Pimpel
fuente

Respuestas:

14

Si está calculando un campo de tipo Cadena , esta es la sintaxis correcta:

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

En cambio, si es de tipo entero :

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

EDITAR

La sintaxis de la Advanced Python Field CalculatorCaja de herramientas de procesamiento es diferente de la de la calculadora de campo QGIS estándar. Entonces deberías escribir tus expresiones condicionales usando Python:

Expresión global:

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

Fórmula:

value = getValue( <VSt_K> )

Nota: es posible usar Advanced Python Field Calculatoren Modeler, sin embargo, debe especificar los campos de origen directamente en su fórmula, porque los campos no se pueden usar como parámetros de entrada cuando se usa este algoritmo. Alternativamente, puede definir un parámetro de cadena de entrada que contenga la fórmula predeterminada. Cuando ejecuta el modelo, eventualmente puede cambiar los campos de origen en el parámetro de entrada Fórmula, haciendo que el modelo sea perfectamente reutilizable con otros datos.

Antonio Falciano
fuente
¡Gracias, funciona! ¿Pero también sabes cómo podría usar la calculadora de campo (con la sintaxis mostrada) en el modelador?
Pimpel
He agregado más detalles en la respuesta, explicando cómo hacerlo. Espero que esto ayude.
Antonio Falciano
¡Gracias! Lo intenté pero hay un pequeño problema. Ahora el resultado es que acabo de cambiar la "C" a "3". Cuando agregué la cadena 'elif x ==' D ': value =' 4 'solo obtengo la "D" cambiada a "4".
Pimpel
Si calcula un nuevo campo desde cero, debería funcionar como se esperaba.
Antonio Falciano
No sé por qué, pero cuando estoy ejecutando mi modelo ahora (no cambió nada) dice: ... valor devuelto, FORMULA = value = getValue () Error Error al ejecutar el algoritmo 0 variable local 'valor' referenciado antes de la asignación Consulte el registro para obtener más detalles
Pimpel