Nie jest to idealne rozwiązanie, ale możesz skorzystać z Generatora Geometrii, który dodaje wizualizowaną linię do reprezentacji skrzyżowania. Następnie można ustawić tę opcję, aby nakładała się na pierwotny element linii.
Dodaj nową warstwę symbolu, klikając znak plus i wybierz Geometry generator
typ warstwy symbolu jako. Ustaw typ geoemtry LineString / MultiLineString
i użyj następującego wyrażenia:
intersection($geometry, geometry(get_feature( 'polygonLayer','fieldName','value')))
Musisz dodać szczegółowe informacje na temat określonego wielokąta, w którym:
polygonLayer
to nazwa twojej warstwy wielokątów
fieldName
to nazwa pola
value
jest wartością funkcji określonego wielokąta
Pamiętaj, że aby pokolorować linię wizualną, może być konieczne wykonanie tej czynności we właściwościach Efekty rysowania :
To był wynik (zauważ, że linia wizualna nie pokrywała się całkowicie z linią oryginalną, więc nieznacznie zmodyfikowałem przesunięcie):
I bez wielokąta:
Edytować:
Jeśli chcesz to zastosować dla każdego elementu linii przecinającego element wielokąta, przejdź do Edytora funkcji i użyj następującej funkcji (zmień nazwę, polygon example_2
aby pasowała do nazwy warstwy wielokąta):
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
Kliknij Załaduj, a następnie przejdź do karty Wyrażenie i wpisz func()
. Mam nadzieję, że wynik powinien wyglądać następująco (przy użyciu tych samych właściwości stylu wspomnianych powyżej):