Jika Anda hanya ingin menggunakan simbologi, saya mengusulkan solusi yang terinspirasi oleh jawaban saya dari pertanyaan serupa: Membuat lampu sektor di QGIS? .
Mengikuti pendekatan yang serupa, dan dengan asumsi Anda sedang mengerjakan Proyeksi CRS (sebagai gantinya, jika Anda menggunakan Sistem Koordinat Geografis, lihat catatan di akhir jawaban), saya ingin menggarisbawahi bahwa saya akan memusatkan perhatian pada penjelasan. dari 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 sesuai dengan kebutuhan Anda.
Lebih jauh, saya berasumsi bahwa "AZIMUTH"
bidang yang menyimpan nilai azimuth dan "BEAMWIDTH"
bidang yang menyimpan lebar berkas antena.
Larutan
Kami akan memberikan poin dengan a Single symbol
dan dengan berulang ke satu Simple Marker
dan dua Geometry 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 lingkaran merah (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
dan LineString / MultiLineString
jenisnya:
Masukkan ungkapan ini di Expression
bidang:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Kami baru saja mendefinisikan panah yang menunjuk ke arah set azimuth (untuk membuat panah, ingatlah untuk memilih Arrow
jenis lapisan simbol di bawah Line
opsi dari Menu simbol utama). Harap perhatikan bahwa 300
mewakili jarak dalam meter dan ini merupakan nilai arbitrer, jadi silakan mengubahnya sesuai dengan kebutuhan Anda.
3) Generator Geometri No. 2
Tambahkan layer simbol baru dan pilih Geometry generator
tipe dan Polygon / MultiPolygon
tipe:
Masukkan ungkapan ini di Expression
bidang:
CASE
WHEN ("BEAMWIDTH") <= 180
THEN
intersection(
buffer(
$geometry, 200),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "AZIMUTH" - "BEAMWIDTH"/2 )), $y + 2000*sin(radians((90 - "AZIMUTH" - "BEAMWIDTH"/2 )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" )), $y + 2000*sin(radians((90 - "AZIMUTH" )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" + "BEAMWIDTH" /2)), $y + 2000*sin(radians((90 - "AZIMUTH" + "BEAMWIDTH"/2)))),
$geometry)
)
)
)
)
WHEN ("BEAMWIDTH") > 180
THEN
difference(
buffer(
$geometry, 200),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "AZIMUTH" - "BEAMWIDTH"/2 )), $y + 2000*sin(radians((90 - "AZIMUTH" - "BEAMWIDTH"/2 )))),
make_point($x - 2000*cos(radians(90 - "AZIMUTH" )), $y - 2000*sin(radians((90 - "AZIMUTH" )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" + "BEAMWIDTH" /2)), $y + 2000*sin(radians((90 - "AZIMUTH" + "BEAMWIDTH"/2)))),
$geometry)
)
)
)
)
END
Kami baru saja mendefinisikan sektor ini. Harap perhatikan bahwa 200
dan 2000
wakili jarak dalam meter dan ini adalah nilai arbitrer karena saya mencoba membuat poligon untuk memotong lingkaran yang memiliki radius 200 m, jadi jangan ragu untuk mengubahnya sesuai dengan kebutuhan Anda.
Hasil akhir
Jika Anda melakukan tugas-tugas sebelumnya dengan benar, Anda harus bisa mendapatkan hasil seperti ini (label ditambahkan terpisah dari solusi ini dan mereka seharusnya hanya menjelaskan konteksnya dengan lebih baik):
Catatan
Jika Anda menggunakan Sistem Koordinat Geografis , yaitu jika Anda berurusan dengan derajat dan tidak dengan jarak, itu harus cukup menggunakan nilai yang tepat ketika saya menggunakan jarak dalam rumus sebelumnya. Jarak yang saya gunakan adalah:
- 300 m (lihat Generator Geometri No. 1);
- 200 m (lihat Generator Geometri No. 2);
- 2000 m (lihat Generator Geometri No. 2);
jadi Anda bisa menggantinya dengan nilai arbitrer lain yang dinyatakan dalam derajat (misalnya 0.0002
,, 0.002
dan sebagainya).
Bonus
Saya telah melampirkan style 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).