Non è una soluzione perfetta, ma è possibile utilizzare il generatore di geometria che aggiunge una linea visualizzata per rappresentare l'intersezione. È quindi possibile impostare questo per sovrapporre la funzione di linea originale.
Aggiungi un nuovo livello simbolo facendo clic sul segno più e seleziona Geometry generator
come tipo di livello simbolo. Impostare il tipo di geoemtry su LineString / MultiLineString
e utilizzare la seguente espressione:
intersection($geometry, geometry(get_feature( 'polygonLayer','fieldName','value')))
Dovresti aggiungere dettagli sul tuo poligono specifico dove:
polygonLayer
è il nome del tuo livello poligonale
fieldName
è il nome del campo
value
è il valore della funzione del tuo poligono specifico
Si noti che per colorare la linea visiva, potrebbe essere necessario farlo dalla proprietà Effetti disegno :
Questo è stato il risultato (nota che la linea visiva non si sovrappone completamente alla linea originale, quindi ho modificato leggermente l'offset):
E senza il poligono:
Modificare:
Se vuoi che questo sia applicato per ogni feature di linea che interseca una feature poligonale, vai all'editor delle funzioni e usa la seguente funzione (cambia il nome polygon example_2
in modo che corrisponda al nome del tuo layer poligonale):
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
Fai clic su Carica quindi vai alla scheda Espressione e digita func()
. Speriamo che il risultato sia simile al seguente (usando le stesse proprietà di stile sopra menzionate):