Страница 1 из 1

расстояние между точками на полилинии

Добавлено: 18 июн 2012, 15:40
eeonw
Не могу решить такую задачу:

Есть полилиния, в некоторых её узлах стоят точечные объекты(точки), мне надо посчитать расстояния между этими точками по полилинии.

Хотел разделить полилинию точками на полилинии, что бы получить длины с помощью ObjectLen, но не нашёл, как автоматически это сделать. Только , если вручную в нужных узлах разъединять - но это очень муторно.

Какие есть способы?

Re: расстояние между точками на полилинии

Добавлено: 18 июн 2012, 16:03
Пётр Дубоделов
выгрузите в миф и считайте в Excel, R и т.п.
вот пример формулы:

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

=СТЕПЕНЬ(СТЕПЕНЬ(E2-C2;2)+СТЕПЕНЬ(F2-D2;2);0,5)
где соответственно C2, D2 = X1, Y1; E2,F2 = X2, Y2

или если угодно, в общем виде (C, D) ((C+1), (D+1))
теорема Пифагора, однако...

ps: для прямоугольных координат

Re: расстояние между точками на полилинии

Добавлено: 18 июн 2012, 16:10
eeonw
В Excel я могу выгрузить разделённую на все подряд сегменты полилинию , а мне нужны длины частей, состоящих каждая из нескольких сегментов, хочется что бы они уже были сгруппированны в соответствии с делением полилинии точками.

Re: расстояние между точками на полилинии

Добавлено: 18 июн 2012, 16:11
Пётр Дубоделов
ой, извиняйте, слово "в некоторых" не заметил.

самому интересна эта задачка, по идее формула та же, только нужно дополнительно просуммировать значения между маркерами...

Re: расстояние между точками на полилинии

Добавлено: 18 июн 2012, 17:09
Boris
решение задачи (естественно) требует программирования.
но начиная его следует уточнить две вещи:
а) являются ли обе таблицы идентичными по используемой системе координат с точностью до границ таблицы
б) стоят ли точки ТОЧНО в вершинах узлов
---
В лоб с некой минимальной погрешностью задача решается так:
а) делаете копию таблиц. далее Т - точки, Л - полинии, естественно обе таблиц - копии
б) открываете таблицы Т и Л в окне карты и окно мапбасика в мапинфо. набираете текст

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

set coordsys table T
Set Distance Units "m"
update t set obj=CreateCircle( centroidx(obj), centroidy(obj), 0.002 )
все точки превратятся в мелкие (2 мм) окружности. а окружности - это уже полигоны, и ими можно разрезать линии на части стандартным образом.
получите искомые полилинии, у которых будет отрезано по 2 мм в начале и конце.

Re: расстояние между точками на полилинии

Добавлено: 18 июн 2012, 19:10
eeonw
Boris писал(а):решение задачи (естественно) требует программирования.
но начиная его следует уточнить две вещи:
а) являются ли обе таблицы идентичными по используемой системе координат с точностью до границ таблицы
б) стоят ли точки ТОЧНО в вершинах узлов
---
В лоб с некой минимальной погрешностью задача решается так:
у этих таблиц СК одна - NonEarth.
Про разделение маленькими полигонами думал, - решение практичное, но надеялся что-нибудь найти покрасивее.
Точки стоят прямо в вершинах - ставил с включённой привязкой.

Re: расстояние между точками на полилинии

Добавлено: 18 июн 2012, 22:45
Boris
по красивей требует еще большего программирования. я как-то писал и выкладывал программу, которая считает расстояние от начала линии до некоторой точки. на ней. кода для вычислений там было не много, но кода по оформлению был избыточен для такой простой задачи.

Re: расстояние между точками на полилинии

Добавлено: 19 июн 2012, 17:51
Игорь Белов
Boris прав, задачка без программирования не может быть решена сколько-нибудь изящно.

Что касается совпадения точек с узлами, это не проблема: можно ввести радиус допустимого отклонения как определяемый пользователем параметр.

Напомню, что существует более общая задача: для каждой точки найти её образ как ближайшую точку на полилинии вместе с расстоянием S этого образа от начала полилинии и расстоянием D между точкой и её образом. Похоже на топографическую створную съёмку, только задом наперёд. Процедура завершается сортировкой точек по значению S.

В контексте поставленной топикстартером задачи полезно выводить помимо D и S расстояние образа от ближайшего узла полилинии, которое вместе с D позволит отобрать точки, совпадающие с узлами. Остаётся посчитать разности S.

Re: расстояние между точками на полилинии

Добавлено: 20 июн 2012, 08:17
KolesovDmitry
Обязательно ли решать эту задачу в MI? Судя по ответам, в нее не встроено подходящего инструмента для работы. В то же время исходная задача довольно распространена, и у нее есть стандартное решение -- Linear referencing.

В GRASS, например, для решения этой задачи не понадобится программирования.
Если верить вики, подобные инструменты есть в ArcGIS.
Насколько я помню, подобное было еще и в ArcView (но я не работал с ней, пусть меня поправят, если я ошибаюсь).

Re: расстояние между точками на полилинии

Добавлено: 20 июн 2012, 10:17
Александр Мурый
Вот накопал в сети такую утилиту для MI --> DistanceMarker.
Может, поможет..

Re: расстояние между точками на полилинии

Добавлено: 20 июн 2012, 10:56
Игорь Белов
Предлагаю непрограммное решение: автотрассировка.
Кладём точки под слой полилиний. Создаём новую таблицу. Трассируем полилинию кусками от узла до узла между нужными точками. Пишем в поле длин ObjectLen().