Mam warstwę liniową i warstwę wielokąta w QGIS:
Chciałbym stylizować część warstwy linii poza wielokątem za pomocą jednego stylu, a część wewnątrz za pomocą innego stylu:
Nie chcę tworzyć pochodnego zestawu danych, np. przytnij warstwę i stylizuj dwie części.
Jest to prosty przypadek, ale w moim projekcie QGIS mam +30 warstw, więc myślę, że jakiekolwiek mieszanie warstw zakłóciłoby warstwy leżące poniżej.
Czy można zrobić coś takiego?
Nie chcę pokazywać warstwy wielokąta, tutaj jest tylko wizualizacja tego, co chciałbym zrobić.
Odpowiedzi:
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 geoemtryLineString / MultiLineString
i użyj następującego wyrażenia:Musisz dodać szczegółowe informacje na temat określonego wielokąta, w którym:
polygonLayer
to nazwa twojej warstwy wielokątówfieldName
to nazwa polavalue
jest wartością funkcji określonego wielokątaPamię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):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):źródło
get_feature
wymaga to nazwy i wartości pola. Mam tylko warstwę wielokąta i chciałbym użyć wszystkich funkcji na tej warstwie, aby się maskować. Czy to jest możliwe?Geometry Generator
jest metodafunc
dla każdej funkcji na warstwie, w której jest używana do stylizacji? Więc jeśli moja warstwa linii ma 3 funkcje,func
to nazywa się 3 razy i rysuje ten sam wynik 3 razy?func
aby teraz mógł być wywoływany tylko dla każdego elementu linii i narysuje wynik tylko raz (co wydaje się, że tak jest, jak pokazują znaczniki wierzchołków wewnątrz wielokątów, zanim ukryto je pod tym, co przegapiłem). Dzięki za zwrócenie na to uwagi :)Rozszerzając odpowiedź Josepha , wymyśliłem tę funkcję. Uwzględnia różne układy współrzędnych i musiałem wyszukać dwie warstwy maskujące, więc to też obsługuje. Co więcej, chciałem móc maskować linie wewnątrz wielokątów lub linie na zewnątrz wielokątów.
To ćwiczenie pokazało mi, że QGIS nie przepada za pracą z dużymi zestawami danych, a ten algorytm z QGIS zbyt często ulega awarii. Podejrzewam, że moduł renderujący QGIS nie lubi renderować generatorów geometrii, które są czasochłonne.
źródło