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

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

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

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

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

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

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

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

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

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

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

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 $$

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

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

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

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

Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

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

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

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

Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

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

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

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

Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

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

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

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

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

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 КБ) 533 скачивания
The purpose of computing is insight, not numbers

Ответить

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

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

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