Якщо ви хочете використовувати лише символіку, я пропоную рішення, натхнене моєю відповіддю з подібного питання: Створення галузевих ліхтарів у QGIS? .
Дотримуючись аналогічного підходу та припускаючи, що ви працюєте над проектованою системою обліку даних (замість цього, якщо ви використовуєте географічну систему координат, див. Примітку в кінці відповіді), я хочу підкреслити, що я сфокусую увагу на поясненні мінімальних речей для відтворення бажаного результату: це означає, що деякі інші незначні параметри (наприклад, розміри, ширина тощо) повинні бути легко відрегульовані вами для кращого задоволення ваших потреб.
Крім того, я припускаю, що "AZIMUTH"це поле, яке зберігає значення азимута, і "BEAMWIDTH"це поле, яке зберігає ширину променя антени.
Рішення
Ми будемо відображати точки з a Single symbolі, повторюючи один Simple Markerі два Geometry generatorшари символів:

У подальшому поясненні я дотримуватимусь того ж порядку символів на зображенні вище.
1) Простий маркер
Я вибрав символ за замовчуванням червоного кола (це простіша частина цього підручника), має розмір 3 мм та ширину 0,4 мм.
2) Генератор геометрії №1
Додамо новий шар символів і виберіть Geometry generatorі ті LineString / MultiLineStringтипи:

Вставте цей вираз у Expressionполе:
make_line(
$geometry,
make_point($x + 300*cos(radians(90 - "AZIMUTH" )), $y + 300*sin(radians((90 - "AZIMUTH" ))))
)
Ми щойно визначили стрілку, яка вказує на набір азимутів (для створення стрілки пам’ятайте, що виберіть Arrowтип шару символу під Lineопцією з меню головного символу). Зверніть увагу, що 300це відстань у метрах і це довільне значення, тому сміливо міняйте її відповідно до своїх потреб.
3) Генератор геометрії №2
Додайте новий шар символів та виберіть Geometry generatorтип та Polygon / MultiPolygonтипи:

Вставте цей вираз у Expressionполе:
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
Ми щойно визначили сектор. Зверніть увагу, що 200і 2000представляють відстані в метрах, і вони є довільними значеннями, тому що я намагаюся створити багатокутник, що перетинається з колом, що має радіус 200 м, тому сміливо міняйте їх відповідно до ваших потреб.
Кінцевий результат
Якщо ви правильно виконаєте попередні завдання, ви маєте змогу отримати такі результати (мітки додаються крім цього рішення, і вони повинні лише краще пояснити контекст):

Примітка
Якщо ви використовуєте Географічну систему координат , тобто якщо ви маєте справу з градусами, а не з відстанями, її буде достатньо, використовуючи відповідні значення, коли я використовував відстань у попередніх формулах. Я використовував відстані:
- 300 м (див. Генератор геометрії № 1);
- 200 м (див. Генератор геометрії №2);
- 2000 м (див. Генератор геометрії № 2);
так що ви можете замінити його з іншими довільними значеннями , вираженими в градусах (наприклад, 0.0002, 0.002і так далі).
Бонус
Я додав тут стиль : ви можете відкрити цей код у будь-якому текстовому редакторі та зберегти його як файл стилю рівня QGIS (тобто з .qmlрозширенням).
Вищевказаний стиль був створений за допомогою QGIS 2.18.4 (він повинен мати те саме ім'я форми форми, який ви використовуєте).