расстояние между точками на полилинии
-
- Интересующийся
- Сообщения: 20
- Зарегистрирован: 10 апр 2011, 10:00
- Репутация: 1
расстояние между точками на полилинии
Не могу решить такую задачу:
Есть полилиния, в некоторых её узлах стоят точечные объекты(точки), мне надо посчитать расстояния между этими точками по полилинии.
Хотел разделить полилинию точками на полилинии, что бы получить длины с помощью ObjectLen, но не нашёл, как автоматически это сделать. Только , если вручную в нужных узлах разъединять - но это очень муторно.
Какие есть способы?
Есть полилиния, в некоторых её узлах стоят точечные объекты(точки), мне надо посчитать расстояния между этими точками по полилинии.
Хотел разделить полилинию точками на полилинии, что бы получить длины с помощью ObjectLen, но не нашёл, как автоматически это сделать. Только , если вручную в нужных узлах разъединять - но это очень муторно.
Какие есть способы?
- Пётр Дубоделов
- Завсегдатай
- Сообщения: 271
- Зарегистрирован: 21 апр 2009, 13:58
- Репутация: 12
- Откуда: Бурашево
- Контактная информация:
Re: расстояние между точками на полилинии
выгрузите в миф и считайте в Excel, R и т.п.
вот пример формулы:
где соответственно C2, D2 = X1, Y1; E2,F2 = X2, Y2
или если угодно, в общем виде (C, D) ((C+1), (D+1))
теорема Пифагора, однако...
ps: для прямоугольных координат
вот пример формулы:
Код: Выделить всё
=СТЕПЕНЬ(СТЕПЕНЬ(E2-C2;2)+СТЕПЕНЬ(F2-D2;2);0,5)
или если угодно, в общем виде (C, D) ((C+1), (D+1))
теорема Пифагора, однако...
ps: для прямоугольных координат
Последний раз редактировалось Пётр Дубоделов 18 июн 2012, 16:10, всего редактировалось 1 раз.
"Если карта не соответствует местности, доверяй местности."
-
- Интересующийся
- Сообщения: 20
- Зарегистрирован: 10 апр 2011, 10:00
- Репутация: 1
Re: расстояние между точками на полилинии
В Excel я могу выгрузить разделённую на все подряд сегменты полилинию , а мне нужны длины частей, состоящих каждая из нескольких сегментов, хочется что бы они уже были сгруппированны в соответствии с делением полилинии точками.
- Пётр Дубоделов
- Завсегдатай
- Сообщения: 271
- Зарегистрирован: 21 апр 2009, 13:58
- Репутация: 12
- Откуда: Бурашево
- Контактная информация:
Re: расстояние между точками на полилинии
ой, извиняйте, слово "в некоторых" не заметил.
самому интересна эта задачка, по идее формула та же, только нужно дополнительно просуммировать значения между маркерами...
самому интересна эта задачка, по идее формула та же, только нужно дополнительно просуммировать значения между маркерами...
"Если карта не соответствует местности, доверяй местности."
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: расстояние между точками на полилинии
решение задачи (естественно) требует программирования.
но начиная его следует уточнить две вещи:
а) являются ли обе таблицы идентичными по используемой системе координат с точностью до границ таблицы
б) стоят ли точки ТОЧНО в вершинах узлов
---
В лоб с некой минимальной погрешностью задача решается так:
а) делаете копию таблиц. далее Т - точки, Л - полинии, естественно обе таблиц - копии
б) открываете таблицы Т и Л в окне карты и окно мапбасика в мапинфо. набираете текст
все точки превратятся в мелкие (2 мм) окружности. а окружности - это уже полигоны, и ими можно разрезать линии на части стандартным образом.
получите искомые полилинии, у которых будет отрезано по 2 мм в начале и конце.
но начиная его следует уточнить две вещи:
а) являются ли обе таблицы идентичными по используемой системе координат с точностью до границ таблицы
б) стоят ли точки ТОЧНО в вершинах узлов
---
В лоб с некой минимальной погрешностью задача решается так:
а) делаете копию таблиц. далее Т - точки, Л - полинии, естественно обе таблиц - копии
б) открываете таблицы Т и Л в окне карты и окно мапбасика в мапинфо. набираете текст
Код: Выделить всё
set coordsys table T
Set Distance Units "m"
update t set obj=CreateCircle( centroidx(obj), centroidy(obj), 0.002 )
получите искомые полилинии, у которых будет отрезано по 2 мм в начале и конце.
-
- Интересующийся
- Сообщения: 20
- Зарегистрирован: 10 апр 2011, 10:00
- Репутация: 1
Re: расстояние между точками на полилинии
у этих таблиц СК одна - NonEarth.Boris писал(а):решение задачи (естественно) требует программирования.
но начиная его следует уточнить две вещи:
а) являются ли обе таблицы идентичными по используемой системе координат с точностью до границ таблицы
б) стоят ли точки ТОЧНО в вершинах узлов
---
В лоб с некой минимальной погрешностью задача решается так:
Про разделение маленькими полигонами думал, - решение практичное, но надеялся что-нибудь найти покрасивее.
Точки стоят прямо в вершинах - ставил с включённой привязкой.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: расстояние между точками на полилинии
по красивей требует еще большего программирования. я как-то писал и выкладывал программу, которая считает расстояние от начала линии до некоторой точки. на ней. кода для вычислений там было не много, но кода по оформлению был избыточен для такой простой задачи.
- Игорь Белов
- Гуру
- Сообщения: 2241
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1514
- Откуда: Казань
Re: расстояние между точками на полилинии
Boris прав, задачка без программирования не может быть решена сколько-нибудь изящно.
Что касается совпадения точек с узлами, это не проблема: можно ввести радиус допустимого отклонения как определяемый пользователем параметр.
Напомню, что существует более общая задача: для каждой точки найти её образ как ближайшую точку на полилинии вместе с расстоянием S этого образа от начала полилинии и расстоянием D между точкой и её образом. Похоже на топографическую створную съёмку, только задом наперёд. Процедура завершается сортировкой точек по значению S.
В контексте поставленной топикстартером задачи полезно выводить помимо D и S расстояние образа от ближайшего узла полилинии, которое вместе с D позволит отобрать точки, совпадающие с узлами. Остаётся посчитать разности S.
Что касается совпадения точек с узлами, это не проблема: можно ввести радиус допустимого отклонения как определяемый пользователем параметр.
Напомню, что существует более общая задача: для каждой точки найти её образ как ближайшую точку на полилинии вместе с расстоянием S этого образа от начала полилинии и расстоянием D между точкой и её образом. Похоже на топографическую створную съёмку, только задом наперёд. Процедура завершается сортировкой точек по значению S.
В контексте поставленной топикстартером задачи полезно выводить помимо D и S расстояние образа от ближайшего узла полилинии, которое вместе с D позволит отобрать точки, совпадающие с узлами. Остаётся посчитать разности S.
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: расстояние между точками на полилинии
Обязательно ли решать эту задачу в MI? Судя по ответам, в нее не встроено подходящего инструмента для работы. В то же время исходная задача довольно распространена, и у нее есть стандартное решение -- Linear referencing.
В GRASS, например, для решения этой задачи не понадобится программирования.
Если верить вики, подобные инструменты есть в ArcGIS.
Насколько я помню, подобное было еще и в ArcView (но я не работал с ней, пусть меня поправят, если я ошибаюсь).
В GRASS, например, для решения этой задачи не понадобится программирования.
Если верить вики, подобные инструменты есть в ArcGIS.
Насколько я помню, подобное было еще и в ArcView (но я не работал с ней, пусть меня поправят, если я ошибаюсь).
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: расстояние между точками на полилинии
Вот накопал в сети такую утилиту для MI --> DistanceMarker.
Может, поможет..
Может, поможет..
Редактор материалов, модератор форума
- Игорь Белов
- Гуру
- Сообщения: 2241
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1514
- Откуда: Казань
Re: расстояние между точками на полилинии
Предлагаю непрограммное решение: автотрассировка.
Кладём точки под слой полилиний. Создаём новую таблицу. Трассируем полилинию кусками от узла до узла между нужными точками. Пишем в поле длин ObjectLen().
Кладём точки под слой полилиний. Создаём новую таблицу. Трассируем полилинию кусками от узла до узла между нужными точками. Пишем в поле длин ObjectLen().
The purpose of computing is insight, not numbers
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя