Wenn Sie nur Symbologie verwenden möchten, schlage ich eine Lösung vor, die von meiner Antwort auf eine ähnliche Frage inspiriert ist: Erstellen von Sektorlichtern in QGIS? .
Nach einem ähnlichen Ansatz und unter der Annahme, dass Sie an einem projizierten CRS arbeiten (wenn Sie stattdessen ein geografisches Koordinatensystem verwenden, lesen Sie den Hinweis am Ende der Antwort), möchte ich unterstreichen, dass ich die Aufmerksamkeit auf die Erklärung richten werde Dies bedeutet, dass einige andere kleinere Parameter (wie Größen, Breiten usw.) von Ihnen leicht angepasst werden sollten, um Ihren Anforderungen besser zu entsprechen.
Außerdem gehe ich davon aus, dass dies "AZIMUTH"
das Feld ist, in dem die Azimutwerte gespeichert sind, und "BEAMWIDTH"
das Feld, in dem die Antennenstrahlbreiten gespeichert sind.
Lösung
Wir werden die Punkte mit a Single symbol
und rendern, indem wir zu einer Simple Marker
und zwei Geometry generator
Symbolebenen zurückkehren:
In der weiteren Erklärung werde ich der gleichen Reihenfolge der Symbole im obigen Bild folgen.
1) Einfacher Marker
Ich habe ein Standardsymbol für einen roten Kreis gewählt (dies ist der einfachere Teil dieses Tutorials), mit einer Größe von 3 mm und einer Breite von 0,4 mm.
2) Geometriegenerator Nr. 1
Fügen Sie eine neue Symbolebene hinzu und wählen Sie die Geometry generator
und die LineString / MultiLineString
Typen aus:
Fügen Sie diesen Ausdruck in das Expression
Feld ein:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Wir haben gerade den Pfeil definiert, der auf die Azimutmenge zeigt (denken Sie zum Erstellen des Pfeils daran, den Arrow
Symbolebenentyp unter der Line
Option im Hauptsymbolmenü auszuwählen ). Bitte beachten Sie, dass dies 300
eine Entfernung in Metern darstellt und ein beliebiger Wert ist. Sie können ihn also nach Ihren Wünschen ändern.
3) Geometriegenerator Nr. 2
Fügen Sie eine neue Symbolebene hinzu und wählen Sie den Geometry generator
Typ und die Polygon / MultiPolygon
Typen aus:
Fügen Sie diesen Ausdruck in das Expression
Feld ein:
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
Wir haben gerade den Sektor definiert. Bitte beachten Sie, dass 200
und 2000
stellen Entfernungen in Metern dar und sie sind willkürliche Werte, da ich versuche, ein Polygon zu erstellen, das sich mit dem Kreis mit einem Radius von 200 m schneidet. Sie können sie also nach Ihren Wünschen ändern.
Endergebnis
Wenn Sie die vorherigen Aufgaben korrekt ausführen, sollten Sie in der Lage sein, Ergebnisse wie diese zu erhalten (die Beschriftungen werden neben dieser Lösung hinzugefügt und sollten nur den Kontext besser erklären):
Hinweis
Wenn Sie ein geografisches Koordinatensystem verwenden , dh wenn Sie sich mit Graden und nicht mit Entfernungen befassen, sollte es ausreichen, die richtigen Werte zu verwenden, wenn ich eine Entfernung in den vorherigen Formeln verwendet habe. Die Entfernungen, die ich verwendet habe, sind:
- 300 m (siehe Geometriegenerator Nr. 1);
- 200 m (siehe Geometriegenerator Nr. 2);
- 2000 m (siehe Geometriegenerator Nr. 2);
so dass Sie es mit anderen beliebigen Werten ersetzen können in Grad (zum Beispiel ausgedrückt 0.0002
, 0.002
und so weiter).
Bonus
Ich habe den Stil hier angehängt : Sie können diesen Code mit einem beliebigen Texteditor öffnen und als QGIS-Layer-Style-Datei (dh mit einer .qml
Erweiterung) speichern .
Der obige Stil wurde mit QGIS 2.18.4 erstellt (er muss denselben Namen wie das von Ihnen verwendete Shapefile haben).