Pas une solution parfaite, mais vous pouvez utiliser le générateur de géométrie qui ajoute une ligne visualisée pour représenter l'intersection. Vous pouvez ensuite définir cela pour chevaucher l'entité linéaire d'origine.
Ajoutez une nouvelle couche de symboles en cliquant sur le signe plus et sélectionnez le Geometry generator
type de couche de symboles. Définissez le type geoemtry sur LineString / MultiLineString
et utilisez l'expression suivante:
intersection($geometry, geometry(get_feature( 'polygonLayer','fieldName','value')))
Vous devrez ajouter des détails sur votre polygone spécifique où:
polygonLayer
est le nom de votre couche polygonale
fieldName
est le nom du champ
value
est la valeur d'entité de votre polygone spécifique
Notez que pour colorer la ligne visuelle, vous devrez peut-être le faire à partir de la propriété d' effets Draw :
C'était le résultat (notez que la ligne visuelle ne chevauchait pas complètement la ligne d'origine, j'ai donc légèrement modifié le décalage):
Et sans le polygone:
Éditer:
Si vous souhaitez que cela soit appliqué à chaque entité linéaire intersectant une entité polygonale, accédez à l' éditeur de fonctions et utilisez la fonction suivante (changez le nom de polygon example_2
pour qu'il corresponde au nom de votre couche polygonale):
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
Cliquez sur Charger, puis accédez à l' onglet Expression et saisissez func()
. Espérons que le résultat devrait ressembler à ceci (en utilisant les mêmes propriétés de style mentionnées ci-dessus):