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 symboli, powtarzając się do jednej Simple Markeri dwóch Geometry generatorwarstw 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 generatororaz LineString / MultiLineStringtypy:

Wstaw to wyrażenie w Expressionpole:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Właśnie zdefiniowaliśmy strzałkę wskazującą na zestaw azymutu (przy tworzeniu strzałki pamiętaj, aby wybrać Arrowtyp warstwy symbolu pod Lineopcją z głównego menu symboli). Pamiętaj, że 300reprezentuje 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 generatortyp oraz Polygon / MultiPolygontypy:

Wstaw to wyrażenie w Expressionpole:
CASE
WHEN ("BEAMWIDTH") <= 180
THEN
intersection(
buffer(
$geometry, 200),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "AZIMUTH" - "BEAMWIDTH"/2 )), $y + 2000*sin(radians((90 - "AZIMUTH" - "BEAMWIDTH"/2 )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" )), $y + 2000*sin(radians((90 - "AZIMUTH" )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" + "BEAMWIDTH" /2)), $y + 2000*sin(radians((90 - "AZIMUTH" + "BEAMWIDTH"/2)))),
$geometry)
)
)
)
)
WHEN ("BEAMWIDTH") > 180
THEN
difference(
buffer(
$geometry, 200),
make_polygon(
geom_from_wkt(
geom_to_wkt(
make_line(
$geometry,
make_point($x + 2000*cos(radians(90 - "AZIMUTH" - "BEAMWIDTH"/2 )), $y + 2000*sin(radians((90 - "AZIMUTH" - "BEAMWIDTH"/2 )))),
make_point($x - 2000*cos(radians(90 - "AZIMUTH" )), $y - 2000*sin(radians((90 - "AZIMUTH" )))),
make_point($x + 2000*cos(radians(90 - "AZIMUTH" + "BEAMWIDTH" /2)), $y + 2000*sin(radians((90 - "AZIMUTH" + "BEAMWIDTH"/2)))),
$geometry)
)
)
)
)
END
Właśnie zdefiniowaliśmy sektor. Należy pamiętać, że 200i 2000reprezentują 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:
- 300 m (patrz generator geometrii nr 1);
- 200 m (patrz generator geometrii nr 2);
- 2000 m (patrz Geometry Generator nr 2);
więc można zastąpić go innym arbitralnych wartości wyrażone w stopniach (na przykład 0.0002, 0.002i 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 .qmlrozszerzeniem).
Powyższy styl został utworzony za pomocą QGIS 2.18.4 (musi mieć tę samą nazwę, z której korzystasz).