Объединить атрибуты точечного и линейного слоя по местоположению (ближайшему расстоянию) в QGIS

13

Моя проблема заключается в следующем: у меня есть линия shp (целевой слой) и точка shp (объединить слой). второй (точечный слой) содержит атрибут, который я хочу соединить со слоем линии на основе ближайшего расстояния до линии. Точки и линии не пересекаются

Я могу сделать это с помощью ArcGIS и пространственного соединения (опция соответствия: ближайший), но я не знаю, как этого добиться в QGIS.

Миха Пожауко
источник
3
Есть инструмент, чтобы сделать Регистрация по местоположению, но у него нет опции "ближайший". Я не знаю, есть ли обходной путь. В целом, пожалуйста, оцените поддержку ваших недостающих, любимых опций / инструментов, и именно так пользователи могут помочь росту этой части программного обеспечения.
Джованни Манги

Ответы:

8

Я не думаю, что для этого есть «основная» функция QGIS. Однако установите плагин MMQGIS и воспользуйтесь инструментом «Расстояние до ступицы». Выберите ваши точки в качестве слоя «Исходные точки», а ваши линии в качестве «Слоя концентраторов назначения» и установите «Тип формы вывода» на «Линия на концентратор». Это даст вам шейп-файл линий (с длиной), которые соединяют ближайшие объекты. Удобно также добавить идентификатор ближайшего объекта в таблицу атрибутов.

Редактировать / Комментарий: этот подход хорошо работает, если точек меньше, чем линий, или же ситуация "точка-точка" один на один. Наличие большего количества точек, чем линий усложняет ситуацию. Инструмент «Расстояние до центра» добавляет идентификатор линейного объекта в таблицу атрибутов точек как «HubName» вместе с расстоянием между точкой и центром линии как «HubDist». Если точек больше, чем линий, требуется дополнительная работа для определения в каждом подмножестве точек (тех нескольких записей, связанных с каждым линейным концентратором), какая из них является ближайшей к каждой линии, и / или какая из них с требуемым набором атрибуты, чтобы присоединиться к линии.

Даррен Коуп
источник
это должно быть помечено как ответ при условии незначительного редактирования «линий» v «точек»
Вилли
1
«Расстояние до центра» не является правильным инструментом, если критерием является «ближайшее расстояние до линии». Код mmqgis показывает, что расстояние до ступицы использует приближение геометрии «ступицы». Расчет расстояния (mmqgis_distance) принимает две точки в качестве параметров. Вот код, который выполняет приближение геометрии концентратора в mmqgis_library.py: "feature.geometry (). BoundingBox (). Center ()". Это означает, что центр ограничительной рамки геометрии используется вместо реальной геометрии. Поэтому, если критерием является «самое близкое расстояние до линии», GRASS v.distance или плагин NNJoin являются более подходящими.
Håvard Tveite
5

Для этого можно использовать функцию GRASS v.distance . В QGIS вы можете получить доступ к функции через плагин GRASS ( версия обработки в настоящее время не работает). NNJoin плагин QGIS может быть более простой альтернативой.

Ховард Твите
источник
3

Плагин NNJoin никогда не подводил меня и хорошо работает с большими наборами данных .

Плагины> Установить: NNJoin> NNJoin> выбрать входной слой и присоединиться к слою> Затем нажмите присоединиться.

Изучите результаты нового выходного слоя с таблицей атрибутов. Предупреждение: убедитесь, что оба ваших слоя используют одну и ту же пространственную проекцию, иначе ваши результаты будут пустыми.

Мэтью Бэйли
источник
2

В 2019 году это может быть возможно с помощью инструмента QGIS 3 Zanzibar «Объединить атрибуты по ближайшему». Этот инструмент позволяет найти ближайший объект и объединить выбранные атрибуты. Также возможно выполнить соединение «один ко многим», если указать максимальное расстояние и максимальное число ближайших соседей.

mauegraus
источник