Присоединение атрибутов из ближайшей точки в QGIS?

29

У меня есть два слоя с точками, назовите их A и B, каждый с разными атрибутами.

Для каждой точки в AI нужно объединить все атрибуты из ближайшей точки в B.

В идеале это также должно включать поле, измеряющее расстояние между обеими точками.

Я знаю, как это сделать в ArcGIS: щелкните правой кнопкой мыши слой A> объединяет и связывает> объединяет, затем объединяет данные на основе пространственного местоположения и выбирает объединение атрибутов из ближайшей точки.

Я не смог найти подобную функциональность в QGIS. Есть указатели?

Фред
источник

Ответы:

26

Используя «Матрицу расстояний», вы можете рассчитать ближайшую точку. Убедитесь, что оба слоя находятся в одном CRS! Затем вы можете загрузить результаты и использовать их для объединения таблиц A и B.

В «Матрице расстояний» выбрал: «Матрица линейных расстояний» и «Использовать только ближайшие k целевых точек: 1»

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

Загрузите CSV с помощью «Добавить векторный слой» и соедините слои в свойствах слоя слоя А - вкладка «Присоединиться».

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

И результат:

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

Подземье
источник
Если вы хотите, чтобы расстояния между точками в пределах одного слоя с использованием матрицы расстояний, вы должны изменить k = 2 из-за этой известной проблемы: hub.qgis.org/issues/4761
Селия
1
@underdark Кажется, это решение больше не работает. Я могу создать matrix.csv и присоединить его к своему первому слою. В вашем примере вы добавили второе объединение, в котором вы присоединяете второй слой к первому на основе TargetID из матрицы. Но объединенные поля не отображаются для меня в диалоговом окне, поэтому я не могу выбрать TargetID. Конечно, я могу сначала сохранить слой как слой, а затем выполнить второе соединение ...
Бернд В.
13

NNJoin Плагин должен делать эту работу. Для каждого объекта входного слоя он добавляет все атрибуты ближайшего объекта в слое объединения, а также добавляет атрибут расстояния с расстоянием до этого объекта.

Ховард Твите
источник
Работает отлично. Быстрее, чем принятый ответ. Обратите внимание, что принят ответ, если с 2011 года.
Juminet
По крайней мере, сегодня это намного лучше, чем принятый ответ. Гораздо быстрее.
cag
4

Если вы можете просто присоединиться к одному атрибуту из вашего слоя «B», взгляните на инструмент «Hub Distance» из плагина mmqgis .

Если вам нужны остальные атрибуты «B», вы сможете присоединить остальные атрибуты «B» к этому слою.

При желании вы также можете сгенерировать строки от A до B. Это полезно для визуализации расстояний и направлений между связанными объектами.

RyanDalton
источник
0

Другой подход с использованием плагина refFunctions .

(1) Образец набора данных

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

(2) Откройте таблицу атрибутов слоя, который имеет больше объектов ( points_bв данном примере это слой), чтобы не пропустить ни одной пары. Создать новые поля.

  • Поле идентификатора другого слоя: geomnearest('points_a', 'id_a')
  • Поле расстояния обнаруженных пар: geomnearest('points_a', '$distance')

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

Казухито
источник
-6

Использование QGIS 1.7 Vector> Управление данными> Атрибуты соединения по местоположению

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

Mapperz
источник
3
Я тоже думал об этом, но когда я проверял его, он работал только для точных совпадений, таких как точка-полигон. Не нашел ближайшей точки к другой точке. Протестировано в
v1.7
1
Я получил ноль матчей. Это не работает.
Фред