Połącz atrybuty warstwy punktowej i liniowej według lokalizacji (najbliższa odległość) w QGIS

13

Mój problem jest następujący: mam linię shp (warstwa docelowa) i punkt shp (warstwa łączenia). druga (warstwa punktowa) zawiera atrybut, który chcę połączyć z warstwą linii na podstawie najbliższej odległości od linii. Punkty i linie nie przecinają się

Mogę to zrobić za pomocą ArcGIS i łączenia przestrzennego (opcja dopasowania: najbliższa), ale nie wiem, jak mogę to osiągnąć w QGIS.

Miha Požauko
źródło
3
Istnieje narzędzie do wykonania Dołącz według lokalizacji, ale nie ma opcji „najbliżej”. Nie wiem, czy jest jakieś obejście. Ogólnie rzecz biorąc, oceń, aby wesprzeć rozwój twoich brakujących, ulubionych opcji / narzędzi. W ten sposób użytkownicy mogą również pomóc w rozwoju tego oprogramowania.
Giovanni Manghi

Odpowiedzi:

8

Nie sądzę, żeby istniała w tym celu „podstawowa” funkcja QGIS. Zainstaluj jednak wtyczkę MMQGIS i użyj narzędzia „odległość piasty”. Wybierz punkty jako warstwę „Punktów źródłowych”, a linie jako „Warstwę węzłów docelowych” i ustaw „Typ kształtu wyjściowego” na „Linia do piasty”. To da ci kształt pliku linii (o długości), które łączą najbliższe obiekty. Dogodnie dodaje także identyfikator najbliższej funkcji do tabeli atrybutów.

Edycja / komentarz: To podejście działa dobrze, jeśli jest mniej punktów niż linii, lub też sytuacja jeden-do-jednego. Posiadanie większej liczby punktów niż linii komplikuje sprawy. Narzędzie „Odległość piasty” dodaje identyfikator funkcji linii do tabeli atrybutów punktu jako „HubName” wraz z odległością między punktem a środkiem linii jako „HubDist”. Jeśli jest więcej punktów niż linii, wymagana jest dodatkowa praca w celu ustalenia w obrębie każdego podzbioru punktów (tych wielu rekordów powiązanych z każdym węzłem linii), który z nich jest najbliżej każdej linii i / lub który ma pożądany zestaw atrybuty do przyłączenia do linii.

Darren Cope
źródło
należy to zaznaczyć jako odpowiedź, z zastrzeżeniem drobnej edycji „linii” v „punktów”
Willy
1
„Odległość piasty” nie jest właściwym narzędziem, jeśli kryterium jest „najbliższa odległość od linii”. Kod mmqgis ujawnia, że ​​odległość piasty wykorzystuje przybliżenie geometrii „piasty”. Obliczenia odległości (mmqgis_distance) przyjmują dwa punkty jako parametry. Oto kod, który dokonuje aproksymacji geometrii piasty w mmqgis_library.py: "feature.geometry (). BoundingBox (). Center ()". Oznacza to, że zamiast rzeczywistej geometrii używany jest środek obwiedni geometrii. Jeśli więc kryterium ma być „najbliższa odległość od linii”, bardziej odpowiednie są GRASS v.distance lub wtyczka NNJoin.
Håvard Tveite
5

Można do tego użyć funkcji GRASS v.distance . W QGIS można uzyskać dostęp do funkcji poprzez wtyczkę GRASS ( wersja Przetwarzanie obecnie nie działa). NNJoin wtyczki QGIS może być prostsza alternatywa.

Håvard Tveite
źródło
3

Wtyczka NNJoin nigdy mnie nie zawiodła i działa dobrze z dużymi zestawami danych .

Wtyczki> Zainstaluj: NNJoin> NNJoin> wybierz warstwę wejściową i połącz warstwę> Następnie kliknij dołącz.

Sprawdź wyniki z nowej warstwy wyjściowej za pomocą tabeli atrybutów. Ostrzeżenie: upewnij się, że obie warstwy korzystają z tej samej projekcji przestrzennej, w przeciwnym razie wyniki będą puste.

Matthew Bayly
źródło
2

W 2019 roku może to być możliwe dzięki narzędziu QGIS 3 Zanzibar „Połącz atrybuty najbliżej”. To narzędzie pozwala znaleźć najbliższą funkcję i połączyć wybrane atrybuty. Możliwe jest również wykonanie połączenia jeden do wielu, jeśli podasz maksymalną odległość i maksymalnych najbliższych sąsiadów.

mauegraus
źródło