2012-03-17 4 views
5

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

+2

У каждой из ваших рек есть единый идентификатор, который является общим? – Simbamangu

+0

Повторно отсканированные изменения в Q: «merge» и «groub-by» кажутся несколько второстепенными и касательными в отношении названия вопроса, когда оригинал был достаточным и достаточным. –

ответ

3

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

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

+1

Спасибо, но у меня есть несколько сотен таких ситуаций, и я должен повторить для 133 карт ... Наверное, мне действительно нужно получить плагин для этого. Любые предложения, где я мог бы начать искать? – LittleFish

-3

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

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

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

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

+2

Почему ВСЕ ЦАПЫ? трудно прочитать – dove

+1

ОП запросил решение QGIS, и вы, похоже, ссылаетесь на ArcGIS? – radek

4

Вы можете сделать это, используя библиотеку 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") 

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

1

Для тех, кто еще спотыкаясь на этот вопрос:

Вы можете использовать плагин 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 он настроен с помощью меню Vector->RoadGraph -> Settings, несмотря на то, что плагин ссылается на себя как «Самый короткий путь».

1

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

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

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

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

Смежные вопросы