Chciałbym wyrównać wiele punktów do linii lub linii w warstwie, używając określonej tolerancji lub bufora wokół obiektów linii. Proszę odnieść się do załączonego przykładowego szkicu.
Na potrzeby tego przykładu punkty najbliższe linii na obrazie PRZED znajdują się w odległości 5 jednostek mapy od linii, podczas gdy najbardziej oddalone punkty znajdują się w odległości ponad 10 jednostek mapy. Chciałbym przyciągnąć najbliższe punkty do najbliższej linii, stosując tolerancję 5 jednostek mapy, aby osiągnąć wynik na zdjęciu PO.
Odpowiedzi:
W (nie wydanej) wersji QGIS 3.0 jest wbudowane narzędzie do tego. Możesz uzyskać nocną migawkę ze strony internetowej QGIS, aby wcześniej to przetestować.
Aby to zrobić:
Oto wynik, pokazując oryginalne punkty jako „x”, a punkty przyciągania jako zielone kropki. Użyłem tutaj tolerancji, aby przyciągać tylko niektóre punkty wejściowe.
źródło
Można to zapewnić dzięki PyQGIS . Do następnej sytuacji:
następujący kod, z uwzględnieniem tolerancji 5 jednostek mapy, został uruchomiony w konsoli Pythona w QGIS:
Stworzono warstwę pamięci, w której punkty były przyciągane zgodnie z wcześniej rozważaną tolerancją 5 jednostek mapy i prostopadłą ścieżką do linii.
źródło
Możesz to również zrobić w kalkulatorze polowym za pomocą wtyczki refFunctions. Za pomocą kalkulatora pola można zaktualizować geometrię warstwy, a także pola. refFunctions daje ci funkcję „geomdistance”, aby znaleźć najbliższą linię w danej odległości (lub „geomnearest”, jeśli nie chcesz progu) i zwróci atrybut lub geometrię, a funkcja „closest_point” znajdzie najbliższą punkt na danej geometrii. Połącz je tak, aby obliczyć nowe geometrie dla swojej warstwy punktowej:
closest_point(geom_from_wkt(geomdistance('snap_lines','$geometry',10)) , $geometry)
Zamiast bezpośrednio aktualizować geometrię, możesz obliczyć pole za pomocą przyciąganej geometrii. Przechowuję wiele geometrii do przyciągania punktów przepustu do różnych warstw strumienia i mogę łatwo zaktualizować geometrię punktu w Kalkulatorze pola w zależności od tego, których linii strumienia muszę użyć.
Istnieją pewne ograniczenia, obie warstwy muszą być tym samym CRS, a funkcja geomdistance wyświetli błąd, jeśli masz więcej niż 100 000 punktów, ale możesz zmienić ten limit, jeśli edytujesz plik wtyczki refFunctions.
źródło