Sintaxe de instruções condicionais nas Calculadoras de Campo QGIS

12

Eu tenho um shapefile que preciso modificar. Há uma coluna "CLASS" com os atributos: "A", "B" e "C". Eu preciso mudar "A" para "1", "B" para "2" e "C" para "3". Eu tentei com case whenfunção. Com um caso, não é um problema, mas como funciona com 3 em linha?

Também é possível construir um modelo com a FieldCalculatorfunção?


Eu acho que descobri! Isto está certo?

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

Mas não posso usar isso na FieldCalculatorfunção modelador ...

Pimpel
fonte

Respostas:

14

Se você estiver calculando um campo do tipo String , esta é a sintaxe correta:

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

Em vez disso, se for do tipo Inteiro :

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

EDITAR

A sintaxe da Advanced Python Field Calculatorcaixa de ferramentas de processamento é diferente da da calculadora padrão do campo QGIS. Então você deve escrever suas expressões condicionais usando Python:

Expressão 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: é possível usar o Advanced Python Field Calculatorno Modeler, no entanto, você deve especificar o (s) campo (s) de origem diretamente em sua fórmula, porque os campos não podem ser usados ​​como parâmetros de entrada ao usar esse algoritmo. Como alternativa, você pode definir um parâmetro String de entrada contendo a fórmula padrão. Ao executar o modelo, é possível alterar os campos de origem no parâmetro de entrada Fórmula, tornando o modelo perfeitamente reutilizável com outros dados.

Antonio Falciano
fonte
Obrigado, funciona! Mas você também sabe como eu poderia usar a calculadora de campo (com a sintaxe mostrada) no modelador?
Pimpel
Adicionei mais detalhes na resposta, explicando como fazê-lo. Espero que isto ajude.
Antonio Falciano 31/01
Obrigado! Eu tentei, mas há um pequeno problema. Agora, o resultado é que acabei de alterar o "C" para "3". Quando adicionei a string 'elif x ==' D ': value =' 4 ', apenas o "D" foi alterado para "4".
Pimpel
Se você calcular um novo campo do zero, ele deverá funcionar conforme o esperado.
Antonio Falciano 31/01
Eu não sei por que, mas quando estou executando meu modelo agora (não mudou nada), ele diz: ... retornar valor, FORMULA = value = getValue () Falha ao executar o algoritmo 0 variável local 'value' referenciada antes da atribuição Consulte o log para obter mais detalhes
Pimpel