Łączysz atrybuty z najbliższego punktu w QGIS?

29

Mam dwie warstwy z punktami, nazywam je A i B, każda z różnymi atrybutami.

Dla każdego punktu w AI chcę połączyć wszystkie atrybuty z najbliższego punktu w B.

Idealnie obejmowałoby to również pole mierzące odległość między dwoma punktami.

Wiem, jak to zrobić w ArcGIS: kliknij prawym przyciskiem myszy warstwę A> łączy i odnosi się> łączy, a następnie łącz dane w oparciu o położenie przestrzenne i wybierz łączenie atrybutów z najbliższego punktu.

Nie mogłem znaleźć podobnej funkcjonalności w QGIS. Jakieś wskazówki?

Fred
źródło

Odpowiedzi:

26

Za pomocą „Macierzy odległości” można obliczyć najbliższy punkt. Upewnij się, że obie warstwy są w tym samym CRS! Następnie możesz załadować wyniki i użyć ich do połączenia tabel A i B.

W „Macierzy odległości” wybierz: „Liniowa macierz odległości” i „użyj tylko najbliższych k punktów docelowych: 1”

wprowadź opis zdjęcia tutaj

Załaduj plik CSV za pomocą „Dodaj warstwę wektorową” i połącz warstwy we właściwościach warstwy warstwy A - karta łączenia.

wprowadź opis zdjęcia tutaj

A wynik:

wprowadź opis zdjęcia tutaj

podmrok
źródło
Jeśli chcesz mieć odległości między punktami w obrębie jednej warstwy za pomocą macierzy odległości, powinieneś zmienić k = 2, z powodu tego znanego problemu: hub.qgis.org/issues/4761
Celia
1
@underdark Wygląda na to, że to rozwiązanie nie działa. Jestem w stanie utworzyć plik matrix.csv i dołączyć go do mojej pierwszej warstwy. W swoim przykładzie dodałeś drugie łączenie, w którym dołączasz drugą warstwę do pierwszej, na podstawie TargetID z macierzy. Ale połączone pola nie są mi wyświetlane w oknie dialogowym, więc nie mogę wybrać TargetID. Oczywiście mogę najpierw zapisać_ jako warstwę, a następnie wykonać drugie łączenie ...
Bernd V.
13

NNJoin Plugin powinien wykonać zadanie. Do każdej operacji warstwy wejściowej dodaje wszystkie atrybuty najbliższej operacji w warstwie łączenia, a także dodaje atrybut odległości wraz z odległością do tej operacji.

Håvard Tveite
źródło
Działa świetnie. Szybciej niż zaakceptowana odpowiedź. Należy pamiętać, że zaakceptowana odpowiedź pochodzi z 2011 r.
Juminet
Przynajmniej dzisiaj jest znacznie lepsza niż zaakceptowana odpowiedź. Znacznie szybciej.
cag
4

Jeśli możesz żyć, łącząc pojedynczy atrybut z warstwy „B”, spójrz na narzędzie „Odległość piasty” z wtyczki mmqgis .

Jeśli potrzebujesz reszty atrybutów „B”, powinieneś być w stanie dołączyć pozostałe atrybuty „B” z powrotem do tej warstwy.

W razie potrzeby można również opcjonalnie wygenerować linie od A do B. Jest to przydatne do wizualizacji odległości i kierunków między powiązanymi funkcjami.

RyanDalton
źródło
0

Inne podejście przy użyciu wtyczki refFunctions .

(1) Przykładowy zestaw danych

wprowadź opis zdjęcia tutaj

(2) Otwórz tabelę atrybutów warstwy, która ma więcej funkcji ( points_bwarstwa w tym przykładzie), aby żadne pary nie zostały pominięte. Utwórz nowe pola.

  • Pole ID drugiej warstwy: geomnearest('points_a', 'id_a')
  • Pole odległości wykrytych par: geomnearest('points_a', '$distance')

wprowadź opis zdjęcia tutaj

Kazuhito
źródło
-6

Korzystanie z QGIS 1.7 Vector> Zarządzanie danymi> Połącz atrybuty według lokalizacji

wprowadź opis zdjęcia tutaj

Mapperz
źródło
3
Też o tym myślałem, ale kiedy go przetestowałem, działało tylko w przypadku dokładnych dopasowań, takich jak wielokąt punktowy. Nie znaleziono najbliższego punktu do innego punktu. Testowany w wersji
1.7
1
Mam zero dopasowań. To nie działa.
Fred