Ich hatte ein bisschen Geometry generator
Probleme mit dem als @GSienko. Für Kreuzungsteile können Sie auch die integrierte Funktion verwenden aggregate
. Außerdem habe ich eine segment_to_lines
Funktion verwendet, die Polygone in Linien konvertiert.
difference(
segments_to_lines($geometry),
aggregate(
layer:= 'line',
aggregate:='collect',
expression:= $geometry,
filter:=intersects($geometry, geometry(@parent))
)
)
oder
difference(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
)
Wenn Sie ein Polygon haben, das nicht mit Linien zusammenhängt, können Sie eine if
Bedingung für den Schnittpunkt hinzufügen . Wenn sich Ebenen im Schnittpunkt befinden, wird die Differenz für die Symbologie angewendet, andernfalls wird die gesamte Geometrie angewendet.
if(
intersects(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
),
difference(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
),
segments_to_lines($geometry)
)
Bearbeiten : Die Verwendung des Liniengenerators auf diese Weise hat eine Schwachstelle - Sie müssen das Legenden-Symbol behandeln, da es die Linie durch das Polygon rendert (nicht als Rand). Sie können die Ebene jedoch weiterhin duplizieren, eine einfache Füllung festlegen und sie als Legende verwenden.