Не ідеальне рішення, але ви можете скористатися Генератором геометрії, який додає візуалізовану лінію для зображення перетину. Потім ви можете встановити це для перекриття оригінальної функції рядка.
Додайте новий шар символу, натиснувши знак плюс і виберіть Geometry generator
тип шару символу. Встановіть тип геоелектрики LineString / MultiLineString
та використовуйте такий вираз:
intersection($geometry, geometry(get_feature( 'polygonLayer','fieldName','value')))
Вам потрібно буде додати деталі щодо вашого конкретного багатокутника, де:
polygonLayer
- назва шару вашого багатокутника
fieldName
- це назва поля
value
- це значення функції вашого конкретного багатокутника
Зауважте, що для фарбування візуальної лінії вам може знадобитися це зробити із властивості Draw ефекти :
Це було результатом (зауважте, що візуальна лінія повністю не перекривала початкову лінію, тому я трохи змінив зміщення):
І без полігону:
Редагувати:
Якщо ви хочете, щоб це застосовувалося до кожної функції рядка, що перетинає функцію багатокутника, перейдіть до редактора функцій та скористайтеся наступною функцією (змініть ім'я polygon example_2
відповідно до імені шару багатокутника):
from qgis.core import *
from qgis.gui import *
@qgsfunction(args='auto', group='Custom')
def func(feature, parent):
polygon_layer = QgsMapLayerRegistry.instance().mapLayersByName( "polygon example_2" )[0]
feat_list = []
geoms = QgsGeometry.fromWkt('GEOMETRYCOLLECTION()')
for polygon_feat in polygon_layer.getFeatures():
if feature.geometry().intersects(polygon_feat.geometry()):
intersection = feature.geometry().intersection(polygon_feat.geometry())
feat_list.append(intersection)
for x in feat_list:
geoms = geoms.combine(x)
return geoms
Клацніть Завантажити, потім перейдіть на вкладку Вираз і введіть func()
. Сподіваємось, результат повинен виглядати наступним чином (використовуючи ті самі властивості стилю, які були згадані вище):