Синтаксис условных операторов в QGIS Field Calculator (s)


12

У меня есть шейп-файл, который мне нужно изменить. Есть один столбец «КЛАСС» с атрибутами: «А», «В» и «С». Мне нужно изменить «А» на «1», «В» на «2» и «С» на «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функции разработчика моделей ...

Ответы:


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 CalculatorIn Processing Toolbox отличается от синтаксиса стандартного калькулятора полей 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, содержащий формулу по умолчанию. Когда вы запускаете модель, вы можете в конечном итоге изменить исходное поле (поля) во входном параметре Formula, что делает модель идеально пригодной для повторного использования с другими данными.


Спасибо, это работает! Но знаете ли вы, как я мог бы использовать калькулятор поля (с показанным синтаксисом) в моделере?
Pimpel

Я добавил дополнительные детали в ответ, объясняя, как это сделать. Надеюсь это поможет.
Антонио Фальчано

Спасибо! Я пытался, но есть одна маленькая проблема. Теперь результат в том, что я только что поменял "С" на "3". Когда я добавил строку 'elif x ==' D ': value =' 4 ', я изменил только «D» на «4».
Pimpel

Если вы вычисляете новое поле с нуля, оно должно работать как положено.
Антонио Фальчано

Я не знаю почему, но когда я сейчас запускаю свою модель (ничего не менял), она говорит: ... возвращаемое значение, FORMULA = value = getValue () Ошибка Ошибка при выполнении алгоритма 0 локальная переменная 'value', на которую ссылается до назначения См. Журнал для более подробной информации.
Pimpel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.