Объединение отрезков в единую линию
-
- Активный участник
- Сообщения: 121
- Зарегистрирован: 23 ноя 2005, 16:57
- Репутация: 6
- Откуда: Москва
Объединение отрезков в единую линию
Здравствуйте!
Подскажите как лучше и правильнее решить следующую задачу:
есть линия состоящая из множества отрезков, причем конечный узел одного отрезка не обязательно точно попадает в начальный узел следующего.
нужно объеденить отрезки так чтобы они стоставляли единую линию (один объект в слое) и при этом начальный узел линий оказался бы либо на одном, либо на другом ее крае, а не в центре.
Заранее спасибо.
Подскажите как лучше и правильнее решить следующую задачу:
есть линия состоящая из множества отрезков, причем конечный узел одного отрезка не обязательно точно попадает в начальный узел следующего.
нужно объеденить отрезки так чтобы они стоставляли единую линию (один объект в слое) и при этом начальный узел линий оказался бы либо на одном, либо на другом ее крае, а не в центре.
Заранее спасибо.
-
- Гуру
- Сообщения: 852
- Зарегистрирован: 15 сен 2005, 13:19
- Репутация: 6
- Откуда: москва
- Контактная информация:
задачка не такая уж простая...
вам нужно, разумеется автоматически: вручную вы и сами с усами 
пара наводящих вопросов:
1. порядок отрезков в линии известен?
2. есть ли критерий отличия начала линии от конца?
3. есть ли принцип отбора точек-дубликатов на стыках (например, берется всегда предыдущая).
И - когда приходилось такое решать, в любом случае удобно разбить все отрезки на точки вертексов. Сборку можно делать любой программой-сборщиком (линий из точек). О них есть здесь.
http://geofaq.narod.ru/1pnts2line.htm

пара наводящих вопросов:
1. порядок отрезков в линии известен?
2. есть ли критерий отличия начала линии от конца?
3. есть ли принцип отбора точек-дубликатов на стыках (например, берется всегда предыдущая).
И - когда приходилось такое решать, в любом случае удобно разбить все отрезки на точки вертексов. Сборку можно делать любой программой-сборщиком (линий из точек). О них есть здесь.
http://geofaq.narod.ru/1pnts2line.htm
-
- Активный участник
- Сообщения: 121
- Зарегистрирован: 23 ноя 2005, 16:57
- Репутация: 6
- Откуда: Москва
Здравствуйте!
Как раз ручками и не получается (исходно трасса видимо была нарисована в Autocad, потом перегнана в АРК)
Я пытаюсь последовательно обединить отрезки, так вот в какой-то момент последний узел оказывается в месте слияния двух отрезков, либо при использовании flip в начале, но никак не в конце
1. порядок отрезков в линии известен?
нет но его можно задать (всетаки отрезков около 30, а точке при разбиении линии на точки получается около 4500 и пронумеровать их значительно сложнее)
2. есть ли критерий отличия начала линии от конца?
Можно задать как самый северный узел линии.
3. есть ли принцип отбора точек-дубликатов на стыках (например, берется всегда предыдущая).
По моему для моей задачи это не важно, можно брать предыдущую, можно последующую.
Разбила линию на точки (получилось порядка 4500). Буду думать как пронумеровать. К сожалению координаты не подходят
Маша.
Как раз ручками и не получается (исходно трасса видимо была нарисована в Autocad, потом перегнана в АРК)
Я пытаюсь последовательно обединить отрезки, так вот в какой-то момент последний узел оказывается в месте слияния двух отрезков, либо при использовании flip в начале, но никак не в конце

1. порядок отрезков в линии известен?
нет но его можно задать (всетаки отрезков около 30, а точке при разбиении линии на точки получается около 4500 и пронумеровать их значительно сложнее)
2. есть ли критерий отличия начала линии от конца?
Можно задать как самый северный узел линии.
3. есть ли принцип отбора точек-дубликатов на стыках (например, берется всегда предыдущая).
По моему для моей задачи это не важно, можно брать предыдущую, можно последующую.
Разбила линию на точки (получилось порядка 4500). Буду думать как пронумеровать. К сожалению координаты не подходят
Маша.
-
- Участник
- Сообщения: 76
- Зарегистрирован: 24 фев 2006, 14:33
- Репутация: 0
Re: задачка не такая уж простая...
А вот между прочим - как раз вручную-то - как сделать?geologic писал(а):вам нужно, разумеется автоматически: вручную вы и сами с усами![]()
Формально линия при combine становится единым объектом, но фактически после этого ее снова можно растащить кусками по углам.
Ненужный кусок можно пытаться удалить "поточечно" - но процедура останавливается, когда точек остается 2. Далее удалить нельзя.
И выделить зловредный кусок нельзя (чтобы удалить) - он же формально одно целое с остальными, выделяются все вместе.
Точно такая же проблема иногда возникает с полигоном - когда на нем "захлестывается петля" - вручную с ней сделать ничего не удается (ну, кроме как сделать малозаметной. Или отделить зловредный кусок "с мясом", удалить его, а потом залечивать рану).
Тут не сказали про что говорится. Я имею в виду АркВъю-330
-
- Активный участник
- Сообщения: 121
- Зарегистрирован: 23 ноя 2005, 16:57
- Репутация: 6
- Откуда: Москва
-
- Завсегдатай
- Сообщения: 406
- Зарегистрирован: 14 авг 2006, 16:21
- Репутация: 25
-
- Активный участник
- Сообщения: 121
- Зарегистрирован: 23 ноя 2005, 16:57
- Репутация: 6
- Откуда: Москва
to tsarev
Да я просто взяла и выделила необходимые отрезки и объединила их.
Перед этим я:
- убрала разрывы (точнее микронесовпадения, т.к. больших разрывов в линии у меняне было и на выходном масштабе карты она читалась как единая линия, а вот при значительном увеличении вылезало, что последний узел одного отрезка не точно проходится в узел следующего за ним отрезка). Просто точно соединила последний узел предыдущего отрезка с первым последующего (snapping).
- перевернула все отрезки с помощью flip в нужном направлении и соединила.
Маша.
ЗЫ: отрезков у меня было околок 30, а вот если разбить их на точки то точек около 4500, так что для меня получалось, что легче работать с отрезками.
Да я просто взяла и выделила необходимые отрезки и объединила их.
Перед этим я:
- убрала разрывы (точнее микронесовпадения, т.к. больших разрывов в линии у меняне было и на выходном масштабе карты она читалась как единая линия, а вот при значительном увеличении вылезало, что последний узел одного отрезка не точно проходится в узел следующего за ним отрезка). Просто точно соединила последний узел предыдущего отрезка с первым последующего (snapping).
- перевернула все отрезки с помощью flip в нужном направлении и соединила.
Маша.
ЗЫ: отрезков у меня было околок 30, а вот если разбить их на точки то точек около 4500, так что для меня получалось, что легче работать с отрезками.
-
- Завсегдатай
- Сообщения: 406
- Зарегистрирован: 14 авг 2006, 16:21
- Репутация: 25
-
- Гуру
- Сообщения: 852
- Зарегистрирован: 15 сен 2005, 13:19
- Репутация: 6
- Откуда: москва
- Контактная информация:
Если отрезки объединены, и объединены правильно, то физически пересобрать их несложно - разбиваем на точки и обратно в линию, дело нескольких минут, если не секунд. Есть даже (кажется) пересборка автоматом, типа скрипт какой-то. Сложно все, что ДО этого, а) нумерация, если через точки б) края отрезков в обоих вариантах сборки. По физическому порядку не обязательно делать через Эксель, многие инструменты пользуются им по умолчанию, например GeoWizards в AM. Для AV можно с ходу такой скрипт предложить: http://geofaq.narod.ru/tools/alexp/pz2lz.ave. Правда, делает трезмерную линию, но ее упростить элементарно. да и это лишь пример, скриптов полно - текст сборки на Avenue, кстати, всего несколько строк.
Края отрезков сшить задача довольно интересная. Если не брать случай, когда края далеко - а там все просто при пересборке - то по сути мы имеем точки-дубликаты, и надо их как-то проредить. дубликаты в понимании БД: то есть две версии одного объекта. Универсальный способ - найти такие пары точек (опять-таки на это масса скриптов), и поудалять любую из пары. Потом сборка линии идет уже без проблем. НО: удаление из пары некорректно ни для одной точки, и напрашивается классический способ поглощения дубликатов:
Аггрегация таких точек, т.е. в данном случае простановка средней (по координатам). Способ для этого любознательный гисовец и сам сообразит. Любопытным и нетерпеливым могу рассказать - уже разбирали в свое время этот момент на DataPlus (правда, в переписке - но она сохранилась). Кстати, способ намного эффективней любого скрипта, и уж тем более ручного редактирования отрезков. Так что алгоритм инструмента, считайте, есть - дело за обкаткой.
Да, сомкнуть отрезки можно используя топологические средства - например, как это ни странно, Build Polygons подойдет, только Tolerance верно настроить.
Края отрезков сшить задача довольно интересная. Если не брать случай, когда края далеко - а там все просто при пересборке - то по сути мы имеем точки-дубликаты, и надо их как-то проредить. дубликаты в понимании БД: то есть две версии одного объекта. Универсальный способ - найти такие пары точек (опять-таки на это масса скриптов), и поудалять любую из пары. Потом сборка линии идет уже без проблем. НО: удаление из пары некорректно ни для одной точки, и напрашивается классический способ поглощения дубликатов:
Аггрегация таких точек, т.е. в данном случае простановка средней (по координатам). Способ для этого любознательный гисовец и сам сообразит. Любопытным и нетерпеливым могу рассказать - уже разбирали в свое время этот момент на DataPlus (правда, в переписке - но она сохранилась). Кстати, способ намного эффективней любого скрипта, и уж тем более ручного редактирования отрезков. Так что алгоритм инструмента, считайте, есть - дело за обкаткой.
Да, сомкнуть отрезки можно используя топологические средства - например, как это ни странно, Build Polygons подойдет, только Tolerance верно настроить.
Последний раз редактировалось geologic 12 окт 2006, 15:55, всего редактировалось 1 раз.
-
- Активный участник
- Сообщения: 121
- Зарегистрирован: 23 ноя 2005, 16:57
- Репутация: 6
- Откуда: Москва
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 5 гостей