Geometry generator
Luché un poco con el como @GSienko. Para la parte de intersección también puede usar la función incorporada aggregate
. También utilicé la segment_to_lines
función que convierte polígonos en líneas.
difference(
segments_to_lines($geometry),
aggregate(
layer:= 'line',
aggregate:='collect',
expression:= $geometry,
filter:=intersects($geometry, geometry(@parent))
)
)
o
difference(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
)
Si tiene algún polígono "no relacionado" con las líneas, puede agregar una if
condición para la intersección. Si las capas están en intersección, entonces se aplica la diferencia para la simbología, de lo contrario se aplica la geometría completa.
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)
)
editar : El uso del generador de líneas de esta manera tiene un punto débil: debe manejar el símbolo de la leyenda, porque representa la línea a través del polígono (no como un borde). Sin embargo, aún puede duplicar la capa, establecer un relleno simple y usarlo como leyenda.