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

MapInfo, MapBasic
Ответить
eeonw
Интересующийся
Сообщения: 20
Зарегистрирован: 10 апр 2011, 10:00
Репутация: 1

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

Сообщение eeonw » 18 июн 2012, 15:40

Не могу решить такую задачу:

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

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

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

Аватара пользователя
Пётр Дубоделов
Завсегдатай
Сообщения: 271
Зарегистрирован: 21 апр 2009, 13:58
Репутация: 12
Откуда: Бурашево
Контактная информация:

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: для прямоугольных координат
Последний раз редактировалось Пётр Дубоделов 18 июн 2012, 16:10, всего редактировалось 1 раз.
"Если карта не соответствует местности, доверяй местности."

eeonw
Интересующийся
Сообщения: 20
Зарегистрирован: 10 апр 2011, 10:00
Репутация: 1

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

Сообщение eeonw » 18 июн 2012, 16:10

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

Аватара пользователя
Пётр Дубоделов
Завсегдатай
Сообщения: 271
Зарегистрирован: 21 апр 2009, 13:58
Репутация: 12
Откуда: Бурашево
Контактная информация:

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

Сообщение Пётр Дубоделов » 18 июн 2012, 16:11

ой, извиняйте, слово "в некоторых" не заметил.

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

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение Boris » 18 июн 2012, 17:09

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

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

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

eeonw
Интересующийся
Сообщения: 20
Зарегистрирован: 10 апр 2011, 10:00
Репутация: 1

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

Сообщение eeonw » 18 июн 2012, 19:10

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

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение Boris » 18 июн 2012, 22:45

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

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

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

Сообщение Игорь Белов » 19 июн 2012, 17:51

Boris прав, задачка без программирования не может быть решена сколько-нибудь изящно.

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

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

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

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

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

Сообщение KolesovDmitry » 20 июн 2012, 08:17

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

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

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

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

Сообщение Александр Мурый » 20 июн 2012, 10:17

Вот накопал в сети такую утилиту для MI --> DistanceMarker.
Может, поможет..
Редактор материалов, модератор форума

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

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

Сообщение Игорь Белов » 20 июн 2012, 10:56

Предлагаю непрограммное решение: автотрассировка.
Кладём точки под слой полилиний. Создаём новую таблицу. Трассируем полилинию кусками от узла до узла между нужными точками. Пишем в поле длин ObjectLen().
The purpose of computing is insight, not numbers

Ответить

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

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

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