Я хочу показать сотовую сеть на карте. Входные данные - это файл .csv, где каждая строка представляет собой сотовый сектор. Атрибутами являются: идентификатор сектора, его координаты, его азимут и угол ширины луча антенны.
Значения ширины луча антенны находятся в диапазоне от 30 до 360 градусов. Ширина луча антенны 360 означает, что он должен быть показан на карте в виде круга. Антенны с другой шириной луча должны быть показаны в виде секторов с соответствующими углами апертуры.
Можно ли показывать антенны, используя только символы? Я знаю, как создать свой собственный символ SVG, и надеюсь найти способ его поворота в соответствии с азимутом. Но есть ли способ применить переменную ширину луча антенны в соответствии со значением атрибута от 30 до 360 градусов?
Я думаю, что символы - лучший способ нарисовать антенны из-за динамической визуализации на карте в соответствии с масштабом обзора, если это возможно в QGIS.
Конечно, эту задачу можно решить, нарисовав соответствующие полигоны в качестве элемента слоя, но это было бы обходным решением.
источник
Ответы:
Несколько дней назад в QGIS был добавлен новый плагин под названием Wedge Buffer Processing Algorithm . Это выглядит так, как будто это может представлять интерес.
Как следует из названия, это алгоритм обработки, поэтому вам нужно будет запустить его из набора инструментов обработки. Пока не было возможности попробовать это.
Он создает секторы окружностей - как обычный круговой буфер, но угол клина и радиус могут быть установлены с использованием значений поля.
Документацию и скриншоты можно увидеть на странице GitHub
источник
Если вы хотите использовать только символы, я предлагаю решение, основанное на ответе на аналогичный вопрос: Создание секторных источников света в QGIS? ,
Следуя аналогичному подходу и предполагая, что вы работаете с Projected CRS (вместо этого, если вы используете географическую систему координат, см. Примечание в конце ответа), я хочу подчеркнуть, что я сосредоточу внимание на объяснении. из минимальных действий, которые необходимо выполнить для воспроизведения желаемого результата: это означает, что некоторые другие второстепенные параметры (такие как размеры, ширина и т. д.) должны быть легко настроены вами для лучшего соответствия вашим потребностям.
Кроме того, я предполагаю, что
"AZIMUTH"
это поле, в котором хранятся значения азимута, и"BEAMWIDTH"
поле, в котором хранятся ширины луча антенны.Решение
Мы будем отображать точки с помощью a
Single symbol
и возвращаясь к одномуSimple Marker
и двумGeometry generator
слоям символов:В дальнейшем объяснении я буду следовать тому же порядку символов на изображении выше.
1) Простой маркер
Я выбрал по умолчанию символ красного круга (это самая простая часть этого урока), размер которого составляет 3 мм, а ширина - 0,4 мм.
2) Генератор геометрии № 1
Добавьте новый слой символов и выберите
Geometry generator
и теLineString / MultiLineString
тип:Вставьте это выражение в
Expression
поле:Мы только что определили стрелку, которая указывает на набор азимута (для создания стрелки не забудьте выбрать
Arrow
тип слоя символов подLine
опцией в главном меню символов). Обратите внимание, что300
это расстояние в метрах и это произвольное значение, поэтому не стесняйтесь изменять его в соответствии с вашими потребностями.3) Генератор геометрии № 2
Добавьте новый слой символов и выберите
Geometry generator
тип иPolygon / MultiPolygon
типы:Вставьте это выражение в
Expression
поле:Мы только что определили сектор. Обратите внимание, что
200
и2000
представляют расстояния в метрах, и они являются произвольными значениями, потому что я пытаюсь создать многоугольник, который будет пересекаться с окружностью радиусом 200 м, поэтому смело меняйте их в соответствии с вашими потребностями.Конечный результат
Если вы правильно выполняете предыдущие задачи, вы сможете получить результаты, подобные этим (метки добавляются отдельно от этого решения, и они должны только лучше объяснять контекст):
Запись
Если вы используете географическую систему координат , то есть если вы имеете дело с градусами, а не с расстояниями, этого должно быть достаточно, используя правильные значения, когда я использовал расстояние в предыдущих формулах. Расстояния, которые я использовал:
поэтому вы можете заменить его другими произвольными значениями, выраженными в градусах (например
0.0002
,0.002
и т. д.).бонус
Я прикрепил стиль здесь : вы можете открыть этот код в любом текстовом редакторе и сохранить его как файл стиля слоя QGIS (т.е. с
.qml
расширением).Приведенный выше стиль был создан с использованием QGIS 2.18.4 (он должен иметь то же имя используемого вами шейп- файла ).
источник
Большой респект MGRI.
В нашем тестовом слое все работало гладко. На производственном уровне через два-три часа мне удалось отследить проблему с $ geometry . Экспортировал точечный слой с платформы, не заметил, но это был MultiPoint . Казалось, это вызывает проблемы: стрелка не была нарисована; и как ни странно, только вычисленные точки сделали многоугольник из кругов.
Другое дело, что я использую переменный радиус . (не уверен, что это правильное слово в этом случае, вы также можете назвать его «длина луча» или как-то еще).
Вот то, что я сейчас использую, со слоем типа геометрии MultiPoints (хотя на самом деле все объекты являются одной точкой), и это работает для меня в QGis 2.18.3
Выражение стрелки Нет стрелки, если 360 °.
Выражение полигонов
источник
Я был одарен частичным решением в сети без каких-либо дополнительных плагинов, просто qgis из коробки. Она не показывает ширину луча антенны, просто поверните простой маркер в правильном направлении: используйте простой маркер и поверните его с азимутом антенны + 180 градусов (Свойства слоя> Одиночный символ-> Маркер-> Простой маркер-> Треугольник-> Вращение-> Редактировать -> введите <180 + "азимут антенны"> в поле выражения. А также установите Top в поле точки привязки маркера). Использование <180 + «азимут антенны»> необходимо из-за неправильного направления встроенного простого треугольного маркера. В противном случае он покажет неправильное направление антенны.
источник