Chcę pokazać sieć komórkową na mapie. Dane wejściowe to plik .csv, w którym każdy ciąg jest sektorem komórkowym. Atrybuty to: identyfikator sektora, jego współrzędne, azymut i kąt szerokości wiązki anteny.
Wartości szerokości wiązki anteny mieszczą się w zakresie od 30 do 360 stopni. Szerokość wiązki anteny 360 oznacza, że musi być pokazana na mapie jako okrąg. Anteny o innych szerokościach wiązki muszą być pokazane jako sektory o odpowiednich kątach apertury.
Czy można pokazać anteny tylko za pomocą symboli? Wiem, jak stworzyć własny symbol SVG i mam nadzieję, że uda mi się go obrócić zgodnie z azymutem. Ale czy jest jakiś sposób na zastosowanie zmiennej szerokości wiązki anteny zgodnie z jej wartością atrybutu od 30 do 360 stopni?
Myślę, że symbole są najlepszym sposobem na narysowanie anten ze względu na dynamiczną wizualizację na mapie zgodnie ze skalą widoku, jeśli jest to możliwe w QGIS.
Oczywiście zadanie można rozwiązać, rysując odpowiednie wielokąty jako element warstwy, ale byłoby to rozwiązanie obejścia.
źródło
Odpowiedzi:
Kilka dni temu dodano nową wtyczkę do QGIS o nazwie Algorytm przetwarzania bufora klinowego . Wygląda na to, że może być interesujące.
Jak sama nazwa wskazuje, jest to algorytm przetwarzania, więc musisz go uruchomić z przybornika przetwarzania. Nie miałem jeszcze okazji tego spróbować.
Tworzy sektory kół - jak normalny bufor kołowy, ale kąt i promień klina można ustawić za pomocą wartości pola.
Dokumentację i zrzuty ekranu można zobaczyć na stronie github
źródło
Jeśli chcesz używać tylko symboliki, proponuję rozwiązanie inspirowane moją odpowiedzią z podobnego pytania: Tworzenie świateł sektorowych w QGIS? .
Zgodnie z podobnym podejściem i zakładając, że pracujesz nad Projekowanym CRS (zamiast tego, jeśli używasz Geograficznego Układu Współrzędnych, zobacz notatkę na końcu odpowiedzi), chcę podkreślić, że skupię uwagę na wyjaśnieniu minimalnych czynności, które należy wykonać, aby odtworzyć pożądany wynik: oznacza to, że niektóre inne drobne parametry (takie jak rozmiary, szerokości itp.) powinny być łatwo regulowane przez użytkownika w celu lepszego dopasowania do potrzeb.
Ponadto zakładam, że
"AZIMUTH"
jest to pole przechowujące wartości azymutu i"BEAMWIDTH"
pole przechowujące szerokości wiązki anteny.Rozwiązanie
Wyrenderujemy punkty za pomocą
Single symbol
i, powtarzając się do jednejSimple Marker
i dwóchGeometry generator
warstw symboli:W dalszym objaśnieniu zastosuję tę samą kolejność symboli na powyższym obrazku.
1) Prosty znacznik
Wybrałem domyślny symbol czerwonego koła (jest to łatwiejsza część tego samouczka) o rozmiarze 3 mm i szerokości 0,4 mm.
2) Generator geometrii nr 1
Dodaj nową warstwę symboli i wybierz
Geometry generator
orazLineString / MultiLineString
typy:Wstaw to wyrażenie w
Expression
pole:Właśnie zdefiniowaliśmy strzałkę wskazującą na zestaw azymutu (przy tworzeniu strzałki pamiętaj, aby wybrać
Arrow
typ warstwy symbolu podLine
opcją z głównego menu symboli). Pamiętaj, że300
reprezentuje odległość w metrach i jest to dowolna wartość, więc możesz ją zmienić w zależności od potrzeb.3) Generator geometrii nr 2
Dodaj nową warstwę symboli i wybierz
Geometry generator
typ orazPolygon / MultiPolygon
typy:Wstaw to wyrażenie w
Expression
pole:Właśnie zdefiniowaliśmy sektor. Należy pamiętać, że
200
i2000
reprezentują odległości w metrach i są arbitralne wartości, ponieważ staram się stworzyć wielokąt do przecięcia z okręgu o promieniu 200 m, więc nie krępuj się je zmieniać w zależności od potrzeb.Ostateczny wynik
Jeśli poprawnie wykonasz poprzednie zadania, powinieneś być w stanie uzyskać wyniki takie jak te (etykiety są dodawane oprócz tego rozwiązania i powinny one tylko lepiej wyjaśniać kontekst):
Uwaga
Jeśli używasz Geograficznego Układu Współrzędnych , tj. Jeśli masz do czynienia ze stopniami, a nie odległościami, powinno wystarczyć użycie odpowiednich wartości, gdy użyłem odległości w poprzednich formułach. Odległości, które zastosowałem to:
więc można zastąpić go innym arbitralnych wartości wyrażone w stopniach (na przykład
0.0002
,0.002
i tak dalej).Premia
Tutaj załączyłem 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ł utworzony za pomocą QGIS 2.18.4 (musi mieć tę samą nazwę, z której korzystasz).
źródło
Wielkie uznanie dla mgri.
W naszej warstwie testowej wszystko działało sprawnie. W warstwie produkcyjnej po dwóch / trzech godzinach udało mi się wyśledzić problem z geometrią $ . Eksportowałem warstwę punktową z platformy, nie zauważyłem, ale był to MultiPoint . Wydawało się to powodować problemy: strzała nie została narysowana; i o dziwo tylko obliczone punkty zrobiły wielokąt kół.
Kolejną rzeczą jest to, że używam zmiennego promienia . (nie jestem pewien, czy w tym przypadku jest to właściwe słowo, można również nazwać go „długością wiązki” lub cokolwiek innego).
Oto, czego używam teraz, z warstwą typu geometrii MultiPoints (podczas gdy w rzeczywistości wszystkie funkcje są jednym punktem), i działa dla mnie w QGis 2.18.3
Wyrażenie strzałki Brak strzałki, jeśli 360 °.
Wyrażenie wielokąta
źródło
Zostałem obdarzony częściowym rozwiązaniem w sieci bez żadnych dodatkowych wtyczek, tylko qgis po wyjęciu z pudełka. Nie pokazuje szerokości wiązki anteny, wystarczy obrócić prosty znacznik we właściwym kierunku: użyj prostego znacznika i obróć go z azymutem anteny + 180 stopni (Właściwości warstwy> Pojedynczy simbol-> Znacznik-> Prosty znacznik-> trójkąt-> obrót-> edycja -> wpisz <180 + „azymut anteny”> w polu wyrażenia. Ustaw także Góra w polu Punkt zakotwiczenia znacznika). Konieczne jest użycie <180 + „azymutu anteny”> ze względu na niewłaściwy kierunek osadzonego prostego znacznika trójkąta. W przeciwnym razie pokaże niewłaściwy kierunek anteny.
źródło