Lagi

QGIS Multiple CASE WHEN/THEN Pernyataan untuk Label Berbasis Ekspresi


Saya mencoba memberi label satu titik dengan banyak label, berdasarkan atribut untuk titik itu. Misalnya, jika salah satu atribut sama dengan 1, saya ingin memberi label dengan string teks tertentu; dan jika atribut lain sama dengan 0, saya ingin memberi label dengan string teks yang berbeda, dll. Selain itu, saya ingin menggunakan informasi atribut lain untuk mengontrol penempatan label di sekitar titik, serta warnanya.

Bisakah beberapa ekspresi CASE WHEN/THEN ditumpuk, untuk mencapai hasil yang diinginkan? Saya telah mencoba memasukkan beberapa pernyataan WHEN/THEN di dalam ekspresi CASE saya, terlihat seperti ini:

KASUS KETIKA atribut1 = 1 MAKA 'Apel' KETIKA atribut2 = 0 MAKA 'Anggur' KETIKA atribut3 >= 0 MAKA 'Pear' AKHIR

Ini mengembalikan label yang diinginkan untukatribut1, tetapi mengabaikan label untuk dua atribut lainnya. Saya percaya ini karena pernyataan CASE hanya dapat merujuk ke satu variabel/atribut pada satu waktu? Jika itu benar, apakah ada tipe ekspresi bersyarat lain yang dapat saya gunakan untuk mencapai apa yang saya inginkan? Saya mencoba menghindari keharusan menambahkan lapisan titik beberapa kali ke proyek saya, untuk memberi label berdasarkan atribut yang berbeda.


NSKASUSpenyataan bisa menyertakan beberapa atribut dalam beberapa kondisi (atau bahkan dalam kondisi yang sama:KETIKA atribut1 = 1 DAN atribut2 = 0 MAKA…adalah sah). TetapiKASUSmengevaluasi kondisi secara berurutan dan berhenti mengevaluasi setelah mencapai kondisi pertama yang dipenuhi. Jadi, untuk contoh Anda, jikaatribut1 = 1mengevaluasi untukBENAR, kondisi lainnya tidak akan dievaluasi.

Anda dapat melakukan sesuatu seperti:

KASUS KETIKA atribut1 = 1 MAKA 'Apple|' LAIN"AKHIR || KASUS KETIKA atribut2 = 0 MAKA 'Anggur|' LAIN"AKHIR || CASE WHEN atribut3 >= 0 THEN 'Pear|' LAIN"AKHIR

dan kemudian gunakan pengaturan QGIS untuk memperkenalkan jeda baris pada pipa ('|') karakter, yang setidaknya akan mendapatkan setiap kata pada barisnya sendiri. (Ada pipa tambahan di ujungnya yang mungkin harus ditangani.) Perhatikan bahwa:LAIN"diperlukan. Jika tidak, jika salah satu kondisi tidak mengevaluasi keBENAR, NSKASUSakan kembaliBATAL, danBATALdigabungkan dengan teks apa pun akan kembaliBATAL.

Tetapi untuk menjawab pertanyaan Anda yang lebih besar, saya rasa Anda tidak dapat membuat "Apple", "Grape", dll. muncul di posisi berbeda di sekitar fitur, warna berbeda, dll., bahkan menggunakan properti yang ditentukan data. Saya pikir untuk mencapai apa yang Anda inginkan, Anda harus membuat duplikat label saja dari lapisan Anda, dan memiliki satu label cetak lapisan untukatribut1di posisi dan warna yang diinginkan, label cetak lapisan lain untukatribut2dalam posisi dan warna yang diinginkan, dll.


Saya pikir apa yang ingin Anda capai lebih merupakan usecase untukKASUS KAPAN…pernyataan, tetapi untuk 'label berbasis aturan' (seperti yang disarankan dalam salah satu komentar di atas):

Misalnya, Anda dapat menentukan aturan yang disebut 'Grape' dan ekspresi untuk aturan ini adalah"atribut1" = 0. Untuk setiap aturan, Anda dapat mengatur setiap parameter (warna font, ukuran, penempatan,… ) secara terpisah. Untuk Grapes misalnya saya sudah mengatur ini sebagai berikut:

Ekspresi filter, warna teks, label:

Penempatan (di sini Kiri bawah, atau S-W):

Selain itu saya telah mengaktifkanTampilkan semua label untuk lapisan ini:

Hasilnya terlihat seperti di bawah ini (perhatikan Tabel atribut):


Tonton videonya: QGIS - UnionCombine Shapefiles - Merge Vector Layers - Method I (September 2021).