QGIS Alan Hesaplayıcılarındaki koşullu ifadelerin sözdizimi


12

Değiştirmem gereken bir şekil dosyası var. "A", "B" ve "C" özelliklerine sahip bir "CLASS" sütunu vardır. "A" yı "1", "B" yi "2" ve "C" yi "3" olarak değiştirmem gerekiyor. Ben case whenfonksiyonu ile denedim . Bir vakada bu bir sorun değil ama arka arkaya 3 ile nasıl çalışır?

FieldCalculatorFonksiyonu olan bir model oluşturmak da mümkün müdür ?


Sanırım çözdüm! Bu doğru mu?

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

Ama bunu modelleyici FieldCalculatorişlevinde kullanamıyorum ...

Yanıtlar:


14

Dize türü bir alanı hesaplıyorsanız , bu doğru sözdizimidir:

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

Bunun yerine, Tamsayı türündeyse :

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

DÜZENLE

Advanced Python Field Calculatorİşleme Araç Kutusunun sözdizimi , standart QGIS Alanı hesap makinesinin sözdiziminden farklıdır. Bu nedenle koşullu ifadelerinizi Python kullanarak yazmalısınız:

Global ifade:

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

Formül:

value = getValue( <VSt_K> )

Not:Advanced Python Field Calculator Modeler'de kullanmak mümkündür , ancak bu algoritmayı kullanırken alanlar giriş parametreleri olarak kullanılamayacağından kaynak alanlarını doğrudan formülünde belirtmeniz gerekir. Alternatif olarak, varsayılan formülü içeren bir girdi String parametresi tanımlayabilirsiniz. Modeli çalıştırdığınızda, sonunda Formül giriş parametresindeki kaynak alan (lar) ı değiştirebilir, böylece modeli diğer verilerle mükemmel şekilde yeniden kullanılabilir hale getirebilirsiniz.


Teşekkür ederim, işe yarıyor! Ancak modelleyicide alan hesap makinesini (gösterilen sözdizimiyle) nasıl kullanabileceğimi de biliyor musunuz?
Pimpel

Cevaba nasıl yapılacağını açıklayarak daha fazla ayrıntı ekledim. Bu yardımcı olur umarım.
Antonio Falciano

Teşekkür ederim! Denedim ama küçük bir sorun var. Şimdi sonuç "C" yi "3" olarak değiştirdim. 'Elif x ==' D ': value =' 4 'dizesini eklediğimde sadece "D" yi "4" olarak değiştirdim.
Pimpel

Yeni bir alanı sıfırdan hesaplarsanız, beklendiği gibi çalışması gerekir.
Antonio Falciano

Neden bilmiyorum ama şimdi modelimi çalıştırdığımda (hiçbir şey değiştirmedi) diyor ki: ... dönüş değeri, FORMULA = değer = getValue () Başarısız algoritma yürütülürken hata oluştu Atama öncesi referans verilen 0 yerel değişken 'değer'
Pimpel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.