У меня есть ломаная линия, которая разделена на несколько частей, и эти части не упорядочены так, что идентификатор вершины не соответствует графику ломаной линии.
Эта полилиния представляет собой линию автобуса, и мне нужно, чтобы график следовал по маршруту движения автобуса. Я хотел бы знать, как объединить мультипликаторы этой полилинии?
Я уже пробовал разделять и отменять разделение, а также разделять на отдельные части, объединять, объединять и т. Д., Но никто не дает мне желаемого результата.
Ответы:
По вашим тегам я вижу, что вы используете ArcGIS 10. Я использовал следующий метод для аналогичной задачи:
1) Используйте Multipart для одной части
2) Используйте Unsplit
Чтобы это работало (т. Е. Чтобы у вас были линии в правильном порядке), вам может потребоваться разбить линию на составляющие конечные точки, а затем изменить направление на основе атрибута (например, 1 = начало, 2 = конец) - вы можете использовать это для условного соединения только тех точек, которые отличаются (если 1 + 2, то создайте соединительные линии).
Если вы работаете с IDE, код для этого достаточно длинный, но я сделаю все возможное, чтобы помочь, если у вас есть конкретные вопросы.
источник
Мне пришлось делать то же самое довольно давно, используя AV 3.x и Avenue. Я быстро просмотрел код, но не смог его найти. Если я правильно помню, логика выглядела примерно так: (у меня также были автобусные остановки и терминалы как другой файл формы точки, поэтому я мог определить начальную и конечную части):
Чтобы получить первую часть:
2а. Получить часть, ближайшую к стартовому терминалу
2b. Получите расстояния начального и конечного узла этой части до начального терминала. Если начальная вершина самая близкая, добавьте эту часть к «отсортированной полилинии». Если это конец - переверните его, а затем добавьте.
... или что-то вроде того! :-)
Дайте мне знать, если это имеет смысл для вас, и я могу еще раз найти мой оригинальный код авеню.
источник
Я работал над проектом, похожим на это, я использовал ArcObjects. Моя цель состояла в том, чтобы соединить две соседние полилинии, если одна из ее конечных точек является отправной точкой для другой, чтобы превратить две короткие полилинии в одну полилинию. Мой процесс был:
Оба класса переопределяют методы «Equals» и «GetHashCode».
По этим процессам я сделал два словаря. После создания словарей я проверяю, содержат ли оба словаря одну и ту же точку, и в обоих словарях этот ключ имеет только одну особенность в списке объектов, затем я создал новую полилинию с этими двумя полилиниями и удалил две короткие полилинии.
Чтобы объединить две полилинии в одну:
источник
У меня была точно такая же проблема из-за обновлений, которые я сделал для автобусных маршрутов с помощью инструмента «Изменить форму». Dissolve, Merge и Unsplit не работали, потому что составные функции не совпадали.
Если вы еще этого не заметили, присмотритесь к вершинам, которые должны совпадать между вашими составными элементами. Расширьте, обрежьте или измените форму по мере необходимости, а затем используйте любой из инструментов, указанных выше.
источник