QGIS字段计算器中条件语句的语法


12

我有一个shapefile,需要修改。一栏“ CLASS”具有属性:“ A”,“ B”和“ C”。我需要将“ A”更改为“ 1”,将“ B”更改为“ 2”,将“ C”更改为“ 3”。我尝试了case when功能。对于一种情况,这不是问题,但是如何在3行中工作呢?

是否还可以使用该FieldCalculator功能构建模型?


我想我知道了!这是正确的吗?

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

但是我不能在建模器FieldCalculator功能中使用它...

Answers:


14

如果要计算String类型的字段,那么这是正确的语法:

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

相反,如果它是Integer类型:

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

编辑

Advanced Python Field Calculator处理工具箱中的语法与标准QGIS字段计算器的语法不同。因此,您应该使用Python编写条件表达式:

全局表达:

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

式:

value = getValue( <VSt_K> )

注意:可以在Advanced Python Field Calculatorin Modeler中使用,但是您必须直接在其公式中指定源字段,因为使用此算法时,字段不能用作输入参数。或者,您可以定义一个包含默认公式的输入String参数。运行模型时,最终可以在“公式”输入参数中更改源字段,从而使模型可以与其他数据完美地重用。


谢谢,它有效!但是您还知道如何在建模器中使用字段计算器(具有所示语法)吗?
2014年

我在答案中添加了更多详细信息,解释了如何执行此操作。希望这可以帮助。
Antonio Falciano 2014年

谢谢!我尝试过,但是有一个小问题。现在的结果是,我刚刚将“ C”更改为“ 3”。当我添加'elif x =='D':value ='4'字符串时,我只将“ D”更改为“ 4”。
2014年

如果您从头开始计算新字段,它应该可以正常工作。
Antonio Falciano 2014年

我不知道为什么,但是当我现在运行我的模型(不做任何更改)时,它说:...返回值,FORMULA = value = getValue()失败执行赋值之前引用的算法0局部变量'value'错误查看日志以获取更多详细信息
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.