Синтаксис умовних висловлювань у польових калькуляторах QGIS


12

У мене є файл форми, який мені потрібно змінити. Є один стовпчик "КЛАС" з атрибутами: "А", "В" і "С". Мені потрібно змінити "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...

Відповіді:


14

Якщо ви обчислюєте поле типу String , це правильний синтаксис:

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

Натомість, якщо він є цілим типом:

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

EDIT

Синтаксис Advanced Python Field CalculatorInbox Processing Toolbox відрізняється від стандартного калькулятора QGIS Field. Тож слід записати свої умовні вирази за допомогою 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 Calculatorв Modeler, однак вам потрібно вказати джерела (поля) джерела безпосередньо у його формулі, оскільки поля не можуть бути використані як вхідні параметри при використанні цього алгоритму. Крім того, ви можете визначити параметр String для введення, що містить формулу за замовчуванням. Під час запуску моделі ви з часом можете змінити поля (поля) джерела у вхідному параметрі Формули, тим самим зробивши модель ідеально багаторазовою для використання з іншими даними.


Дякую, це працює! Але чи знаєте ви також, як я міг використовувати калькулятор поля (із показаним синтаксисом) у моделері?
Пімпель

Додаткові подробиці я додав у відповідь, пояснюючи, як це зробити. Сподіваюсь, це допомагає.
Антоніо Фальчіано

Дякую! Я спробував, але є одна маленька проблема. Тепер результат такий, що я щойно змінив "C" на "3". Коли я додав рядок 'elif x ==' D ': value =' 4 ', я отримую лише "D", змінений на "4".
Пімпель

Якщо ви обчислите нове поле з нуля, воно повинно працювати як очікувалося.
Антоніо Фальчіано

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