У меня есть набор линий, представляющих автобусные линии. Некоторые линии перекрываются и проходят по одним и тем же дорогам.
Я могу извлечь узлы.
Однако я заинтересован в извлечении только таких переходов:
Как я могу это сделать? Я ищу способы с QGIS или Python.
Я попробовал метод пересечения из GDAL Python, но это в основном возвращает мне только вершины.
Метод пересечения линий из QGIS возвращает мне пересечения, если две линии пересекаются. Однако в том случае, если две автобусные линии проходят большую часть своего маршрута по одной и той же дороге, это не дает мне точки, где они объединяются.
Ответы:
Узлы:
Вы хотите две вещи, конечные точки полилиний (без промежуточных узлов) и точки пересечения. Есть дополнительная проблема, некоторые конечные точки полилиний также являются точками пересечения:
Решением является использование Python и модулей Shapely и Fiona.
1) Прочтите шейп-файл:
2) Найти конечные точки линий ( как получить конечные точки ломаной линии ? ):
3) Вычислить пересечения (перебирая пары геометрий в слое с помощью модуля itertools ). Результатом некоторых пересечений являются MultiPoints, и мы хотим получить список точек:
4) Устраните дубликаты между конечными точками и точками пересечения (как вы можете видеть на рисунках)
5) Сохраните полученный шейп-файл
Конечный результат:
Сегменты линии
Если вы хотите также отрезки между узлами, вам необходимо «спланировать» ( планарный график , ребра не пересекаются) ваш шейп-файл. Это можно сделать с помощью функции unary_union в Shapely
источник
result = endpts.extend([pt for pt in inters if pt not in endpts])
так как кажется, что.extend
метод модифицируетсяendpt
. В моем случаеresult = None
после этой операции. Это то,endpts
что в итоге содержит результат