Se si desidera utilizzare solo la simbologia, propongo una soluzione ispirata alla mia risposta da una domanda simile: la creazione di luci di settore in QGIS? .
Seguendo un approccio simile e supponendo che tu stia lavorando su un CRS proiettato (invece, se stai usando un sistema di coordinate geografiche, vedi la nota alla fine della risposta), voglio sottolineare che focalizzerò l'attenzione sulla spiegazione delle cose minime da fare per riprodurre il risultato desiderato: questo significa che alcuni altri parametri minori (come dimensioni, larghezze e così via) dovrebbero essere facilmente regolati da te per adattarsi meglio alle tue esigenze.
Inoltre, suppongo che "AZIMUTH"
sia il campo che memorizza i valori di azimut ed "BEAMWIDTH"
è il campo che memorizza le larghezze del raggio dell'antenna.
Soluzione
Renderemo i punti con a Single symbol
e ricorrendo a uno Simple Marker
e due Geometry generator
livelli simbolo:
Nell'ulteriore spiegazione, seguirò lo stesso ordine dei simboli nell'immagine sopra.
1) Indicatore semplice
Ho scelto un simbolo predefinito di un cerchio rosso (questa è la parte più semplice di questo tutorial), con una dimensione di 3 mm e una larghezza di 0,4 mm.
2) Geometry Generator No. 1
Aggiungi un nuovo livello simbolo e seleziona Geometry generator
i LineString / MultiLineString
tipi e:
Inserisci questa espressione nel Expression
campo:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Abbiamo appena definito la freccia che punta verso il set di azimut (per creare la freccia, ricordati di selezionare il Arrow
tipo di livello del simbolo sotto l' Line
opzione dal menu principale del simbolo). Tieni presente che 300
rappresenta una distanza in metri ed è un valore arbitrario, quindi sentiti libero di cambiarlo in base alle tue esigenze.
3) Geometry Generator No. 2
Aggiungi un nuovo livello simbolo e seleziona il Geometry generator
tipo e i Polygon / MultiPolygon
tipi:
Inserisci questa espressione nel Expression
campo:
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
Abbiamo appena definito il settore. Si prega di notare che 200
e 2000
rappresentano distanze in metri e sono valori arbitrari perché sto cercando di creare un poligono ad intersecare con il cerchio avente un raggio di 200 m, quindi sentitevi liberi di modificarli in base alle proprie esigenze.
Risultato finale
Se esegui correttamente le attività precedenti, dovresti essere in grado di ottenere risultati come questi (le etichette vengono aggiunte separatamente da questa soluzione e dovrebbero solo spiegare meglio il contesto):
Nota
Se stai usando un sistema di coordinate geografiche , cioè se hai a che fare con gradi e non con distanze, dovrebbe essere sufficiente usare i valori corretti quando ho usato una distanza nelle formule precedenti. Le distanze che ho usato sono:
- 300 m (vedi Geometry Generator No. 1);
- 200 m (vedi Geometry Generator No. 2);
- 2000 m (vedi Geometry Generator No. 2);
quindi è possibile sostituirlo con altri valori arbitrari espressi in gradi (ad esempio 0.0002
, 0.002
e così via).
indennità
Ho allegato lo stile qui : puoi aprire questo codice con qualsiasi editor di testo e salvarlo come file QGIS Layer Style (cioè con .qml
un'estensione).
Lo stile sopra è stato creato usando QGIS 2.18.4 (deve avere lo stesso nome dello shapefile che stai usando).