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.