Mam plik kształtów linii i inny wielokątów. Gdy dwie lub więcej linii przecina wielokąt, należy je połączyć (przyciągnąć), ale czasami podczas ręcznej digitalizacji tak się nie dzieje. Muszę znaleźć i poprawić wszystkie te błędy. Użyłem v.clean
z GRASS GIS i to automatycznie pstryknęło wiele wierzchołków, co było dobre, ale niektóre z tych odłączonych linii są dalej od tolerancji, którą podałem, a jeśli zbyt mocno zwiększę tolerancję, zacznie generować inne rodzaje błędów.
Jakieś pomysły?
Odpowiedzi:
Rozumiem problem w następujący sposób:
Jeśli punkt końcowy polilinii przecina wielokąt, wówczas polilinię należy połączyć (przez dodanie lub dostosowanie wierzchołków) do wszystkich dodatkowych punktów końcowych polilinii, które przecinają ten sam wielokąt.
Niektóre punkty końcowe polilinii nie przecinają wielokąta, ponieważ są niedokończone, ale należy je połączyć jak wyżej.
Ta odpowiedź opiera się na niektórych już podanych, ale nie jest kompletna, ponieważ nie znam wszystkich poleceń QGIS - może ktoś inny może do tego dodać?
Dla każdej polilinii wyodrębnij współrzędne punktu końcowego ( Wektor> Narzędzia geometrii> Wyodrębnij węzły, a następnie posprzątaj) i oblicz, czy znajdują się w obrębie wielokąta ( Wektor> Narzędzia badawcze> Wybierz według lokalizacji ).
W przypadku punktów końcowych polilinii, które znajdują się w obrębie wielokąta, przedłuż ten koniec polilinii do środka wielokąta (Wyodrębnij środek wielokąta za pomocą opcji Wektor> Narzędzia geometryczne> Środek wielokąta , nie jestem pewien co do modyfikacji linii, chociaż możesz pracować z wierzchołki polilinii jako punkty i dodaj kolejne z odpowiednią numeracją przed zrekonstruowaniem zmodyfikowanej polilinii za pomocą wtyczki Punkty do ścieżek)
Wspominasz, że mogą zdarzyć się sytuacje, w których niektóre lub wszystkie linie zostały poprawnie połączone, w takich sytuacjach (identyfikowalne przez zbieżne punkty końcowe polilinii) możesz wybrać położenie punktu końcowego zbieżnego zamiast środka ciężkości wielokąta jako punktu przedłużenia wszelkie dodatkowe niepołączone polilinie dla tego wielokąta.
W przypadku punktów końcowych polilinii wychodzących poza wielokąt, przedłuż ten koniec polilinii do środka najbliższego wielokąta. Ponownie nie jestem pewien, czy policzymy najbliższy wielokąt, chociaż moduł GRASS v.distance wygląda na załatwienie sprawy.
źródło
Myślę, że mógłbym to zrobić za pomocą niestandardowego algorytmu ... Zwróć uwagę, jak chcesz go zaimplementować, ale myślę, że zadziałałoby.
Dla każdej linii, dla każdego punktu końcowego, wykonaj punkt w wielokącie dla wierzchołka w punkcie końcowym i połącz go z wielokątem.
Następnie dla każdego wielokąta, jeśli jest połączony więcej niż jeden punkt końcowy linii, scaliłbym (przesunął) je wszystkie ze średnią współrzędną lub być może środkiem ciężkości wielokąta.
To całkiem proste. Ale niedostępne u standardowych operatorów. Myślę, że można to zrobić w ArcGIS z czasem kodowania dni.
Kolejna uwaga, na opublikowanym obrazie, jedna z linii znajduje się poza wielokątem ... Możesz sobie z tym poradzić w prostszy sposób, po prostu znajdując najbliższy wierzchołek do każdego z końcowych wierzchołków, upewniając się, że bliskość jest wzajemna (myślę, że to jest konieczne, aby wierzchołki były przyciągane tylko w jeden sposób), możesz przenieść je do średniej pozycji wierzchołków.
źródło
Ciekawy problem! Nie mogę wymyślić sposobu na automatyczne wykonanie przyciągania, ale oto krok w identyfikowaniu obszarów, w których należy przynajmniej szukać ręcznej korekty:
W zależności od sytuacji (liczba funkcji, liczba znajdujących się w tej sytuacji w porównaniu z tymi, które nie są itp.) Może to zaoszczędzić trochę czasu.
EDYCJA: Możesz również użyć wielokątów z sumą 2, aby utworzyć podzestaw warstw linii, a następnie uruchomić czyszczenie na tych z większą tolerancją, aby nie zmieniać innych funkcji.
źródło
kiedy już masz punkty końcowe, zrobiłbym schemat pająka, biorąc centroidy wielokątów jako obiekty i punkty końcowe pobliskich linii jako cele. Wykonujesz analizę diagramu pająka, w wyniku czego miałbyś segment dla każdej polilinii.
Działałoby to nawet dla osób kończących się poza wielokątami. Jak to zrobić w QGIS, nie wiem, przepraszam, ale zrobiłbym to w produktach ESRI, które dobrze znam. Właśnie to zrozumiałem, gdy whuber w pierwszej odpowiedzi zaproponował zbudowanie „gwiazdy”.
Jestem prawie pewien, że są tu ludzie, którzy wiedzą, jak przeprowadzić taką analizę w QGIS
źródło