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

Как разбить полилинию на равные отрезки?

Добавлено: 02 окт 2011, 02:07
Qwercus
Здравствуйте! Подскажите, пожалуйста, утилиту или способ для решения следующей задачи в MapInfo: необходимо в автоматическом режиме разбить полилинию на равные отрезки. Заранее спасибо!

Re: Как разбить полилинию на равные отрезки?

Добавлено: 03 окт 2011, 06:30
Клим
Если полилиния прямая то никаких проблем просто с помощью mapcad строишь перпендикуляр и смещаешь его параллельно на заданное расстояние, в точках пересечения разрезаешь полилинию.
Если же нет то без программирования не обойтись, надо покапать в сторону функций objectinfo, ObjectLen. Если интересно могу расписать поподробнее.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 03 окт 2011, 13:11
Qwercus
Спасибо за ответ!
Увы, полилиня кривая, изображает реку.
Поскольку в программировании не силён, прошу Вас, если это не затруднит, расписать подробнее.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 03 окт 2011, 13:15
Boris
описание задачи недостаточно для ее решения, т.к. имеет две неоднозначности:
а) направление полилиний - от начала к концу и от конца к началу - это будут совершенно разные точки
б) что происходит при достижении границы отрезка составляющего отдельный сегмент линии - счет прекращается или переноситься на следующий отрезок
Кроме того, при достаточно больших границах карты, отрезки не смогут точно передать линию, т.к. их концы будут сильно отстоять от самой линии. Эта тема уже несколько раз обсуждалась на форуме.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 03 окт 2011, 13:50
Boris
Кроме того, полилиния в мапинфо может состоять из нескольких сегментов - как ветви у дерева. Тут решение просто не возможно предсказать.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 03 окт 2011, 14:14
Qwercus
Boris, спасибо за замечания!
а) В данной задаче не имеет значения направление, лучше, если это будет от начала к концу.
б) данный пункт не совсем понял, возможно, нижеприведённые объяснения снимут данный вопрос.
Как Вы справедливо заметили, я не совсем верно обрисовал задачу.
Дано: полилиния (река);
Необходимо (устроит два варианта решения):
1) полилинию от точки начала до точки конца или наоборот разбить на n полилиний равных по длине (1 км).
2) автоматически на исходной полилинии через каждый километр поставить точку.
Boris писал(а):Эта тема уже несколько раз обсуждалась на форуме
Прошу прощения, знаю..., не приветствуется... Перед созданием данной темы я постарался ознакомиться с уже существующими, однако приемлемого способа решения не нашёл. Я надеялся, Boris, что Вы мне поможете, поскольку в одной из тем (viewtopic.php?f=2&t=6844&p=37643&hilit= ... %B2#p37643), Вами было указано:
Boris писал(а):Программа для разбивки полилинии приводилась мной на форуме MapInfo
К сожалению, мне не удалось найти этого сообщения, но к счастью, Вы написали раньше, чем я успел к вам обратиться.

p.s. полилиния без ответвлений (просто кривая линия)

Re: Как разбить полилинию на равные отрезки?

Добавлено: 03 окт 2011, 17:57
Boris
Вот программа на VisualBasic'е.
Pack2.rar
(2.85 МБ) 983 скачивания
Были жалобы, что она не заработала на каких-то машинах :(
Запускать ее надо для каждой выделенной линии при работающей MapInfo. Она реализована для произвольного размещения точек. Для регулярного - необходимо этот регулярный список создать.
---
Теперь относительно б)
Простая ломаная линии состоит из отдельных отрезков. Как обрабатывается случай, когда остаток длины отрезка меньше шага расстановки вдоль линии? Возможны два варианта - точка ставится в конце отрезка, или от начала следующего отрезка откладывается остаток, который не удалось отложить на предыдущем отрезке. Во втором случае новая полилиния будет "срезать" углы между двумя отрезками исходной линии, а то и игнорировать некоторые из отрезков.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 03 окт 2011, 19:05
Qwercus
Boris, спасибо Вам!
К сожалению, программа не "увидела" мою MI. Однако я еще попробую на другой машине. Спасибо, утилита приятная!

Поскольку на данный момент задача всё ещё не решена, могу ли я спросить о других способах?
Что касается б) - в данном случае не критично. Подойдут оба варианта решения. Необходимости в очень точных результатах нет, погрешности длин в 5% приемлемы.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 04 окт 2011, 10:39
Boris
Задача проста для решения, но требует элементарного программирования. Самое очевидное решение - экспорт в текстовый формат MIF с последующим обходом.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 04 окт 2011, 13:36
Olga_@@@
Можно экспортировать в Автокад и проставить точки с помощью стандартных команды.

Для разметки объекта с помощью точек

Выберите меню Рисование > Точка > Разметить или в командной строке введите "разметить".
Выбрать отрезок, дугу, сплайн, окружность, эллипс или полилинию.
Ввести значение шага разметки с клавиатуры или указанием двух точек чертежа.
Точки размещаются на объекте с указанным шагом.

Ввод команды: РАЗМЕТИТЬ или _measure

Re: Как разбить полилинию на равные отрезки?

Добавлено: 04 окт 2011, 22:41
Qwercus
Boris, скажите, пожалуйста, подразумевается программирование вне MI?
Прошу также, если не затруднит, пояснить значение "с последующим обходом". Спасибо!

Olga_@@@, благодарю Вас за вариант!

Re: Как разбить полилинию на равные отрезки?

Добавлено: 05 окт 2011, 11:36
Boris
Формат MIF содержит пространственные данные в виде простого (для простых линий) последовательного списка координат. Его можно потом открыть где угодно. В частности в Excel. После этого вычисляя разность координат между предыдущей и текущей строчкой по теореме Пифагора можно получить длину каждого отрезка. теперь надо обойти последовательно эти отрезки выставляя точки с соответствующими координатами вдоль отрезков. Получим пары координат для каждой точки. Т.к. мапинфо умеет кодировать точки из координат - это уже решение задачи.

Re: Как разбить полилинию на равные отрезки?

Добавлено: 05 окт 2011, 19:44
Qwercus
Boris, спасибо!
Теперь мне всё ясно! Очень вам благодарен!
Кстати, пробовал еще на двух компьютерах запустить PointsAlongLine, но увы...
К счастью, Вы раскрыли мне глаза, показав простейшее решение!

Re: Как разбить полилинию на равные отрезки?

Добавлено: 06 окт 2011, 09:56
Mavka
Если задача разовая то возьмите AutoCAD (Bricscad и подобные), в них есть "поставить точки по полилинии с заданным шагом" или "разделить отрезок на N частей".

Re: Как разбить полилинию на равные отрезки?

Добавлено: 06 окт 2011, 12:59
Qwercus
Спасибо, Mavka! А экспорт и дальнейшая работа в MapInfo после этого возможна?