Bagaimana cara hanya menampilkan label untuk pemilihan item yang sewenang-wenang?

10

Saya ingin tahu bagaimana orang lain menyelesaikan masalah ini: Anda telah membuat peta untuk sesuatu dengan sejumlah besar fitur yang dilabeli. Pelanggan / klien meminta Anda hanya menampilkan label untuk X, Y dan Z, berdasarkan pada beberapa keputusan yang tampaknya sewenang-wenang (mis. Apa yang mereka anggap sebagai fitur penting). Bagaimana Anda akan melakukan ini?

Beberapa ide:

  • Buat kolom string baru untuk label khusus ini dan hanya mengisi nilai untuk fitur yang ingin mereka lihat (dapat menghasilkan duplikat informasi)
  • Buat kolom boolean baru dan tandai fitur yang ingin mereka lihat dengan true, kemudian gunakan pelabelan bersyarat di QGIS 1.8 untuk hanya menampilkan label ketika boolean benar
Brian Kelly
sumber
6
Gagasan kedua memiliki banyak keuntungan: (i) dengan jelas mendokumentasikan apa yang perlu diberi label, (ii) tetap dan portabel seperti dataset yang mendasarinya, (iii) ia menyediakan mekanisme sederhana dan langsung untuk menentukan label mana yang akan muncul ( yang bahkan portabel untuk GIS atau paket plotting lain), (iv) bahkan dapat dianalisis jika seandainya ada pertanyaan tentang hubungan antara pilihan label ini dan variabel lainnya, dan (v) dengan menguraikan pengkodean pilihan klien secara hati-hati , itu tidak membuat informasi rangkap.
whuber
2
@whuber, bisakah Anda membuat jawaban itu sehingga saya dapat memilihnya karena itulah yang akan saya lakukan.
Nathan W

Jawaban:

11

Gagasan kedua (untuk membuat atribut boolean untuk seleksi) memiliki banyak keuntungan :

(i) secara jelas mendokumentasikan apa yang perlu diberi label,

(ii) itu permanen dan portabel seperti dataset yang mendasarinya,

(iii) ini menyediakan mekanisme sederhana dan langsung untuk menentukan label mana yang akan muncul (yang bahkan portabel untuk GIS lain atau paket plot),

(iv) bahkan dapat menerima analisis jika ada pertanyaan tentang hubungan antara pilihan label ini dan variabel lainnya, dan

(v) dengan menyandikan secara ketat pilihan klien, itu tidak membuat informasi rangkap.

Ada beberapa prinsip konstruksi dan manajemen basis data umum yang bekerja di sini , sebagaimana disarankan secara bijaksana dalam pertanyaan. Salah satunya adalah bahwa setiap informasi yang masuk akal harus diwakili secara unik dalam database jika memungkinkan. (Informasi yang digunakan sebagai kunci untuk menerapkan gabungan dan hubungan tentu saja harus muncul di banyak tempat berdasarkan fungsinya sebagai mengidentifikasi catatan yang sesuai dalam tabel yang berbeda.) Ada alasan yang sangat baik untuk prinsip ini, karena siapa pun yang telah berusaha mempertahankan non-normalisasi database relasional dapat membuktikan: jika Anda tidak secara konsisten ingat untuk memperbarui atau menghapus atau menambahkan informasi ini ke setiap orang tabel di mana ia muncul, database Anda segera menjadi tidak konsisten secara internal: itu rusak, sering kali tidak dapat diperbaiki.

Prinsip lain adalah bahwa dalam desain basis data relasional yang baik, setiap tabel harus mewakili "entitas" konseptual tunggal : sesuatu yang dimodelkan data atau hubungan di antara hal-hal itu. Ketika klien menentukan pilihan fitur yang tampaknya sewenang-wenang, mereka secara efektif menentukan subset baris dalam tabel. Secara matematis, dengan aksioma pemisahan ini sama dengan menandai mereka dengan bidang boolean. Dengan demikian, setiap subset "sewenang-wenang" yang bermakna dalam suatu basis data dapat diwakili oleh bidang boolean dan, sebaliknya, bidang tersebut adalah cara yang baik untuk menyimpan subset (atau pilihan) sewenang-wenang.

Namun prinsip lain adalah Anda sebaiknya memilih menggunakan kemampuan manajemen data yang mendasari SIG untuk menyimpan informasi . Alternatifnya adalah beberapa ad hocmetode berdasarkan pada kemampuan GIS untuk menyimpan informasi dalam "file proyek" atau dengan cara independen lainnya. Contoh khas dari ini adalah praktik memilih dan menempatkan label yang diinginkan secara manual. Seringkali ini cepat dan mudah dilakukan. Masalah muncul ketika salah satu perubahan diperlukan atau pekerjaan perlu direproduksi; salah satu dari situasi ini praktis tidak bisa dihindari. Penempatan label secara manual sama dengan menyimpan informasi (yaitu, subset fitur apa yang harus diberi label) di luar RDBMS dengan cara yang sangat elips. Yaitu, pemilihan yang ditentukan hanya oleh label mana yang muncul dan mana yang tidak. Pikirkan bagaimana Anda akan menyelesaikan masalah berikut ini:

  • Klien ingin label yang sama muncul di peta yang terkait tetapi berbeda, bagian dari proyek yang berbeda.

  • Muncul pertanyaan apakah label dikaitkan dengan beberapa atribut lainnya.

  • Setelah membuat beberapa perubahan pada label dari waktu ke waktu, Anda diminta untuk kembali ke versi aslinya.

Dalam kasus ini, pekerjaan yang terlibat untuk menyelesaikan masalah bisa sangat besar: Anda harus mengulang kembali pelabelan, atau melakukan pemeriksaan silang secara manual terhadap tabel database, atau menemukan dan mengembalikan file proyek yang diarsipkan lama. Jika label yang diwakili oleh bidang boolean dalam database, pekerjaan itu malah hampir sepele.

whuber
sumber
1
Saya baru saja memulai dengan GIS tetapi memiliki pengetahuan basis data dari melakukan pengembangan perangkat lunak. Saya kira saya akan segera memiliki pertanyaan tindak lanjut tentang menjaga dataset asli dengan membuat tabel terpisah, khusus klien yang digabungkan 1-ke-1 dengan dataset asli dan mungkin disediakan sebagai PostgreSQL View untuk transparansi.
Brian Kelly
Ya, itu juga solusi yang bagus. Dengan pengetahuan basis data Anda, Anda tahu bahwa jarang ada satu jawaban sempurna; selalu ada pengorbanan. Tabel pencarian elegan dan sempurna untuk beberapa situasi. Bahkan, sering kali Anda hanya perlu tabel baru yang mencantumkan id fitur yang akan dilabeli: bergabung dengan tabel atribut layer membuat bidang (asing) baru yang null untuk fitur yang tidak akan diberi label, dan Anda baik untuk pergi. Tapi sekarang Anda memiliki tabel baru untuk dikelola dalam database: ada trade-off.
whuber
8

Anda mungkin bisa mengatur aturan dalam pelabelan berbasis ekspresi baru. Aturan akan berfungsi sebagai dokumentasi dari apa yang telah Anda lakukan untuk mendapatkan label yang dihasilkan.

Keuntungan dari pendekatan "bendera boolean" adalah bahwa ini lebih fleksibel saat bekerja pada aturan yang benar. Sangat mudah untuk mengubah dan meningkatkan aturan tanpa mengubah set data yang mendasarinya. Di sisi lain, itu tidak portabel untuk paket GIS lainnya.

Ini adalah contoh di mana saya hanya memberi label fitur dengan nama lebih dari enam karakter dan dengan kelas tertentu:

masukkan deskripsi gambar di sini

underdark
sumber
1
Tetapi aturan dalam kasus ini adalah "Saya menganggap fitur ini penting dan yang lain tidak penting". Saya tidak berpikir ada fungsi untuk itu :-)
Brian Kelly
1
Selain itu, pertanyaan ini terkait dengan "Kapan saya harus mengubah kumpulan data dan kapan saya harus menyalinnya?" Saya menduga itu adalah percakapan yang jauh lebih besar.
Brian Kelly
Saya hanya berasumsi fitur-fitur penting itu setidaknya akan memiliki ID yang dapat Anda gunakan seperti saya menggunakan atribut clazz. Ada pro ke kedua solusi.
underdark