Wenn sich Punkte überlappen, gibt es diese Eigenschaft, mit der das Los automatisch getrennt angezeigt werden kann. Dies wird als "Punktverschiebung" bezeichnet. Aber es funktioniert nicht für Linien, obwohl es mir konzeptionell durchaus machbar erscheint, um so etwas zu erreichen:
Ich muss unbedingt die verschiedenen Leitungen sehen, die sich in Wirklichkeit alle am selben Ort befinden (ich arbeite in der Telekommunikationsvernetzung). Der einzige Weg, den ich jetzt sehe, besteht darin, wirklich verschiedene Linien wie im obigen Bild zu erstellen und so räumliche Fehler zu erzeugen.
Ich verwende QGIS 2.14.
qgis
symbology
style
visualisation
qgis-custom-function
GuiOm Clair
quelle
quelle
Antworten:
Ich schlage einen Ansatz vor, der nur auf einen Geometriegenerator und eine benutzerdefinierte Funktion zurückgreift.
Bevor ich anfange, möchte ich unterstreichen, dass ich die Aufmerksamkeit auf die Erklärung der minimalen Dinge richten werde, die zur Wiedergabe des gewünschten Ergebnisses zu tun sind: Dies bedeutet, dass einige andere kleinere Parameter (wie Größen, Breiten usw.) von Ihnen leicht angepasst werden sollten für eine bessere Anpassung an Ihre Bedürfnisse.
Daher funktioniert diese Lösung sowohl für geografische als auch für projizierte Referenzsysteme: Im Folgenden habe ich angenommen, dass ein projiziertes CRS verwendet wird (dh Maßeinheiten sind Meter), aber Sie können sie entsprechend Ihrem CRS ändern.
Kontext
Nehmen wir an, wir beginnen mit dieser linearen Vektorebene, die die Drähte darstellt (die Beschriftungen geben die Anzahl der überlappenden (zusammenfallenden) Drähte an):
Lösung
Gehen Sie zuerst zu
Layer Properties | Style
und wählen Sie dann denSingle symbol
Renderer aus.Symbol selector
Wählen Sie im Dialogfeld einenGeometry generator
TypLinestring / MultiLinestring
als Symbolebene und einen Geometrietyp aus. Klicken Sie dann auf dieFunction Editor
Registerkarte:Klicken Sie dann auf
New file
und geben Siedraw_wires
den Namen der neuen Funktion ein:Sie werden sehen, dass eine neue Funktion erstellt wurde und diese auf der linken Seite des Dialogfelds aufgeführt ist. Klicken Sie nun auf den Namen der Funktion und ersetzen Sie die Standardeinstellung
@qgsfunction
durch den folgenden Code (vergessen Sie nicht, alle hier angehängten Bibliotheken hinzuzufügen):Wenn Sie dies getan haben, klicken Sie auf die
Load
Schaltfläche und Sie können die Funktion imCustom
Menü desExpression
Dialogfelds sehen.Geben Sie nun diesen Ausdruck ein (siehe Abbildung unten als Referenz):
Sie haben gerade eine Funktion ausgeführt, die auf imaginäre Weise sagt:
Das einzige, was Sie ändern müssen, ist der Wert der ersten beiden Parameter, wie Sie möchten, aber offensichtlich in angemessener Weise (lassen Sie die anderen Funktionsparameter wie angegeben).
Klicken Sie abschließend auf die
Apply
Schaltfläche, um die Änderungen zu übernehmen.Sie werden so etwas sehen:
wie erwartet.
BEARBEITEN
Auf eine spezielle Anfrage des OP in einem Kommentar hin:
Ich habe den Code leicht bearbeitet. Die folgende Funktion sollte das erwartete Ergebnis zurückgeben:
quelle
layer=iface.activeLayer()
und dannprint layer.wkbType()
. Klicken Sie aufRun
: Welchen Wert hat die gedruckte Nummer?