Объединить несколько отрезков в одну линию - ГИС - PullRequest
9 голосов
/ 17 марта 2012

У меня есть карта, которую я оцифровал и преобразовал в векторный слой (только реки).Проблема состоит в том, что векторизация создала большое количество сегментов для каждой реки, которые проявляются как разные объекты (каждый может иметь несколько отрезков прямой линии, но они не охватывают целые реки).То, что я ищу, - это инструмент для объединения в одну особенность (я полагаю, полилинии) всех сегментов, крайние значения которых находятся на заданном расстоянии.Я использую QGis и плагин GRASS.Я пробовал v.clean.snap, v.build.polylines, но пока не удалось объединить строки.Любая помощь будет принята с благодарностью!

Ответы [ 5 ]

5 голосов
/ 21 июля 2013

Вы можете сделать это, используя библиотеку GEOS на вашем языке программирования и, возможно, также командную строку.В моем случае я делал это в R, используя библиотеку rgeos:

require(rgdal)
require(rgeos)
lines <- readOGR("f:/dir", "itineraris")
# grouping line features by lines$ITINERARI
lines2 <- gLineMerge(lines, byid = lines$ITINERARI, id = lines$ITINERARI)
writeOGR(lines2, "f:/dir", "itineraris_merged", driver="ESRI Shapefile")

Будьте осторожны: из примечания в документации "специально он соединяет отрезкис пересекающимися конечными точками " кажется, что линейные объекты должны быть последовательными - однако неясно, относится ли это также к случаю, когда вы объединяете по идентификаторам.

3 голосов
/ 25 июня 2014

Для всех, кто сталкивается с этим вопросом:

Вы можете использовать плагин Roadgraph (Кратчайший путь) или скрипт PointsToRoute.Выберите точки на любом конце (или в случае Points2Route добавьте дополнительные точки, чтобы указать их из нескольких путей), а затем экспортируйте в его собственный слой.

Что касается 133 карт ... Я изменил PointsToRouteскрипт для аналогичной тяжелой ситуации, чтобы автоматически проходить через слой линий и находить маршруты между их конечными точками.Я уберу его и посмотрю, смогу ли я опубликовать его на github в ближайшее время.

PointsToRoute: https://github.com/anitagraser/QGIS-Processing-tools/blob/master/1.1/scripts/points_to_route.py

ShortestPath (Roadgraph): это включено менеджером плагинов QGIS.Имейте в виду, что в новейших версиях QGIS он настраивается с помощью меню «Вектор» -> RoadGraph -> Настройки, несмотря на то, что плагин называет себя «Кратчайший путь».

3 голосов
/ 22 марта 2012

Я бы предложил выбрать части линии вручную, а затем использовать инструмент «Слияние» (находится на расширенной панели инструментов редактирования).

Вы также можете задать такие вопросы на http://gis.stackexchange.com

2 голосов
/ 15 января 2016

Очень поздний ответ, который может быть полезен другим людям:

Я столкнулся с той же проблемой и разработал плагин QGIS для ее решения. Он автоматически объединяет несколько соединенных линий (то есть линий, которые разделяют конечную точку) в меньший набор более длинных линий. Тип выходного слоя - Line, а не PolyLine. Слияние может быть основано на одном из этих двух критериев:

  • Длина: сегмент объединяется с самым длинным соседом.
  • Выравнивание: сегмент объединяется со своим лучшим выровненным соседом. Я думаю, что этот критерий является наиболее подходящим для речной сети.

Этот плагин называется MergeLines ( полная документация здесь ), вы можете найти его в общедоступном репозитории QGIS. Работа еще продолжается, не стесняйтесь предлагать новые функции.

0 голосов
/ 17 декабря 2012

Вы можете использовать инструмент "DISSOLVE" (ARC TOOLBOX). Это объединит их всех в один сегмент.

Затем вы можете экспортировать узлы (только обычные), это точки пересечения.

Затем вы можете разделить расторгнутую линию на узлы. Это по крайней мере предоставит вам разделение векторных объектов только на пересекающихся точках.

По крайней мере, это шаг вперед.

...