Składnia instrukcji warunkowych w kalkulatorze polowym QGIS

12

Mam plik kształtu, który muszę zmodyfikować. Jest jedna kolumna „KLASA” z atrybutami: „A”, „B” i „C”. Muszę zmienić „A” na „1”, „B” na „2” i „C” na „3”. Próbowałem z case whenfunkcją. W jednym przypadku to nie problem, ale jak to działa z 3 w rzędzie?

Czy można również zbudować model z FieldCalculatorfunkcją?


Chyba to rozgryzłem! Czy to jest poprawne?

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

Ale nie mogę tego użyć w FieldCalculatorfunkcji modelowania ...

Pimpel
źródło

Odpowiedzi:

14

Jeśli obliczasz pole typu String , to jest właściwa składnia:

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

Zamiast tego, jeśli jest typu Integer :

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

EDYTOWAĆ

Składnia Advanced Python Field Calculatorw narzędziu Processing Toolbox różni się od standardowego kalkulatora pola QGIS. Więc powinieneś pisać wyrażenia warunkowe za pomocą Pythona:

Wyrażenie globalne:

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

Formuła:

value = getValue( <VSt_K> )

Uwaga: możliwe jest użycie Advanced Python Field Calculatorw Modeler, jednak musisz podać pola źródłowe bezpośrednio w jego formule, ponieważ pól nie można użyć jako parametrów wejściowych podczas korzystania z tego algorytmu. Alternatywnie możesz zdefiniować wejściowy parametr String zawierający domyślną formułę. Po uruchomieniu modelu można ostatecznie zmienić pole (pola) źródłowe w parametrze wejściowym Formuła, dzięki czemu model doskonale nadaje się do ponownego wykorzystania z innymi danymi.

Antonio Falciano
źródło
Dziękuję, działa! Ale czy wiesz także, jak mógłbym użyć kalkulatora pola (z pokazaną składnią) w modelarzu?
Pimpel
W odpowiedzi dodałem dalsze szczegóły, wyjaśniając, jak to zrobić. Mam nadzieję że to pomoże.
Antonio Falciano
Dziękuję Ci! Próbowałem, ale jest jeden mały problem. Teraz wynik jest taki, że właśnie zmieniłem „C” na „3”. Kiedy dodałem ciąg „elif x ==” D: value = „4”, zmieniono tylko „D” na „4”.
Pimpel
Jeśli nowe pole zostanie obliczone od zera, powinno działać zgodnie z oczekiwaniami.
Antonio Falciano
Nie wiem dlaczego, ale kiedy teraz uruchamiam mój model (nic nie zmieniłem), mówi: ... zwraca wartość, FORMULA = wartość = getValue () nie powiodło się Błąd wykonania algorytmu 0 zmienna lokalna „wartość”, do której odniesiono się przed przypisaniem Zobacz szczegóły
Pimpel