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 ...

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.