Как разбить полилинию на равные отрезки?
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 17 сен 2011, 23:18
- Репутация: 0
Как разбить полилинию на равные отрезки?
Здравствуйте! Подскажите, пожалуйста, утилиту или способ для решения следующей задачи в MapInfo: необходимо в автоматическом режиме разбить полилинию на равные отрезки. Заранее спасибо!
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: Как разбить полилинию на равные отрезки?
Если полилиния прямая то никаких проблем просто с помощью mapcad строишь перпендикуляр и смещаешь его параллельно на заданное расстояние, в точках пересечения разрезаешь полилинию.
Если же нет то без программирования не обойтись, надо покапать в сторону функций objectinfo, ObjectLen. Если интересно могу расписать поподробнее.
Если же нет то без программирования не обойтись, надо покапать в сторону функций objectinfo, ObjectLen. Если интересно могу расписать поподробнее.
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 17 сен 2011, 23:18
- Репутация: 0
Re: Как разбить полилинию на равные отрезки?
Спасибо за ответ!
Увы, полилиня кривая, изображает реку.
Поскольку в программировании не силён, прошу Вас, если это не затруднит, расписать подробнее.
Увы, полилиня кривая, изображает реку.
Поскольку в программировании не силён, прошу Вас, если это не затруднит, расписать подробнее.
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Как разбить полилинию на равные отрезки?
описание задачи недостаточно для ее решения, т.к. имеет две неоднозначности:
а) направление полилиний - от начала к концу и от конца к началу - это будут совершенно разные точки
б) что происходит при достижении границы отрезка составляющего отдельный сегмент линии - счет прекращается или переноситься на следующий отрезок
Кроме того, при достаточно больших границах карты, отрезки не смогут точно передать линию, т.к. их концы будут сильно отстоять от самой линии. Эта тема уже несколько раз обсуждалась на форуме.
а) направление полилиний - от начала к концу и от конца к началу - это будут совершенно разные точки
б) что происходит при достижении границы отрезка составляющего отдельный сегмент линии - счет прекращается или переноситься на следующий отрезок
Кроме того, при достаточно больших границах карты, отрезки не смогут точно передать линию, т.к. их концы будут сильно отстоять от самой линии. Эта тема уже несколько раз обсуждалась на форуме.
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Как разбить полилинию на равные отрезки?
Кроме того, полилиния в мапинфо может состоять из нескольких сегментов - как ветви у дерева. Тут решение просто не возможно предсказать.
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 17 сен 2011, 23:18
- Репутация: 0
Re: Как разбить полилинию на равные отрезки?
Boris, спасибо за замечания!
а) В данной задаче не имеет значения направление, лучше, если это будет от начала к концу.
б) данный пункт не совсем понял, возможно, нижеприведённые объяснения снимут данный вопрос.
Как Вы справедливо заметили, я не совсем верно обрисовал задачу.
Дано: полилиния (река);
Необходимо (устроит два варианта решения):
1) полилинию от точки начала до точки конца или наоборот разбить на n полилиний равных по длине (1 км).
2) автоматически на исходной полилинии через каждый километр поставить точку.
p.s. полилиния без ответвлений (просто кривая линия)
а) В данной задаче не имеет значения направление, лучше, если это будет от начала к концу.
б) данный пункт не совсем понял, возможно, нижеприведённые объяснения снимут данный вопрос.
Как Вы справедливо заметили, я не совсем верно обрисовал задачу.
Дано: полилиния (река);
Необходимо (устроит два варианта решения):
1) полилинию от точки начала до точки конца или наоборот разбить на n полилиний равных по длине (1 км).
2) автоматически на исходной полилинии через каждый километр поставить точку.
Прошу прощения, знаю..., не приветствуется... Перед созданием данной темы я постарался ознакомиться с уже существующими, однако приемлемого способа решения не нашёл. Я надеялся, Boris, что Вы мне поможете, поскольку в одной из тем (viewtopic.php?f=2&t=6844&p=37643&hilit= ... %B2#p37643), Вами было указано:Boris писал(а):Эта тема уже несколько раз обсуждалась на форуме
К сожалению, мне не удалось найти этого сообщения, но к счастью, Вы написали раньше, чем я успел к вам обратиться.Boris писал(а):Программа для разбивки полилинии приводилась мной на форуме MapInfo
p.s. полилиния без ответвлений (просто кривая линия)
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Как разбить полилинию на равные отрезки?
Вот программа на VisualBasic'е.
Запускать ее надо для каждой выделенной линии при работающей MapInfo. Она реализована для произвольного размещения точек. Для регулярного - необходимо этот регулярный список создать.
---
Теперь относительно б)
Простая ломаная линии состоит из отдельных отрезков. Как обрабатывается случай, когда остаток длины отрезка меньше шага расстановки вдоль линии? Возможны два варианта - точка ставится в конце отрезка, или от начала следующего отрезка откладывается остаток, который не удалось отложить на предыдущем отрезке. Во втором случае новая полилиния будет "срезать" углы между двумя отрезками исходной линии, а то и игнорировать некоторые из отрезков.
Были жалобы, что она не заработала на каких-то машинах Запускать ее надо для каждой выделенной линии при работающей MapInfo. Она реализована для произвольного размещения точек. Для регулярного - необходимо этот регулярный список создать.
---
Теперь относительно б)
Простая ломаная линии состоит из отдельных отрезков. Как обрабатывается случай, когда остаток длины отрезка меньше шага расстановки вдоль линии? Возможны два варианта - точка ставится в конце отрезка, или от начала следующего отрезка откладывается остаток, который не удалось отложить на предыдущем отрезке. Во втором случае новая полилиния будет "срезать" углы между двумя отрезками исходной линии, а то и игнорировать некоторые из отрезков.
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 17 сен 2011, 23:18
- Репутация: 0
Re: Как разбить полилинию на равные отрезки?
Boris, спасибо Вам!
К сожалению, программа не "увидела" мою MI. Однако я еще попробую на другой машине. Спасибо, утилита приятная!
Поскольку на данный момент задача всё ещё не решена, могу ли я спросить о других способах?
Что касается б) - в данном случае не критично. Подойдут оба варианта решения. Необходимости в очень точных результатах нет, погрешности длин в 5% приемлемы.
К сожалению, программа не "увидела" мою MI. Однако я еще попробую на другой машине. Спасибо, утилита приятная!
Поскольку на данный момент задача всё ещё не решена, могу ли я спросить о других способах?
Что касается б) - в данном случае не критично. Подойдут оба варианта решения. Необходимости в очень точных результатах нет, погрешности длин в 5% приемлемы.
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Как разбить полилинию на равные отрезки?
Задача проста для решения, но требует элементарного программирования. Самое очевидное решение - экспорт в текстовый формат MIF с последующим обходом.
- Olga_@@@
- Гуру
- Сообщения: 715
- Зарегистрирован: 24 фев 2009, 15:42
- Репутация: 0
- Ваше звание: городошник
- Откуда: Екатеринбург
- Контактная информация:
Re: Как разбить полилинию на равные отрезки?
Можно экспортировать в Автокад и проставить точки с помощью стандартных команды.
Для разметки объекта с помощью точек
Выберите меню Рисование > Точка > Разметить или в командной строке введите "разметить".
Выбрать отрезок, дугу, сплайн, окружность, эллипс или полилинию.
Ввести значение шага разметки с клавиатуры или указанием двух точек чертежа.
Точки размещаются на объекте с указанным шагом.
Ввод команды: РАЗМЕТИТЬ или _measure
Для разметки объекта с помощью точек
Выберите меню Рисование > Точка > Разметить или в командной строке введите "разметить".
Выбрать отрезок, дугу, сплайн, окружность, эллипс или полилинию.
Ввести значение шага разметки с клавиатуры или указанием двух точек чертежа.
Точки размещаются на объекте с указанным шагом.
Ввод команды: РАЗМЕТИТЬ или _measure
У меня из Apple дома только компот.
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 17 сен 2011, 23:18
- Репутация: 0
Re: Как разбить полилинию на равные отрезки?
Boris, скажите, пожалуйста, подразумевается программирование вне MI?
Прошу также, если не затруднит, пояснить значение "с последующим обходом". Спасибо!
Olga_@@@, благодарю Вас за вариант!
Прошу также, если не затруднит, пояснить значение "с последующим обходом". Спасибо!
Olga_@@@, благодарю Вас за вариант!
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Как разбить полилинию на равные отрезки?
Формат MIF содержит пространственные данные в виде простого (для простых линий) последовательного списка координат. Его можно потом открыть где угодно. В частности в Excel. После этого вычисляя разность координат между предыдущей и текущей строчкой по теореме Пифагора можно получить длину каждого отрезка. теперь надо обойти последовательно эти отрезки выставляя точки с соответствующими координатами вдоль отрезков. Получим пары координат для каждой точки. Т.к. мапинфо умеет кодировать точки из координат - это уже решение задачи.
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 17 сен 2011, 23:18
- Репутация: 0
Re: Как разбить полилинию на равные отрезки?
Boris, спасибо!
Теперь мне всё ясно! Очень вам благодарен!
Кстати, пробовал еще на двух компьютерах запустить PointsAlongLine, но увы...
К счастью, Вы раскрыли мне глаза, показав простейшее решение!
Теперь мне всё ясно! Очень вам благодарен!
Кстати, пробовал еще на двух компьютерах запустить PointsAlongLine, но увы...
К счастью, Вы раскрыли мне глаза, показав простейшее решение!
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Как разбить полилинию на равные отрезки?
Если задача разовая то возьмите AutoCAD (Bricscad и подобные), в них есть "поставить точки по полилинии с заданным шагом" или "разделить отрезок на N частей".
лангольеры под окном жрали время ом-ном-ном
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 17 сен 2011, 23:18
- Репутация: 0
Re: Как разбить полилинию на равные отрезки?
Спасибо, Mavka! А экспорт и дальнейшая работа в MapInfo после этого возможна?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей