Узлы в местах пересечений

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

Узлы в местах пересечений

Сообщение Svility » 30 ноя 2017, 21:58

День добрый, стоит задача: создать геодезическую ведомость трубопровода, с привязкой к ней объектов.
т.е. в qgis первым делом делаю извлечение узлов имеющегося линейного объекта, после чего создаю 2 поля с координатами X иY, полученые узлы с координатами выгружаю в excel. После чего к сформированной ведомости мне необходимо добавить поле с информацией о установленых на трубопроводе кранах. Краны нанесены точками на линию (с прилипанием). Что бы в сформированной ведомости отметить положения крана, необходимо предварительно создать узел(вершину, вертекс) на линейном объекте и на него поместить кран.
Труб много, кранов и прочего еще больше, врукопашку создавать вершины для каждого объекта - гиблое дело. Нужен способ создания этих вершин в местах пересечений.

Прошу поделиться опытом/методом.

Аватара пользователя
t[0]p
Участник
Сообщения: 91
Зарегистрирован: 15 ноя 2014, 14:35
Репутация: 7
Откуда: Томск

Re: Узлы в местах пересечений

Сообщение t[0]p » 01 дек 2017, 05:01

Svility писал(а):
30 ноя 2017, 21:58
Краны нанесены точками на линию (с прилипанием).
Svility писал(а):
30 ноя 2017, 21:58
необходимо предварительно создать узел
А чем вам точка не угодила? Почему именно узел нужен?

trir
Гуру
Сообщения: 3742
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 632
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Узлы в местах пересечений

Сообщение trir » 01 дек 2017, 07:43

переделать функцию в LS_InsPoint

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

FUNCTION `LS_AddPoint`(Ls LineString, np point) RETURNS linestring
BEGIN
  DECLARE I, ICount INTEGER DEFAULT 1;
  DECLARE nStr longText;
  DECLARE crP Point;
  SET ICount = NumPoints(Ls) + 1;
  SET nStr = 'LineString(';
  while I < ICount do
   SET crP = PointN(Ls, I);
   SET nStr = Concat(nStr, X(crP), ' ', Y(crP), ',');
   SET I = I + 1;
  END while;
  SET nStr = Concat(nStr, X(nP), ' ', Y(nP), ')');
  RETURN LineFromText(nStr);
END $$

Александр Мурый
Гуру
Сообщения: 5169
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 778
Ваше звание: званий не имею
Откуда: Москва

Re: Узлы в местах пересечений

Сообщение Александр Мурый » 01 дек 2017, 09:41

А можно расшифровку того, что написано в первом посте, только более внятно и с картинками?
Редактор материалов, модератор форума

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

Re: Узлы в местах пересечений

Сообщение Svility » 02 дек 2017, 06:25

t[0]p, выгружаются ведь координаты вершин, а если кран не на вершине, то в ведомости не будет точной координаты установки крана.

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

Re: Узлы в местах пересечений

Сообщение Svility » 02 дек 2017, 06:27

trir, спасибо, буду пробовать :)

Svility
Интересующийся
Сообщения: 20
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 0
Откуда: Краснодар

Re: Узлы в местах пересечений

Сообщение Svility » 02 дек 2017, 06:31

Александр Мурый, куда ж еще более внятно. В картинках будет менее понятно.

Игорь Белов
Гуру
Сообщения: 1631
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1013
Откуда: Казань

Re: Узлы в местах пересечений

Сообщение Игорь Белов » 03 дек 2017, 00:38

Можно написать скрипт на питоне для QGIS. Задача: высыпать узлы из линий и перемешать с точками в правильном порядке. Для этого вычисляется продольная координата M для тех и других, после чего они сортируются по возрастанию M и образуют новую линию.

Но Вы и так выводите узлы в координатах. Остаётся для них и для кранов вычислить величину M, после чего можно отсортировать всё в экселе. В этом случае не нужно создавать узлы.

Для вычисления M можно использовать скрипт snap_points_to_lines. На входе слой точек и слой линий, на выходе слой точек, которые снесены на линии, плюс добавлены поля со значениями ucoord и vcoord, — продольная координата M и поперечная (расстояние от исходной точки до линии). Точки сносятся на нужную линию либо по имени, либо на ближайшую (Ignore fields).
Вложения
snap_points_to_lines.tar.gz
Снести точки на линии
(2.22 КБ) 14 скачиваний

Ответить

Вернуться в «Я новичок!»

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

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