13 votos

Sintaxis de las declaraciones condicionales en la calculadora de campos de QGIS

Tengo un shapefile que necesito modificar. Hay una columna "CLASS" con los atributos: "A", "B" y "C". Necesito cambiar "A" por "1", "B" por "2" y "C" por "3". Lo he intentado con la función case when. Con un caso no hay problema, pero ¿cómo funciona con 3 en una fila? ¿Es posible también construir un modelo con la función de calculadora de campos?

Gracias.


Supongo que lo he descubierto. ¿Esto es 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 función de calculadora de campo del modelador...

17voto

Nikola Puntos 21

Si está calculando un campo de Cadena 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 Entero tipo:

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

EDITAR

La sintaxis del Advanced Python Field Calculator en Processing Toolbox es diferente a la de la calculadora de campo estándar de QGIS. Por lo tanto, debe escribir sus expresiones condicionales utilizando 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 utilizar el Advanced Python Field Calculator en Modeler, sin embargo tiene que especificar el campo(s) de origen directamente en su fórmula, porque los campos no pueden ser usados como parámetros de entrada cuando se usa este algoritmo. Como alternativa, puede definir un parámetro de entrada String que contenga la fórmula por defecto. Cuando ejecute el modelo, podrá cambiar eventualmente el/los campo(s) de origen en el parámetro de entrada Fórmula, haciendo así que el modelo sea perfectamente reutilizable con otros datos.

0 votos

Gracias, ¡funciona! Pero, ¿sabéis también cómo podría utilizar la calculadora de campos (con la sintaxis mostrada) en el modelador?

0 votos

He añadido más detalles en la respuesta, explicando cómo hacerlo. Espero que esto ayude.

0 votos

Gracias. Lo he intentado pero hay un pequeño problema. El resultado es que acabo de conseguir que la "C" se convierta en "3". Cuando añadí la cadena 'elif x == 'D':value = '4' sólo conseguí que la "D" se cambiara en "4".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X