Saya mencoba membuat peta untuk dicetak dan ukuran poligon saya sangat bervariasi. Karena ini akan menjadi peta referensi saya perlu memberi label setiap poligon, tetapi beberapa nama tidak akan cocok dengan poligon. Dalam kasus itu, saya ingin menggunakan id fitur dan kemudian memiliki tabel atribut yang menghubungkan id ke nama.
Yang ingin saya lakukan adalah memiliki semacam ekspresi yang dapat saya gunakan untuk memilih label mana yang akan digunakan pada peta dan baris mana yang akan dimasukkan dalam tabel atribut. Sesuatu seperti isLabelled
itu akan dapat memperhitungkan skala peta, panjang label, ukuran font, dll.
qgis
labeling
print-composer
qgis-custom-function
Ian Turton
sumber
sumber
Jawaban:
Inilah cara yang agak mendekati (tapi mudah-mudahan efektif) untuk melakukannya.
Pertama beberapa matematika. Kita perlu mencari tahu berapa banyak karakter pada ukuran font tertentu yang dapat berisi fitur. Berikut hal-hal / asumsi yang perlu diketahui:
Untuk mengetahui berapa lama suatu item ada di layar / cetak, kita dapat menggunakannya dengan dimensi terpanjang (panjang atau tinggi, atau hanya panjang jika label Anda hanya horisontal) / skala * 100 (untuk beralih dari M ke CM)
Lalu kita bisa melihat apakah label kita cocok.
Anda bisa melakukan semuanya di mesin ekspresi, tetapi ekspresi python khusus akan lebih efisien. Berikut ini tutorial tentang cara membuatnya.
Ekspresi khusus saya:
Kemudian gunakan saja ungkapan itu di label:
Anda harus memasukkan atribut apa pun yang sebenarnya Anda gunakan, dan mengubah ukuran font dari 8 menjadi apa pun yang Anda gunakan. Juga, karena font sedikit berbeda, Anda mungkin perlu mengubah sedikit sampai terlihat benar.
Anda juga bisa menggunakan ungkapan itu untuk melakukan hal-hal seperti mengubah warna berdasarkan apakah labelnya cocok atau tidak.
Untuk menggunakan ungkapan ini di luar kanvas peta (yaitu dalam label komposer atau tabel atribut) kita perlu cara untuk secara programatik mendapatkan skala dari item peta yang diberikan. Saya telah memposting kode untuk menyelesaikannya di jawaban lain di sini . Metode di sana memberi kami ekspresi getScale ('composername', 'mapname') sehingga untuk memasukkannya ke dalam ekspresi kami:
sumber
Gandakan layer, satu tanpa simbologi, dan atur tingkat pembesaran / pengaturan hambatan yang berbeda untuk masing-masing label.
sumber
Saya memiliki situasi yang serupa dengan kewajiban untuk memberi label pada setiap jalan di lapisan jalan. Solusi saya adalah membuat kanvas dengan ukuran yang lebih besar, mengekspor ke PDF dan kemudian mencetak PDF ke ukuran yang diperlukan.
Misalnya, produk jadi harus A3. Di atas kanvas di A3 saya tidak bisa memuat semua label. Jadi saya membuat kanvas A2 dan memungkinkan semua label terlihat. Buat PDF dari peta ukuran A2 dan cetak sebagai A3.
sumber