Слияние линий с немного разными конечными точками в QGIS


22

В QGIS у меня есть две строки. Конечные точки находятся рядом друг с другом, но не совсем выровнены. Я хотел бы превратить две линии в одну, с двумя конечными точками, объединенными в средние точки.

Самое близкое, что я смог сделать, это «Объединить выбранные функции». Это дает мне одну особенность, но она состоит из двух непересекающихся линий - между конечными точками нет никакой линии.

Я ищу что-то похожее на функцию «Соединить пути» в Illustrator («Объект»> «Пути»> «Присоединиться»).

QGIS делает это?

Ответы:


12

Быстрый ответ: нет! Нет такого инструмента, который бы выполнял эту операцию непосредственно на слое (плагин «Соединить две линии» требует пересечения).

Вы можете сделать это для очень простого слоя, превратив линии в точки (извлекая узлы), затем соединяя их с points2one (вывод строки), но это будет НАМНОГО медленнее, чем простое редактирование вручную:

  1. Убедитесь, что для линейного слоя включена привязка (Настройки | Параметры привязки ...) (мне подходит 5 пикселей).
  2. Создайте новую линию от одной конечной точки к другой.
  3. Выделите все три линии (две исходные линии + новая) и объедините их («Редактировать | Объединить выбранные объекты» или кнопку панели инструментов).

1
Спасибо. У меня было только несколько строк для слияния, так что это было быстро и легко. (Ответ Михаэля Маркиеты казался лучше подходящим для сложных ситуаций.)
Эван

14

Вы можете сделать это с помощью комбинации QGIS и GRASS.

  1. Импортируйте векторный слой в набор карт GRASS (Grass | File> Import Vector Data)
  2. Откройте набор карт в QGIS (QGIS | Плагины> GRASS> Открыть набор карт)
  3. Добавьте векторный слой из набора карт GRASS в свой проект QGIS (QGIS | Плагины> GRASS> Добавить векторный слой GRASS)
  4. Используйте v.clean.snap (QGIS | Плагины> GRASS> Открыть инструменты GRASS> Список модулей> v.clean.snap)

Отрегулируйте «порог» v.clean.snap, чтобы добиться правильной привязки к вершине во всей области исследования.


10

Я предполагаю, что вы хотите соединить два отрезка в одну линию. введите описание изображения здесь

Вот как я это сделал ...

  • Разрешить редактирование.
  • Включить привязку (Настройки -> Параметры привязки ...) введите описание изображения здесь
  • Выберите инструмент узла узла.введите описание изображения здесь
  • Дважды щелкните близко к концу одной из линий, чтобы добавить узел. введите описание изображения здесь
  • Перетащите узел в конец, чтобы привязать его к концу другой линии введите описание изображения здесь
  • Выберите обе строки
  • Объединить их атрибуты (вы не можете сделать одну строку, если они имеют разные атрибуты)введите описание изображения здесь
  • Объединить две функциивведите описание изображения здесь

Это должно привести к одной строке. введите описание изображения здесь


Все хорошо. Но как насчет набора данных из 22 000 строк? Я не могу делать это вручную ...
FaCoffee


3

Если вы имеете в виду, что ваша единственная функция состоит из MULTILINESTRING вместо одной LINESTRING, то вы можете легко это исправить, если вы используете базу данных Postgis:

update your_table set your_geo_column = ST_LineMerge(your_geo_column);

Если вы хотите, чтобы это делала только 1 строка, вы, конечно, должны добавить WHERE id = your_row_id.


2

Также кто-то может попробовать:

  1. сохранить .shp как .dxf
  2. открыть .dxf с помощью DraftSight
  3. соединить полилинии
  4. заново открыть .dxf с помощью qgis и сохранить как .shp
  5. из меню Вектор -> Инструменты геометрии -> Линии на полигоны

2

Я только что сделал это с QGIS 3.4.0, используя плагин Join Multiple Lines, упомянутый выше tnagel (устанавливается в меню Vector> Join Multiple Lines). Работал хорошо, чтобы объединить около 60 фрагментов трассы в около 20 трасс трассы. Чем больше у вас фрагментов и чем больше площадь, которую они покрывают, тем менее практичным это является, поскольку вам приходится следить за результатами проблем (у tnagel могла быть одна из проблем, которые я описал).

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

Кроме того, линии, по-видимому, могут быть направленными. Таким образом, вы должны следить (например), чтобы самый южный конец линии A не соединялся с самым южным концом линии B под ним (еще одна длинная прямая линия, где вы этого не хотите).

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

Хорошая вещь об этом - ваши изменения / правки сохраняются в существующем слое, поэтому нет необходимости сохранять результаты в виде нового шейп-файла (сначала сделайте резервную копию).

Я постоянно удивляюсь работе, проделанной разработчиками ядра и плагинов QGIS. Показывает, что умные конструктивные люди могут делать, когда решают работать вместе. Спасибо!


0

Использование OpenJUMP (версия Plus):

  1. Файл> Открыть файл
  2. Плагины> Топология> Очистка топологии сети ...
  3. Щелкните правой кнопкой мыши на новом слое (исправлено): Сохранить набор данных как ....

Это результат: введите описание изображения здесь


0

В моем случае линии были в разных слоях и с разными атрибутами. Я слил слои с помощью mmqgis, а затем соединил линии на следующем шаге с техникой привязки и слияния линий.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.