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

MapInfo, MapBasic
Qwercus
Новоприбывший
Сообщения: 14
Зарегистрирован: 17 сен 2011, 23:18
Репутация: 0

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

Сообщение Qwercus » 02 окт 2011, 02:07

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

Клим
Интересующийся
Сообщения: 24
Зарегистрирован: 29 авг 2011, 16:51
Репутация: 1

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

Сообщение Клим » 03 окт 2011, 06:30

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

Qwercus
Новоприбывший
Сообщения: 14
Зарегистрирован: 17 сен 2011, 23:18
Репутация: 0

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

Сообщение Qwercus » 03 окт 2011, 13:11

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

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

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

Сообщение Boris » 03 окт 2011, 13:15

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

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

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

Сообщение Boris » 03 окт 2011, 13:50

Кроме того, полилиния в мапинфо может состоять из нескольких сегментов - как ветви у дерева. Тут решение просто не возможно предсказать.

Qwercus
Новоприбывший
Сообщения: 14
Зарегистрирован: 17 сен 2011, 23:18
Репутация: 0

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

Сообщение Qwercus » 03 окт 2011, 14:14

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

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

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

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

Сообщение Boris » 03 окт 2011, 17:57

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

Qwercus
Новоприбывший
Сообщения: 14
Зарегистрирован: 17 сен 2011, 23:18
Репутация: 0

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

Сообщение Qwercus » 03 окт 2011, 19:05

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

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

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

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

Сообщение Boris » 04 окт 2011, 10:39

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

Аватара пользователя
Olga_@@@
Гуру
Сообщения: 715
Зарегистрирован: 24 фев 2009, 15:42
Репутация: 0
Ваше звание: городошник
Откуда: Екатеринбург
Контактная информация:

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

Сообщение Olga_@@@ » 04 окт 2011, 13:36

Можно экспортировать в Автокад и проставить точки с помощью стандартных команды.

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

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

Ввод команды: РАЗМЕТИТЬ или _measure
У меня из Apple дома только компот.

Qwercus
Новоприбывший
Сообщения: 14
Зарегистрирован: 17 сен 2011, 23:18
Репутация: 0

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

Сообщение Qwercus » 04 окт 2011, 22:41

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

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

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

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

Сообщение Boris » 05 окт 2011, 11:36

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

Qwercus
Новоприбывший
Сообщения: 14
Зарегистрирован: 17 сен 2011, 23:18
Репутация: 0

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

Сообщение Qwercus » 05 окт 2011, 19:44

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

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

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

Сообщение Mavka » 06 окт 2011, 09:56

Если задача разовая то возьмите AutoCAD (Bricscad и подобные), в них есть "поставить точки по полилинии с заданным шагом" или "разделить отрезок на N частей".
лангольеры под окном жрали время ом-ном-ном

Qwercus
Новоприбывший
Сообщения: 14
Зарегистрирован: 17 сен 2011, 23:18
Репутация: 0

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

Сообщение Qwercus » 06 окт 2011, 12:59

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

Ответить

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

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

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