поворот символов в слое в зависимости от атрибута объекта

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
evgenius
Интересующийся
Сообщения: 17
Зарегистрирован: 17 июл 2015, 15:44
Репутация: 0

поворот символов в слое в зависимости от атрибута объекта

Сообщение evgenius » 24 мар 2017, 08:46

Всем привет.
У меня 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: поворот символов в слое в зависимости от атрибута объект

Сообщение Аминодов-Борисов » 24 мар 2017, 09:25

Если я правильно вас понимаю, то:
1. У вас есть слой точечных объектов.
2. Среди этих атрибутов есть азимут. Ну или ещё какой-нибудь угол поворота.
Если так, то вам Питон нафиг не нужен. В QGIS есть стандартное средство для того, чтобы брать угол поворота знака из атрибутов.
Что же касается точки поворота, то я, например, все SVG-маркеры рисую сам. И рисую я их на квадратном полотне с тем расчётом, чтобы точка привязки маркера, она же точка поворота, была в геометрическом центре полотна. В принципе, вы того же самого можете добиться теми же средствами QGIS.

evgenius
Интересующийся
Сообщения: 17
Зарегистрирован: 17 июл 2015, 15:44
Репутация: 0

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение evgenius » 24 мар 2017, 09:44

Спасибо!
Все верно поняли. Можете порекомендовать руководство почти для даунов, как рисовать svg маркеры и встраивать их в qgis? Я честно пытался, но что-то пошло не так. Или сразу xml треугольника с привязкой в вершине, с направлением на азимут 0 градусов можете кинуть?

Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение Аминодов-Борисов » 24 мар 2017, 09:55

Ну вот смотрите. Допустим, у вас есть точечный слой.
Покажу на примере простого маркера-треугольника.
atrangle01.png
atrangle01.png (116.87 КБ) 9991 просмотр
В атрибутах этого слоя есть поле, отвечающее за угол поворота. У меня оно так и называется — angle. Тип данных integer (целое число), но вы сами смотрите, вдруг вам для решения вашей задачи нужны не только целые градусы.
atrangle02.png
atrangle02.png (27.16 КБ) 9991 просмотр
Открываете свойства слоя, вкладку «Стиль».
atrangle03.png
atrangle03.png (49.69 КБ) 9991 просмотр
Правее панели вкладок вы видите окошко с предварительным просмотром маркера и деревом «Маркер — Простой маркер». Щёлкаете мышкой на этом самом Простом маркере. Вон, на картинке он серым выделен.
Продолжение следует...
Последний раз редактировалось Аминодов-Борисов 24 мар 2017, 09:59, всего редактировалось 1 раз.

Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение Аминодов-Борисов » 24 мар 2017, 09:59

Далее нужно задать атрибут, отвечающий за угол поворота знака. Тут всё на картинке понятно.
atrangle04.png
atrangle04.png (70.72 КБ) 9989 просмотров
А затем поменять свойство знака «Смещение по Y» так, чтобы точкой привязки и поворота стал не геометрический центр треугольника, а его верхняя вершина. Тут я делал на глаз, чтобы картинка в окошке предварительного просмотра приняла нужный мне вид.
atrangle05.png
atrangle05.png (50.07 КБ) 9989 просмотров
Готово. Поле с углом поворота знака задано, значок смещён.
В принципе, если вы хотите вместо простого маркера использовать SVG, то технология будет такая же.
atrangle06.png
atrangle06.png (118.97 КБ) 9989 просмотров

evgenius
Интересующийся
Сообщения: 17
Зарегистрирован: 17 июл 2015, 15:44
Репутация: 0

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение evgenius » 24 мар 2017, 10:05

"...Щёлкаете мышкой на этом самом Простом маркере. Вон, на картинке он серым выделен.
Продолжение следует..."
Хочу уточнить - самы простой маркер мне точно подойдет? Мне нужен как-бы перевернутый, чтобы основание смотрело по азимуту 0, а точка привязки была в вершине.
Получается, надо делать свой svg?

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение freeExec » 24 мар 2017, 10:13

Можно свой нарисовать, а можно 180 градусов к углу добавить, до нужного разворота.

Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение Аминодов-Борисов » 24 мар 2017, 10:17

evgenius писал(а):"...Щёлкаете мышкой на этом самом Простом маркере. Вон, на картинке он серым выделен.
Продолжение следует..."
Хочу уточнить - самы простой маркер мне точно подойдет? Мне нужен как-бы перевернутый, чтобы основание смотрело по азимуту 0, а точка привязки была в вершине.
Получается, надо делать свой svg?
Вот маркер. Не треугольник, а круговой сектор. Вершиной стоит в точке поворота, «смотрит» по умолчанию по азимуту 0°.
В принципе, тема интересная. Думаю, средствами QGIS можно добиться того, чтобы каждый маркер отображал не только азимут, но и, как вы говорите, ширину диаграммы направленности (наверное, это что-то вроде угла поля зрения). Но тут нужно побольше поизучать. :)
Вложения
marker.svg
(1.21 КБ) 571 скачивание

evgenius
Интересующийся
Сообщения: 17
Зарегистрирован: 17 июл 2015, 15:44
Репутация: 0

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение evgenius » 24 мар 2017, 10:32

@Алексей Борисов
Получилось с вложенным маркером.
Спасибо.

Почему я не могу его выделить, щелкая в центр маркера? То же с выделением через zoom to selected feature из Attribute Table. Вернее этот маркер выделяется не так, как простой встроенный треугольник. Если присмотреться, то он выделяется как граница svg рисунка, а не по контуру сектора с заливкой всего сектора. В какую сторону копать?

@freeExec
Как добавить 180град к маркеру в дополнение к повороту в зависимости от азимута не разобрался. Получается либо все сектора на 180 град смотрят, либо все привязаны своим основанием, визуально выглядит как ошибочное направление сектора.
Вложения
success.JPG
success.JPG (33.52 КБ) 9970 просмотров

Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение Аминодов-Борисов » 24 мар 2017, 10:38

evgenius писал(а):@Алексей Борисов
Получилось с вложенным маркером.
Спасибо.
Почему я не могу его выделить, щелкая в центр маркера? То же с выделением через zoom to selected feature из Attribute Table. Вернее этот маркер выделяется не так, как простой встроенный треугольник. Если присмотреться, то он выделяется как граница svg рисунка, а не по контуру сектора с заливкой всего сектора. В какую сторону копать?
Щёлкая в центр маркера — то есть, в центр этого кругового сектора? Этого уже не знаю. Наверное, QGIS обрабатывает именно щелчок в точку привязки знака плюс-минус какой-нибудь допуск.
Кстати, смотрите, что у меня получилось.
atrangle07.png
atrangle07.png (135.9 КБ) 9970 просмотров
Каждый треугольник указывает остриём на азимут. А линии отображают как азимут, так и угол поля зрения. В принципе, удалось отобразить оба параметра.

evgenius
Интересующийся
Сообщения: 17
Зарегистрирован: 17 июл 2015, 15:44
Репутация: 0

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение evgenius » 24 мар 2017, 10:44

Алексей Борисов писал(а):
Щёлкая в центр маркера — то есть, в центр этого кругового сектора? Этого уже не знаю.
Полагаю, дело в svg. Спасибо, буду копать.
Алексей Борисов писал(а): Каждый треугольник указывает остриём на азимут. А линии отображают как азимут, так и угол поля зрения. В принципе, удалось отобразить оба параметра.
Ага, только антенна с шириной 360 град. будет отображаться как одна линия. Хрен с этим углом обзора, сначала нормальный азимут и выделение как у встроенного простого треугольника буду победить.

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение freeExec » 24 мар 2017, 10:55

evgenius писал(а): @freeExec
Как добавить 180град к маркеру в дополнение к повороту в зависимости от азимута не разобрался. Получается либо все сектора на 180 град смотрят, либо все привязаны своим основанием, визуально выглядит как ошибочное направление сектора.
Там где угол поворота выбрать "Выражение" и написать

Код: Выделить всё

180 + angle

evgenius
Интересующийся
Сообщения: 17
Зарегистрирован: 17 июл 2015, 15:44
Репутация: 0

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение evgenius » 24 мар 2017, 11:36

freeExec писал(а): Там где угол поворота выбрать "Выражение" и написать

Код: Выделить всё

180 + angle
БИНГО! Получилось. Спасибо, огромное и человеческое!
Вы не поверите, где-то около двух лет бился над этими поворотами. С перерывами, конечно, и отвлечениями на другие задачи. И все это время было стыдно за использование линий вместо треугольничков (vector field marker с нужным азимутом).

А по поводу выделения - я так понял если делать svg, то выделять будет по границам этого svg (экспортнул встроенный простой маркер как svg, потом импортнул его же, в результате он стал выделяться по границам, т.е. не так как встроенный неэкспортированный в svg). ИМХО.

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение freeExec » 24 мар 2017, 11:44

Это странно. Попробуйте в Параметры/Система/Пути к маркерам - указать папку с этим значком.

evgenius
Интересующийся
Сообщения: 17
Зарегистрирован: 17 июл 2015, 15:44
Репутация: 0

Re: поворот символов в слое в зависимости от атрибута объект

Сообщение evgenius » 27 мар 2017, 10:30

freeExec писал(а): Там где угол поворота выбрать "Выражение" и написать

Код: Выделить всё

180 + angle
А может кто-подсказать, что написать в поле "Выражение" для назначения в качестве символа circle, если, например атрибут "beamwidth" = 360, и символа triangle, если "beamwidth" все остальные?
Пробовал так:
if( "beamwidth" = 360, circle,triangle) и так
if( "beamwidth" = 360, "circle","triangle")
но не выходит каменный цветок, хотя обе записи qgis считает валидными.
Если навести мышку сюда, то появляется подсказка, но как на самом деле надо не разобрался:
(я на самом деле привязал к атрибуту size для быстрого теста за неимением beamwidth, но не суть)
Вложения
Снимок.JPG
Снимок.JPG (53.74 КБ) 9861 просмотр

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей