Saya menggunakan QGIS 2.18. Saya perlu membuat lampu sektor untuk keperluan navigasi di peta.
Saya memiliki data sektor ringan sebagai bidang yang memberikan becon_id, derajat mulai, derajat akhir dan warna dalam suatu shapefile dengan lebih dari 500 pelampung, suar dan mercusuar yang perlu ditampilkan di peta. Untuk setiap suar, mungkin ada banyak baris, masing-masing menggambarkan satu sektor ringan (misalnya sektor putih)
Hasil akhirnya akan terlihat seperti di bawah ini: Sektor cahaya dalam warna yang tepat, dengan warna yang ditandai sebagai karakter dalam bidang warna (RGW), dan garis putus-putus dari 100 m hingga 1000 m dari buoy / suar / mercusuar.
Ini kemungkinan besar harus dibuat sebagai simbol berbasis aturan, tetapi perlu beberapa python kurasa?
Di bawah ini adalah contoh data shapefile untuk mercusuar (sayangnya bukan yang di atas) yang memiliki sektor hijau antara 114 dan 154 derajat, sektor putih antara 154 dan 168 derajat, sektor merah antara 168 dan 237 derajat, hijau sektor antara 237 dan 314 derajat, sektor putih antara 314 dan 320 derajat, sektor merah antara 320 dan 337 derajat (untuk beberapa alasan, 0 bukan utara tetapi selatan):
Jawaban:
EDIT Saya mengedit jawaban untuk mengelola situasi tertentu (karena nilai sudut tertentu) dan untuk tidak menampilkan garis putus-putus ketika sudut bundar ditentukan.
Saya mengusulkan solusi dengan hanya berulang pada simbologi dan pelabelan berbasis aturan.
Sebelum memulai, saya ingin menggarisbawahi bahwa saya akan memusatkan perhatian pada penjelasan tentang hal-hal minimal yang harus dilakukan untuk mereproduksi hasil yang diinginkan: ini berarti bahwa beberapa parameter kecil lainnya (seperti ukuran, lebar dan sebagainya) harus mudah disesuaikan oleh Anda untuk lebih menyesuaikan kebutuhan Anda.
Selain itu, solusi ini hanya berfungsi jika Anda menganggap bahwa
0
derajat adalah Utara dan bukan Selatan (jika0
Selatan, sebaliknya, itu akan cukup menjumlahkan suatu180
nilai setiap kali muncul '90' dalam rumus yang berhubungan dengan sudut, misalnyacos(radians(90))
akan menjadicos(radians(180 + 90))
). Saya lebih suka melakukan ini hanya demi memberikan solusi yang lebih umum.Styling
Kami akan memberikan poin dengan a
Single symbol
dan dengan berulang ke satuSimple Marker
dan tigaGeometry generator
lapisan simbol:Dalam penjelasan lebih lanjut, saya akan mengikuti urutan simbol yang sama pada gambar di atas.
1) Penanda Sederhana
Saya memilih simbol default bintang hitam (ini adalah bagian yang lebih mudah dari tutorial ini), memiliki ukuran 3 mm dan lebar 0,4 mm.
2) Generator Geometri No. 1
Tambahkan layer simbol baru dan pilih
Geometry generator
jenisnya:Masukkan ungkapan ini di
Expression
bidang:Kami baru saja mendefinisikan garis pertama yang menunjuk ke titik di mana sektor cahaya dimulai. Garis ini panjangnya 1000 m dan dibuat hanya jika sudut pembukaan lampu sektor bukan sudut bundar (ini terjadi untuk menghindari bahwa garis akan memecah seluruh lingkaran).
3) Generator Geometri No. 2
Sama seperti di atas tetapi, pada langkah ini, Anda perlu menggunakan ungkapan ini:
Kami baru saja mendefinisikan garis pertama yang menunjuk ke titik di mana sektor ringan berakhir. Garis ini panjangnya 1000 m dan dibuat hanya jika sudut pembukaan lampu sektor bukan sudut bundar (ini terjadi untuk menghindari bahwa garis akan memecah seluruh lingkaran).
4) Generator Geometri No. 3
Masukkan ungkapan ini di
Expression
bidang:Kami baru saja mendefinisikan busur antara titik awal dan akhir dari sektor ringan (harap dicatat bahwa
2000
ini adalah nilai arbitrer karena saya mencoba membuat poligon untuk memotong dengan batas lingkaran yang memiliki jari-jari 900 m).Selanjutnya, kita perlu mengatur warna yang disimpan di
"VARIS"
lapangan. Untuk melakukan ini, kita perlu menentukannya dengan ekspresi khusus. Ikuti panah pada gambar di bawah ini:dan kemudian ketik ungkapan ini setelah mengklik
Edit...
tombol:Harap perhatikan bahwa, untuk lapisan simbol ini, saya membuat dua baris: garis atas menentukan warna yang akan digunakan (sebenarnya saya mengatur ekspresi khusus untuk yang satu ini), sedangkan yang lebih rendah berguna untuk menentukan batas hitam (akan memiliki lebar yang lebih besar dari pada garis atas). Ingat juga untuk mengatur
Flat
sebagaiCap style
untuk kedua baris untuk menghindari warna yang tumpang tindih.Pelabelan
1) Mengatur label
Pergi ke
Layer Properties
>Labels
dan, seperti biasa, ikuti panah merah:lalu ketikkan ungkapan ini:
Kami baru saja menetapkan aturan warna menggunakan nilai yang disimpan di
"VARIS"
bidang.2) Mengatur penempatan untuk label
Pilih
Placement
opsi diLabels
Menu dan pilihOffset from point
.Kemudian, dengan mengacu pada gambar di bawah ini:
ikuti panah merah dan ketik ungkapan ini:
Kemudian, ikuti panah hijau dan ketikkan ungkapan ini:
Hasil akhir
Jika Anda melakukan tugas-tugas sebelumnya dengan benar, Anda seharusnya bisa mendapatkan hasil ini:
Bonus
Karena parameter minor terlalu banyak untuk sepenuhnya tercakup dalam jawaban ini, saya telah melampirkan gaya di sini : Anda dapat membuka kode ini dengan editor teks apa pun dan menyimpannya sebagai file QGIS Layer Style (yaitu dengan
.qml
ekstensi).Gaya di atas dibuat menggunakan QGIS 2.18.4 (harus memiliki nama yang sama dengan shapefile yang Anda gunakan).
sumber