Не идеальное решение, но вы можете использовать Генератор геометрии, который добавляет визуализированную линию для представления пересечения. Затем вы можете установить это, чтобы перекрывать исходный линейный объект.
Добавьте новый слой символов, щелкнув знак плюс, и выберите Geometry generator
тип слоя символов. Задайте для типа geoemtry значение LineString / MultiLineString
и используйте следующее выражение:
intersection($geometry, geometry(get_feature( 'polygonLayer','fieldName','value')))
Вам нужно будет добавить информацию о вашем конкретном полигоне, где:
polygonLayer
имя вашего полигонального слоя
fieldName
это имя поля
value
значение функции вашего конкретного многоугольника
Обратите внимание, что для окрашивания визуальной линии вам может потребоваться сделать это из свойства « Рисовать эффекты» :
Это был результат (обратите внимание, что визуальная линия не полностью перекрывала исходную линию, поэтому я слегка изменил смещение):
И без многоугольника
Редактировать:
Если вы хотите, чтобы это применялось к каждому линейному объекту, пересекающему полигональный объект, перейдите в Редактор функций и используйте следующую функцию (измените имя, 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()
. Надеемся, что результат должен выглядеть следующим образом (используя те же свойства стиля, которые указаны выше):