поворот символов в слое в зависимости от атрибута объекта
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 17 июл 2015, 15:44
- Репутация: 0
поворот символов в слое в зависимости от атрибута объекта
Всем привет.
У меня QGIS из дистрибутива osgeo4w, плюс немного могу на питоне.
Нужно отобразить условно антенны сотовой связи на карте. Каждая антенна имеет координаты, ширину диаграммы направленности и азимут.
[img]не%20разобрался%20как%20вставить%20картинку%20из%20ссылки%20ниже[/img]
Подробнее тут: http://gis.stackexchange.com/questions/ ... es#tab-top
1) Можно ли использовать для этого простые маркеры или svg символы?
Для простоты можно использовать изображение треугольника. Но у имеющихся в qgis треугольников точка поворота - центр треугольника, а мне нуна, чтоб была вершина.
2) Если такое можно на python, буду признателен за примерчик.
Уверен, что смогу нарисовать соответствующие треугольнички в слое layer = QgsVectorLayer('Polygon', 'poly' , "memory") в виде полигонов, решая стандартные геодезические задачи. Но такое решение имеет недостатки: при небольших расстояниях между антеннами, они будут налезать друг на друга, а при больших - быть плохо различимы при малых зумах. Может есть более кошерный способ решить задачу?
Заранее спасибо.
У меня QGIS из дистрибутива osgeo4w, плюс немного могу на питоне.
Нужно отобразить условно антенны сотовой связи на карте. Каждая антенна имеет координаты, ширину диаграммы направленности и азимут.
[img]не%20разобрался%20как%20вставить%20картинку%20из%20ссылки%20ниже[/img]
Подробнее тут: http://gis.stackexchange.com/questions/ ... es#tab-top
1) Можно ли использовать для этого простые маркеры или svg символы?
Для простоты можно использовать изображение треугольника. Но у имеющихся в qgis треугольников точка поворота - центр треугольника, а мне нуна, чтоб была вершина.
2) Если такое можно на python, буду признателен за примерчик.
Уверен, что смогу нарисовать соответствующие треугольнички в слое layer = QgsVectorLayer('Polygon', 'poly' , "memory") в виде полигонов, решая стандартные геодезические задачи. Но такое решение имеет недостатки: при небольших расстояниях между антеннами, они будут налезать друг на друга, а при больших - быть плохо различимы при малых зумах. Может есть более кошерный способ решить задачу?
Заранее спасибо.
-
- Активный участник
- Сообщения: 153
- Зарегистрирован: 02 авг 2014, 18:29
- Репутация: 24
- Откуда: Москва
Re: поворот символов в слое в зависимости от атрибута объект
Если я правильно вас понимаю, то:
1. У вас есть слой точечных объектов.
2. Среди этих атрибутов есть азимут. Ну или ещё какой-нибудь угол поворота.
Если так, то вам Питон нафиг не нужен. В QGIS есть стандартное средство для того, чтобы брать угол поворота знака из атрибутов.
Что же касается точки поворота, то я, например, все SVG-маркеры рисую сам. И рисую я их на квадратном полотне с тем расчётом, чтобы точка привязки маркера, она же точка поворота, была в геометрическом центре полотна. В принципе, вы того же самого можете добиться теми же средствами QGIS.
1. У вас есть слой точечных объектов.
2. Среди этих атрибутов есть азимут. Ну или ещё какой-нибудь угол поворота.
Если так, то вам Питон нафиг не нужен. В QGIS есть стандартное средство для того, чтобы брать угол поворота знака из атрибутов.
Что же касается точки поворота, то я, например, все SVG-маркеры рисую сам. И рисую я их на квадратном полотне с тем расчётом, чтобы точка привязки маркера, она же точка поворота, была в геометрическом центре полотна. В принципе, вы того же самого можете добиться теми же средствами QGIS.
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 17 июл 2015, 15:44
- Репутация: 0
Re: поворот символов в слое в зависимости от атрибута объект
Спасибо!
Все верно поняли. Можете порекомендовать руководство почти для даунов, как рисовать svg маркеры и встраивать их в qgis? Я честно пытался, но что-то пошло не так. Или сразу xml треугольника с привязкой в вершине, с направлением на азимут 0 градусов можете кинуть?
Все верно поняли. Можете порекомендовать руководство почти для даунов, как рисовать svg маркеры и встраивать их в qgis? Я честно пытался, но что-то пошло не так. Или сразу xml треугольника с привязкой в вершине, с направлением на азимут 0 градусов можете кинуть?
-
- Активный участник
- Сообщения: 153
- Зарегистрирован: 02 авг 2014, 18:29
- Репутация: 24
- Откуда: Москва
Re: поворот символов в слое в зависимости от атрибута объект
Ну вот смотрите. Допустим, у вас есть точечный слой.
Покажу на примере простого маркера-треугольника.
В атрибутах этого слоя есть поле, отвечающее за угол поворота. У меня оно так и называется — angle. Тип данных integer (целое число), но вы сами смотрите, вдруг вам для решения вашей задачи нужны не только целые градусы.
Открываете свойства слоя, вкладку «Стиль».
Правее панели вкладок вы видите окошко с предварительным просмотром маркера и деревом «Маркер — Простой маркер». Щёлкаете мышкой на этом самом Простом маркере. Вон, на картинке он серым выделен.
Продолжение следует...
Покажу на примере простого маркера-треугольника.
В атрибутах этого слоя есть поле, отвечающее за угол поворота. У меня оно так и называется — angle. Тип данных integer (целое число), но вы сами смотрите, вдруг вам для решения вашей задачи нужны не только целые градусы.
Открываете свойства слоя, вкладку «Стиль».
Правее панели вкладок вы видите окошко с предварительным просмотром маркера и деревом «Маркер — Простой маркер». Щёлкаете мышкой на этом самом Простом маркере. Вон, на картинке он серым выделен.
Продолжение следует...
Последний раз редактировалось Аминодов-Борисов 24 мар 2017, 09:59, всего редактировалось 1 раз.
-
- Активный участник
- Сообщения: 153
- Зарегистрирован: 02 авг 2014, 18:29
- Репутация: 24
- Откуда: Москва
Re: поворот символов в слое в зависимости от атрибута объект
Далее нужно задать атрибут, отвечающий за угол поворота знака. Тут всё на картинке понятно.
А затем поменять свойство знака «Смещение по Y» так, чтобы точкой привязки и поворота стал не геометрический центр треугольника, а его верхняя вершина. Тут я делал на глаз, чтобы картинка в окошке предварительного просмотра приняла нужный мне вид.
Готово. Поле с углом поворота знака задано, значок смещён.
В принципе, если вы хотите вместо простого маркера использовать SVG, то технология будет такая же.
А затем поменять свойство знака «Смещение по Y» так, чтобы точкой привязки и поворота стал не геометрический центр треугольника, а его верхняя вершина. Тут я делал на глаз, чтобы картинка в окошке предварительного просмотра приняла нужный мне вид.
Готово. Поле с углом поворота знака задано, значок смещён.
В принципе, если вы хотите вместо простого маркера использовать SVG, то технология будет такая же.
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 17 июл 2015, 15:44
- Репутация: 0
Re: поворот символов в слое в зависимости от атрибута объект
"...Щёлкаете мышкой на этом самом Простом маркере. Вон, на картинке он серым выделен.
Продолжение следует..."
Хочу уточнить - самы простой маркер мне точно подойдет? Мне нужен как-бы перевернутый, чтобы основание смотрело по азимуту 0, а точка привязки была в вершине.
Получается, надо делать свой svg?
Продолжение следует..."
Хочу уточнить - самы простой маркер мне точно подойдет? Мне нужен как-бы перевернутый, чтобы основание смотрело по азимуту 0, а точка привязки была в вершине.
Получается, надо делать свой svg?
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: поворот символов в слое в зависимости от атрибута объект
Можно свой нарисовать, а можно 180 градусов к углу добавить, до нужного разворота.
-
- Активный участник
- Сообщения: 153
- Зарегистрирован: 02 авг 2014, 18:29
- Репутация: 24
- Откуда: Москва
Re: поворот символов в слое в зависимости от атрибута объект
Вот маркер. Не треугольник, а круговой сектор. Вершиной стоит в точке поворота, «смотрит» по умолчанию по азимуту 0°.evgenius писал(а):"...Щёлкаете мышкой на этом самом Простом маркере. Вон, на картинке он серым выделен.
Продолжение следует..."
Хочу уточнить - самы простой маркер мне точно подойдет? Мне нужен как-бы перевернутый, чтобы основание смотрело по азимуту 0, а точка привязки была в вершине.
Получается, надо делать свой svg?
В принципе, тема интересная. Думаю, средствами QGIS можно добиться того, чтобы каждый маркер отображал не только азимут, но и, как вы говорите, ширину диаграммы направленности (наверное, это что-то вроде угла поля зрения). Но тут нужно побольше поизучать.

- Вложения
-
marker.svg
- (1.21 КБ) 571 скачивание
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 17 июл 2015, 15:44
- Репутация: 0
Re: поворот символов в слое в зависимости от атрибута объект
@Алексей Борисов
Получилось с вложенным маркером.
Спасибо.
Почему я не могу его выделить, щелкая в центр маркера? То же с выделением через zoom to selected feature из Attribute Table. Вернее этот маркер выделяется не так, как простой встроенный треугольник. Если присмотреться, то он выделяется как граница svg рисунка, а не по контуру сектора с заливкой всего сектора. В какую сторону копать?
@freeExec
Как добавить 180град к маркеру в дополнение к повороту в зависимости от азимута не разобрался. Получается либо все сектора на 180 град смотрят, либо все привязаны своим основанием, визуально выглядит как ошибочное направление сектора.
Получилось с вложенным маркером.
Спасибо.
Почему я не могу его выделить, щелкая в центр маркера? То же с выделением через zoom to selected feature из Attribute Table. Вернее этот маркер выделяется не так, как простой встроенный треугольник. Если присмотреться, то он выделяется как граница svg рисунка, а не по контуру сектора с заливкой всего сектора. В какую сторону копать?
@freeExec
Как добавить 180град к маркеру в дополнение к повороту в зависимости от азимута не разобрался. Получается либо все сектора на 180 град смотрят, либо все привязаны своим основанием, визуально выглядит как ошибочное направление сектора.
- Вложения
-
- success.JPG (33.52 КБ) 9969 просмотров
-
- Активный участник
- Сообщения: 153
- Зарегистрирован: 02 авг 2014, 18:29
- Репутация: 24
- Откуда: Москва
Re: поворот символов в слое в зависимости от атрибута объект
Щёлкая в центр маркера — то есть, в центр этого кругового сектора? Этого уже не знаю. Наверное, QGIS обрабатывает именно щелчок в точку привязки знака плюс-минус какой-нибудь допуск.evgenius писал(а):@Алексей Борисов
Получилось с вложенным маркером.
Спасибо.
Почему я не могу его выделить, щелкая в центр маркера? То же с выделением через zoom to selected feature из Attribute Table. Вернее этот маркер выделяется не так, как простой встроенный треугольник. Если присмотреться, то он выделяется как граница svg рисунка, а не по контуру сектора с заливкой всего сектора. В какую сторону копать?
Кстати, смотрите, что у меня получилось.
Каждый треугольник указывает остриём на азимут. А линии отображают как азимут, так и угол поля зрения. В принципе, удалось отобразить оба параметра.
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 17 июл 2015, 15:44
- Репутация: 0
Re: поворот символов в слое в зависимости от атрибута объект
Полагаю, дело в svg. Спасибо, буду копать.Алексей Борисов писал(а):
Щёлкая в центр маркера — то есть, в центр этого кругового сектора? Этого уже не знаю.
Ага, только антенна с шириной 360 град. будет отображаться как одна линия. Хрен с этим углом обзора, сначала нормальный азимут и выделение как у встроенного простого треугольника буду победить.Алексей Борисов писал(а): Каждый треугольник указывает остриём на азимут. А линии отображают как азимут, так и угол поля зрения. В принципе, удалось отобразить оба параметра.
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: поворот символов в слое в зависимости от атрибута объект
Там где угол поворота выбрать "Выражение" и написатьevgenius писал(а): @freeExec
Как добавить 180град к маркеру в дополнение к повороту в зависимости от азимута не разобрался. Получается либо все сектора на 180 град смотрят, либо все привязаны своим основанием, визуально выглядит как ошибочное направление сектора.
Код: Выделить всё
180 + angle
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 17 июл 2015, 15:44
- Репутация: 0
Re: поворот символов в слое в зависимости от атрибута объект
БИНГО! Получилось. Спасибо, огромное и человеческое!freeExec писал(а): Там где угол поворота выбрать "Выражение" и написатьКод: Выделить всё
180 + angle
Вы не поверите, где-то около двух лет бился над этими поворотами. С перерывами, конечно, и отвлечениями на другие задачи. И все это время было стыдно за использование линий вместо треугольничков (vector field marker с нужным азимутом).
А по поводу выделения - я так понял если делать svg, то выделять будет по границам этого svg (экспортнул встроенный простой маркер как svg, потом импортнул его же, в результате он стал выделяться по границам, т.е. не так как встроенный неэкспортированный в svg). ИМХО.
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: поворот символов в слое в зависимости от атрибута объект
Это странно. Попробуйте в Параметры/Система/Пути к маркерам - указать папку с этим значком.
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 17 июл 2015, 15:44
- Репутация: 0
Re: поворот символов в слое в зависимости от атрибута объект
А может кто-подсказать, что написать в поле "Выражение" для назначения в качестве символа circle, если, например атрибут "beamwidth" = 360, и символа triangle, если "beamwidth" все остальные?freeExec писал(а): Там где угол поворота выбрать "Выражение" и написатьКод: Выделить всё
180 + angle
Пробовал так:
if( "beamwidth" = 360, circle,triangle) и так
if( "beamwidth" = 360, "circle","triangle")
но не выходит каменный цветок, хотя обе записи qgis считает валидными.
Если навести мышку сюда, то появляется подсказка, но как на самом деле надо не разобрался:
(я на самом деле привязал к атрибуту size для быстрого теста за неимением beamwidth, но не суть)
- Вложения
-
- Снимок.JPG (53.74 КБ) 9860 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя