Tôi đã vật lộn một chút với cái Geometry generator
tên @GSienko. Đối với phần giao nhau, bạn cũng có thể sử dụng chức năng tích hợp aggregate
. Ngoài ra tôi đã sử dụng segment_to_lines
chức năng chuyển đổi đa giác thành dòng.
difference(
segments_to_lines($geometry),
aggregate(
layer:= 'line',
aggregate:='collect',
expression:= $geometry,
filter:=intersects($geometry, geometry(@parent))
)
)
hoặc là
difference(
segments_to_lines($geometry),
aggregate('line','collect',$geometry,intersects($geometry, geometry(@parent)))
)
Nếu bạn có một số đa giác "không liên quan" đến các dòng, bạn có thể thêm if
điều kiện cho giao lộ. Nếu các lớp nằm trong giao điểm, thì sự khác biệt được áp dụng cho hệ thống ký hiệu, nếu không thì toàn bộ hình học được áp dụng.
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)
)
chỉnh sửa : Sử dụng trình tạo dòng theo cách này có một điểm yếu - bạn phải xử lý biểu tượng chú giải, bởi vì nó hiển thị dòng thông qua đa giác (không phải là một đường viền). Tuy nhiên, bạn vẫn có thể nhân đôi layer, đặt fill đơn giản và sử dụng nó cho huyền thoại.