Ich benutze QGIS 2.18. Ich muss Sektorlichter für Navigationszwecke auf einer Karte erstellen.
Ich habe die Lichtsektordaten als Felder, die becon_id, Startgrad, Endgrad und Farbe in einem Shapefile mit über 500 Bojen, Baken und Leuchttürmen angeben, die auf der Karte angezeigt werden müssen. Für jedes Leuchtfeuer können mehrere Zeilen vorhanden sein, die jeweils einen Lichtsektor (z. B. einen weißen Sektor) beschreiben.
Das Endergebnis sollte ungefähr so aussehen: Die Lichtsektoren in den richtigen Farben, wobei die Farbe als Zeichen im Farbfeld (RGW) markiert ist, und gepunktete Linien in einem Abstand von 100 m bis 1000 m von der Boje / dem Leuchtfeuer / dem Leuchtturm.
Dies sollte höchstwahrscheinlich als regelbasiertes Symbol erstellt werden, aber ich vermute, Sie benötigen Python?
Im Folgenden finden Sie ein Beispiel für die Shapefile-Daten eines Leuchtturms (leider nicht der obigen), der einen grünen Sektor zwischen 114 und 154 Grad, einen weißen Sektor zwischen 154 und 168 Grad, einen roten Sektor zwischen 168 und 237 Grad und ein grünes aufweist Sektor zwischen 237 und 314 Grad, ein weißer Sektor zwischen 314 und 320 Grad, ein roter Sektor zwischen 320 und 337 Grad (aus irgendeinem Grund ist 0 nicht Nord, sondern Süd):
Antworten:
BEARBEITEN Ich habe die Antwort bearbeitet, um bestimmte Situationen (aufgrund bestimmter Winkelwerte) zu verwalten und um die gepunkteten Linien nicht anzuzeigen, wenn ein runder Winkel definiert ist.
Ich schlage eine Lösung vor, indem ich nur regelbasierte Symbologie und Beschriftung wiederhole.
Bevor ich anfange, möchte ich unterstreichen, dass ich mich auf die Erklärung der minimalen Dinge konzentrieren werde, die für die Reproduktion des gewünschten Ergebnisses zu tun sind: Dies bedeutet, dass einige andere kleinere Parameter (wie Größen, Breiten usw.) von Ihnen einfach angepasst werden sollten für eine bessere Anpassung an Ihre Bedürfnisse.
Darüber hinaus funktioniert diese Lösung nur, wenn Sie davon ausgehen, dass der
0
Grad Nord statt Süd ist (wenn dies0
Süd ist, würde es ausreichen180
, jedes Mal einen Wert zu summieren , der in Formeln, die sich mit Winkeln befassen, mit einer '90' angegeben wird, z . B.cos(radians(90))
wirdcos(radians(180 + 90))
). Ich habe es vorgezogen, dies nur zu tun, um eine allgemeinere Lösung zu finden.Styling
Wir werden die Punkte mit einem
Single symbol
und rendern, indem wir uns auf eineSimple Marker
und dreiGeometry generator
Symbolebenen wiederholen :In der weiteren Erläuterung folge ich der gleichen Reihenfolge der Symbole im obigen Bild.
1) Einfacher Marker
Ich habe ein Standardsymbol für einen schwarzen Stern (dies ist der einfachere Teil dieses Tutorials) mit einer Größe von 3 mm und einer Breite von 0,4 mm ausgewählt.
2) Geometriegenerator Nr. 1
Fügen Sie eine neue Symbolebene hinzu und wählen Sie den
Geometry generator
Typ:Fügen Sie diesen Ausdruck in das
Expression
Feld ein:Wir haben gerade die erste Linie definiert, die auf den Punkt zeigt, an dem der Lichtsektor beginnt. Diese Linie ist 1000 m lang und wird nur erstellt, wenn der Öffnungswinkel des Sektorlichts kein runder Winkel ist (dies geschieht, um zu vermeiden, dass die Linie einen ganzen Kreis durchbricht).
3) Geometriegenerator Nr. 2
Wie oben, aber in diesem Schritt müssen Sie diesen Ausdruck verwenden:
Wir haben gerade die erste Linie definiert, die auf den Punkt zeigt, an dem der Lichtsektor endet. Diese Linie ist 1000 m lang und wird nur erstellt, wenn der Öffnungswinkel des Sektorlichts kein runder Winkel ist (dies geschieht, um zu vermeiden, dass die Linie einen ganzen Kreis durchbricht).
4) Geometriegenerator Nr. 3
Fügen Sie diesen Ausdruck in das
Expression
Feld ein:Wir haben gerade den Bogen zwischen dem Start- und dem Endpunkt des Lichtsektors definiert (bitte beachten Sie, dass dies
2000
ein willkürlicher Wert ist, da ich versuche, ein Polygon zu erstellen , das die Grenze des Kreises mit einem Radius von 900 m schneidet).Außerdem müssen wir die Farbe einstellen, die im
"VARIS"
Feld gespeichert ist. Dazu müssen wir es mit einem benutzerdefinierten Ausdruck angeben. Folgen Sie dem Pfeil im Bild unten:und geben Sie diesen Ausdruck ein, nachdem Sie auf die
Edit...
Schaltfläche geklickt haben :Bitte beachten Sie, dass ich für diese Symbolebene zwei Linien erstellt habe: Die obere Linie definiert die zu verwendende Farbe (in der Tat habe ich den benutzerdefinierten Ausdruck für diese festgelegt), während die untere nützlich ist, um einen schwarzen Rand zu definieren (dies wird der Fall sein) eine Breite, die größer ist als die der oberen Zeile). Denken Sie auch daran,
Flat
wieCap style
für beide Linien festzulegen, um Farbüberlappungen zu vermeiden.Beschriftung
1) Etiketten setzen
Gehe zu
Layer Properties
>Labels
und folge wie gewohnt den roten Pfeilen:und geben Sie dann diesen Ausdruck ein:
Wir haben die Farbregel mit dem im
"VARIS"
Feld gespeicherten Wert definiert.2) Einstellen der Platzierung für Etiketten
Wählen Sie die
Placement
Option imLabels
Menü und wählen SieOffset from point
.Dann mit Bezug auf das Bild unten:
folge dem roten Pfeil und tippe diesen Ausdruck:
Folgen Sie dann dem grünen Pfeil und geben Sie diesen Ausdruck ein:
Endergebnis
Wenn Sie die vorherigen Aufgaben korrekt ausgeführt haben, sollten Sie in der Lage sein, das folgende Ergebnis zu erhalten:
Bonus
Da die untergeordneten Parameter zu viele waren, um in dieser Antwort vollständig behandelt zu werden, habe ich 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).
quelle