Ich habe eine Linienebene und eine Polygonebene in QGIS:
Ich möchte den Teil der Linienebene außerhalb des Polygons mit einem Stil und den Teil innerhalb mit einem anderen Stil formatieren:
Ich möchte keinen abgeleiteten Datensatz erstellen, z. Clip die Linienebene und gestalte die beiden Teile.
Dies ist ein einfacher Fall, aber in meinem QGIS-Projekt habe ich +30 Ebenen, sodass ich denke, dass jede Ebenenüberblendung die zugrunde liegenden Ebenen stören würde.
Ist es möglich so etwas zu tun?
Ich möchte die Polygonebene nicht anzeigen, sondern nur, um zu visualisieren, was ich tun möchte.
Antworten:
Keine perfekte Lösung, aber Sie können den Geometrie-Generator verwenden, der eine visualisierte Linie zur Darstellung des Schnittpunkts hinzufügt. Sie können dies dann so einstellen, dass es die ursprüngliche Linienfunktion überlappt.
Fügen Sie eine neue Symbolebene hinzu, indem Sie auf das Pluszeichen klicken und den
Geometry generator
Typ als Symbolebene auswählen . Stellen Sie den Geoemtry-Typ auf einLineString / MultiLineString
und verwenden Sie den folgenden Ausdruck:Sie müssten Details zu Ihrem spezifischen Polygon hinzufügen, wobei:
polygonLayer
ist der Name Ihrer PolygonebenefieldName
ist der Name des Feldesvalue
ist der Merkmalswert Ihres spezifischen PolygonsBeachten Sie, dass Sie die visuelle Linie möglicherweise über die Eigenschaft " Effekte zeichnen" ausmalen müssen, um sie einzufärben :
Dies war das Ergebnis (beachten Sie, dass die visuelle Linie die ursprüngliche Linie nicht vollständig überlappte, sodass ich den Versatz geringfügig geändert habe):
Und ohne das Polygon:
Bearbeiten:
Wenn Sie möchten, dass dies für jedes Linien-Feature angewendet wird, das ein Polygon-Feature schneidet, rufen Sie den Funktionseditor auf und verwenden Sie die folgende Funktion (ändern Sie den Namen von
polygon example_2
, um ihn an den Namen Ihrer Polygon-Ebene anzupassen):Klicken Sie auf Laden, wechseln Sie zur Registerkarte Ausdruck und geben Sie ein
func()
. Hoffentlich sollte das Ergebnis wie folgt aussehen (unter Verwendung der oben genannten Stileigenschaften):quelle
get_feature
Feldname und Wert erfordert. Ich habe nur eine Polygonebene und möchte alle Funktionen auf dieser Ebene zum Ausblenden verwenden. Ist das möglich?Geometry Generator
die Methodefunc
für jedes Feature auf der Ebene aufgerufen, auf der es für das Styling verwendet wird? Wenn meine Linienebene drei Features hat, wird sie dannfunc
dreimal aufgerufen und dreimal das gleiche Ergebnis gezeichnet?func
jetzt nur für jedes Zeilen-Feature aufgerufen werden sollte und das Ergebnis nur einmal gezeichnet wird (was anscheinend der Fall ist, wie durch die Scheitelpunktmarkierungen in den Polygonen gezeigt, bevor dies verborgen war, unter dem ich es verpasst habe). Vielen Dank für den Hinweis :)Ausgehend von Josephs Antwort habe ich mir diese Funktion ausgedacht. Es berücksichtigt unterschiedliche Koordinatensysteme und ich musste in zwei Maskierungsebenen nachschlagen, daher behandelt es auch das. Außerdem wollte ich in der Lage sein, entweder die Linien innerhalb der Polygone oder die Linien außerhalb der Polygone zu maskieren.
Diese Übung hat mir gezeigt, dass QGIS nicht besonders gern mit großen Datenmengen arbeitet und dieser Algorithmus mit QGIS zu oft auf meinem Weg abstürzt. Ich vermute, dass der QGIS-Renderer keine zeitaufwändigen Geometriegeneratoren rendern möchte.
quelle