Я могу получать карты из любого источника для моего проекта, и для алгоритма C ++, который я делаю, необходимо, чтобы алгоритм знал, где находятся дорожные развязки (узлы, где встречаются более двух сегментов дороги). Кроме того, на многих картах, которые я получаю, есть дороги, которые выходят за границы и ниже (то есть: дороги не связаны должным образом). Одним из способов решения проблемы является «очистка» дорожной сети с помощью Autocad. У меня есть следующие вопросы:
- Есть ли эффективный способ (любое программное обеспечение, которое может это сделать?) Получить мою карту в формате GML, который содержит информацию о дорожных развязках на карте? (возможно, есть тег GML, который говорит, что конкретный узел является соединением)
- Есть ли другой способ «очистить» дорожную сеть?
Коллеги предложили FME, но это включает в себя написание сценариев, и мы не уверены, будет ли сценарий достаточно гибким, чтобы обслуживать все карты. Единственный другой способ обнаружить перекрестки - это использовать грубую силу и определить, какие участки дороги имеют общие узлы. Поможет ли ArcGIS? (не использовал, но слышал об этом) Я уверен, что должен быть лучший способ ...
Ответы:
Если у вас есть дороги в пространственной форме, например, Shapefile, вы можете загрузить их в PostGIS и автоматически найти те, которые используют SQL-запрос. Я делал это раньше - оператор SQL предназначен для поиска для каждой дороги тех, которые пересекаются географически и создают узловую точку для каждого перекрестка.
Я постараюсь убрать это позже, но вот основной поток, который вы можете взять ...
Функции ST_ * - вот что делает эту работу в PostGIS
Ниже приведены только фрагменты, так как у меня нет времени, чтобы закончить, возможно, кто-то может отредактировать его, прежде чем я вернусь сюда ...
источник
Вы можете анализировать полилинии удивительным образом, используя буферы. Это обычно неэффективно - буферы создают много дополнительных вершин - но (a) это метод, доступный во многих ГИС (на основе вектора или растра), и (b) иногда он может производить информацию, которую иначе трудно получить.
В этом случае, буферизация дороги небольшим количеством, а затем буферизация отрицательным из того же количества оставляет маленькие «островки» вокруг всех поворотов и вокруг всех перекрестков. Это легко доказать геометрически.
Вот пример 10-миллиметрового буфера полилинии (серый) и его -10-метрового буфера (светло-красный) на карте шириной 650 м:
Теперь пересекаем исходный слой полилинии с этими островными полигонами, объединяем сегменты по идентификатору острова и подсчитываем куски:
Светло-желтые сегменты обозначают фрагменты с большим количеством, а темно-голубые сегменты обозначают фрагменты с низким количеством. Таким образом, мы (а) нашли все изгибы и пересечения (включая самопересечения) и ближние перекрестки (см. Крайний левый угол, где два отрезка не совсем сходятся)) и (б) дифференцировали изгибы от пересечений. Мы можем найти почти соединения, выбрав острова, которые содержат два или более соединенных сегмента: изгибы содержат только соединенные сегменты.
Из-за симметрии буферизации центроиды островков пересечения являются точками пересечения.
Одним из прекрасных аспектов этого стиля анализа является то, что ему все равно, как представлена базовая полилиния: это может быть одна особенность, это может быть одна особенность для каждого отрезка или что-то среднее между ними.
источник
Да, вы могли бы сделать это с FME наверняка. Есть много «преобразователей», которые обрабатывают очистку, пересечения и топологию; Я бы попробовал трансформатор TopologyBuilder в этом случае.
Все сценарии выполняются в графической среде, поэтому это очень просто сделать.
Вы всегда можете получить пробную версию с www.safe.com
(Раскрытие: Марк Ирландия, также известный как FME Evangelist, Safe Software Inc.)
источник
GRASS GIS имеет очень эффективные инструменты для очистки полигонов, как вы хотите, посмотрите на: http://grass.fbk.eu/grass62/manuals/html62_user/v.clean.html
источник
Сетевой аналитик Arcgis, который вы можете получить с помощью бесплатной пробной версии, делает это менее чем за 10 секунд и всего за несколько кликов.
источник
Процесс можно выполнить в ArcGIS с помощью сетевого аналитика.
В ArcGIS есть и другой путь: вы можете выполнить следующие шаги: «Arctoolbox» → «Инструменты управления данными» → «Функции» → «Вершины точек к точкам», и там вы можете делать то, что вам нужно.
источник