Sadece semboloji kullanmak istiyorsanız, benzer bir soruya verdiğim yanıttan ilham alan bir çözüm öneriyorum: QGIS'de sektör ışıkları yaratmak? .
Benzer bir yaklaşımı izleyerek ve bir Öngörülen CRS üzerinde çalıştığınızı varsayarsak (bunun yerine bir Coğrafi Koordinat Sistemi kullanıyorsanız, cevabın sonundaki nota bakın), dikkati açıklamaya odaklayacağımı vurgulamak istiyorum. istenen sonucu yeniden üretmek için yapılacak en az şey: Bu, diğer küçük parametrelerin (boyutlar, genişlikler vb.) ihtiyaçlarınızı daha iyi karşılamak için sizin tarafınızdan kolayca ayarlanması gerektiği anlamına gelir.
Ayrıca, "AZIMUTH"
bunun azimut değerlerini "BEAMWIDTH"
depolayan alan ve anten ışını genişliklerini depolayan alan olduğunu varsayıyorum .
Çözüm
Noktaları Single symbol
bir Simple Marker
ve iki Geometry generator
sembol katmanına yineleyerek ve ile işaretleyeceğiz:
Daha fazla açıklamada, yukarıdaki görüntüdeki sembollerin aynı sırasını takip edeceğim.
1) Basit İşaretleyici
3 mm büyüklüğünde ve 0.4 mm genişliğinde kırmızı bir dairenin varsayılan bir sembolünü seçtim (bu öğreticinin daha kolay kısmıdır).
2) Geometri Jeneratörü No. 1
Yeni bir sembol katmanı ekleyin Geometry generator
ve ve LineString / MultiLineString
türlerini seçin :
Bu ifadeyi Expression
alana ekleyin :
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Azimut kümesine işaret eden oku tanımladık (oku oluşturmak için, Menü ana sembolünden seçeneğin Arrow
altındaki sembol katmanı türünü seçmeyi unutmayın Line
). Lütfen 300
metre cinsinden bir mesafeyi temsil ettiğini ve keyfi bir değer olduğunu unutmayın, bu yüzden ihtiyaçlarınıza göre değiştirmekten çekinmeyin.
3) Geometri Jeneratörü No. 2
Yeni bir sembol katmanı ekleyin ve Geometry generator
türü ve Polygon / MultiPolygon
türleri seçin:
Bu ifadeyi Expression
alana ekleyin :
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
Sektörü yeni tanımladık. Lütfen unutmayın 200
ve 2000
mesafeleri metre cinsinden temsil ederler ve bunlar keyfi değerlerdir, çünkü 200 m yarıçapa sahip daireyle kesişmek için bir çokgen oluşturmaya çalışıyorum, bu yüzden bunları ihtiyaçlarınıza göre değiştirmekten çekinmeyin.
Son sonuç
Önceki görevleri doğru bir şekilde gerçekleştirirseniz, bunun gibi sonuçlar elde edebilmeniz gerekir (etiketler bu çözümün dışında eklenir ve yalnızca bağlamı daha iyi açıklamalıdır):
Not
Eğer bir kullanıyorsanız Coğrafi Koordinat Sistemi Eğer derecelerde değil mesafeler ile ilgileniyor eğer, yani ben önceki formüllerde mesafe kullanıldığında uygun değerler kullanılarak yeterli olmalı. Kullandığım mesafeler:
- 300 m (bkz. Geometri Üreteci No. 1);
- 200 m (bkz. Geometri Jeneratörü No. 2);
- 2000 m (bkz. Geometri Üreteci No. 2);
derecelerle ifade edilen diğer rasgele değerlerle değiştirebilir, böylece (örneğin, 0.0002
, 0.002
ve benzeri).
Bonus
Buraya tarzı ekledim : bu kodu herhangi bir metin düzenleyicisiyle açıp QGIS Katman Stili dosyası (yani bir .qml
uzantı ile) olarak kaydedebilirsiniz .
Yukarıdaki stil QGIS 2.18.4 kullanılarak oluşturulmuştur (kullandığınız şekil dosyasının adı olmalıdır).