Używam QGIS 2.18. Muszę stworzyć światła sektorowe do celów nawigacyjnych na mapie.
Mam dane sektora lekkiego jako pola podające becon_id, stopień początkowy, stopień końcowy i kolor w pliku kształtu z ponad 500 boi, latarni i latarni morskich, które muszą być pokazane na mapie. Dla każdego sygnału nawigacyjnego może być wiele wierszy, każdy opisujący jeden sektor lekki (na przykład sektor biały)
Wynik końcowy powinien wyglądać mniej więcej tak: Sektory światła we właściwych kolorach, z kolorem oznaczonym jako znak w polu koloru (RGW) i przerywanymi liniami od 100 m do 1000 m od boi / latarni / latarni morskiej.
Najprawdopodobniej powinien zostać utworzony jako symbol oparty na regułach, ale chyba potrzebuję trochę pytona?
Poniżej znajduje się przykład danych kształtu pliku dla latarni morskiej (niestety nie powyższej), która ma zielony sektor między 114 a 154 stopni, biały sektor między 154 a 168 stopni, czerwony sektor między 168 a 237 stopni, zielony sektor między 237 a 314 stopni, biały sektor między 314 a 320 stopni, czerwony sektor między 320 a 337 stopni (z jakiegoś powodu 0 to nie północ, ale południe):
Odpowiedzi:
EDYCJA Edytowałem odpowiedź na zarządzanie konkretnymi sytuacjami (ze względu na określone wartości kątów) i za brak wyświetlania kropkowanych linii, gdy zdefiniowano kąt okrągły.
Proponuję rozwiązanie, powracając tylko do opartej na regułach symboliki i znakowania.
Przed rozpoczęciem chcę podkreślić, że skupię uwagę na wyjaśnieniu minimalnych czynności, które należy wykonać, aby odtworzyć pożądany rezultat: oznacza to, że niektóre inne drobne parametry (takie jak rozmiary, szerokości itp.) Powinny być łatwo dostosowane przez ciebie dla lepszego dopasowania do twoich potrzeb.
Co więcej, to rozwiązanie działa tylko wtedy , gdy założymy, że
0
stopień to Północ zamiast Południa (jeśli0
jest to Południe, wystarczyłoby sumowanie180
wartości za każdym razem, gdy pojawia się „90” w formułach, które dotyczą kątów, np.cos(radians(90))
Stałyby sięcos(radians(180 + 90))
). Wolałem to robić tylko po to, aby dać bardziej ogólne rozwiązanie.Stylizacja
Wyrenderujemy punkty za pomocą
Single symbol
i, powtarzając się do jednejSimple Marker
i trzechGeometry generator
warstw symboli:W dalszym objaśnieniu zastosuję tę samą kolejność symboli na powyższym obrazku.
1) Prosty znacznik
Wybrałem domyślny symbol czarnej gwiazdy (jest to łatwiejsza część tego samouczka), mający rozmiar 3 mm i szerokość 0,4 mm.
2) Generator geometrii nr 1
Dodaj nową warstwę symboli i wybierz
Geometry generator
typ:Wstaw to wyrażenie w
Expression
pole:Właśnie zdefiniowaliśmy pierwszą linię, która wskazuje punkt, od którego zaczyna się sektor światła. Ta linia ma 1000 m długości i jest tworzona tylko wtedy, gdy kąt otwarcia światła sektorowego nie jest kątem okrągłym (dzieje się tak, aby uniknąć pęknięcia całego okręgu).
3) Generator geometrii nr 2
To samo co powyżej, ale na tym etapie musisz użyć tego wyrażenia:
Właśnie zdefiniowaliśmy pierwszą linię, która wskazuje punkt, w którym kończy się sektor światła. Ta linia ma 1000 m długości i jest tworzona tylko wtedy, gdy kąt otwarcia światła sektorowego nie jest kątem okrągłym (dzieje się tak, aby uniknąć pęknięcia całego okręgu).
4) Generator geometrii nr 3
Wstaw to wyrażenie w
Expression
pole:Właśnie zdefiniowaliśmy łuk między punktami początkowym i końcowym sektora lekkiego (pamiętaj, że
2000
jest to dowolna wartość, ponieważ próbuję utworzyć wielokąt przecinający się z granicą okręgu o promieniu 900 m).Ponadto musimy ustawić kolor, który jest przechowywany w
"VARIS"
polu. W tym celu musimy podać niestandardowe wyrażenie. Postępuj zgodnie ze strzałką na obrazku poniżej:a następnie wpisz to wyrażenie po kliknięciu
Edit...
przycisku:Pamiętaj, że dla tej warstwy symboli utworzyłem dwie linie: górna linia określa kolor, który ma być używany (w rzeczywistości ustawiam dla niej niestandardowe wyrażenie), podczas gdy dolna jest przydatna do definiowania czarnej ramki (będzie miała szerokość, która jest większa niż górna linia). Pamiętaj również, aby ustawić
Flat
jakCap style
dla obu linii, aby uniknąć nakładania się kolorów.Etykietowanie
1) Ustawianie etykiet
Przejdź do
Layer Properties
>Labels
i, jak zwykle, postępuj zgodnie z czerwonymi strzałkami:a następnie wpisz to wyrażenie:
Właśnie zdefiniowaliśmy regułę koloru za pomocą wartości zapisanej w
"VARIS"
polu.2) Ustawienie położenia etykiet
Wybierz
Placement
opcję wLabels
menu i wybierzOffset from point
.Następnie w odniesieniu do poniższego obrazu:
postępuj zgodnie z czerwoną strzałką i wpisz to wyrażenie:
Następnie postępuj zgodnie z zieloną strzałką i wpisz to wyrażenie:
Ostateczny wynik
Jeśli poprawnie wykonałeś poprzednie zadania, powinieneś być w stanie uzyskać ten wynik:
Premia
Ponieważ drugorzędnych parametrów było zbyt wiele, aby można je było w całości ująć w tej odpowiedzi, załączyłem tutaj styl : możesz otworzyć ten kod w dowolnym edytorze tekstu i zapisać go jako plik stylu warstwy QGIS (tj. Z
.qml
rozszerzeniem).Powyższy styl został stworzony przy użyciu QGIS 2.18.4 (musi mieć tę samą nazwę, z której korzystasz).
źródło