Sintaksis pernyataan kondisional dalam QGIS Field Calculator


12

Saya memiliki shapefile yang perlu saya modifikasi. Ada satu kolom "CLASS" dengan atribut: "A", "B" dan "C". Saya perlu mengubah "A" menjadi "1", "B" menjadi "2" dan "C" menjadi "3". Saya mencobanya dengan case whenfungsi. Dengan satu case itu bukan masalah tapi bagaimana cara kerjanya dengan 3 berturut-turut?

Apakah mungkin untuk membangun model dengan FieldCalculatorfungsinya?


Kurasa aku sudah menemukan jawabannya! Apakah ini benar?

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

Tapi saya tidak bisa menggunakan ini dalam FieldCalculatorfungsi pemodel ...

Jawaban:


14

Jika Anda menghitung bidang tipe String , ini adalah sintaks yang tepat:

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

Sebaliknya, jika itu tipe Integer :

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

EDIT

Sintaks Advanced Python Field Calculatordalam Toolbox Pemrosesan berbeda dari yang ada pada kalkulator Lapangan QGIS standar. Jadi, Anda harus menulis ekspresi kondisional Anda menggunakan Python:

Ekspresi global:

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

Rumus:

value = getValue( <VSt_K> )

Catatan: dimungkinkan untuk menggunakan Advanced Python Field Calculatordalam Modeler, namun Anda harus menentukan bidang sumber secara langsung dalam rumusnya, karena bidang tidak dapat digunakan sebagai parameter input saat menggunakan algoritma ini. Atau, Anda dapat menentukan parameter String input yang berisi rumus default. Saat Anda menjalankan model, Anda akhirnya dapat mengubah bidang sumber pada parameter input Formula, sehingga membuat model tersebut dapat digunakan kembali dengan sempurna dengan data lainnya.


Terima kasih, ini berhasil! Tetapi apakah Anda juga tahu bagaimana saya bisa menggunakan kalkulator bidang (dengan sintaks yang ditampilkan) di pemodel?
Pimpel

Saya telah menambahkan perincian lebih lanjut dalam jawabannya, menjelaskan cara melakukannya. Semoga ini membantu.
Antonio Falciano

Terima kasih! Saya mencoba tetapi ada satu masalah kecil. Sekarang hasilnya adalah saya baru saja mengganti "C" menjadi "3". Ketika saya menambahkan string 'elif x ==' D ': value =' 4 ', saya hanya mengubah "D" menjadi "4".
Pimpel

Jika Anda menghitung bidang baru dari awal, itu akan berfungsi seperti yang diharapkan.
Antonio Falciano

Saya tidak tahu mengapa tetapi ketika saya menjalankan model saya sekarang (tidak mengubah apa-apa) dikatakan: ... mengembalikan nilai, FORMULA = nilai = getValue () Gagal mengeksekusi algoritma 0 variabel lokal 'nilai' direferensikan sebelum penugasan Lihat log untuk detail lebih lanjut
Pimpel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.