Mam wykres sieci, który muszę uprościć w celu zmniejszenia liczby krawędzi . Pomysł polegałby na połączeniu węzłów znajdujących się blisko siebie i usunięciu łączących krótkich krawędzi.
Jak można to osiągnąć w PostGIS lub GRASS? Czy są jakieś lepsze sposoby automatycznego uproszczenia takiej sieci?
Próbowałem już funkcji ST_SnapToGrid, ale nie jestem zadowolony z wyników (szary = oryginalny, czarny = przyciągnięty):
Odpowiedzi:
Najbliższe, do jakiego do tej pory doszedłem, to:
Zatrzaskuje drogi z tolerancją 5 metrów i usuwa wszystkie linie zerowej długości. Nie jest to optymalne rozwiązanie, ponieważ wydaje się przyciągać raczej losowo do niektórych wierzchołków.
źródło
Czy próbowałeś już GRASS v.generalize ?
v.generalize
pozwala wybrać algorytm generalizacji z atrybutem metody . Istnieje kilka: douglas, douglas_reduction, lang, redukcja, reumann, boyle, przesuwne_averaging, ważenie odległości, chaiken, pustelnik, węże, sieć, przemieszczenie .I dodatkowe parametry jak
threshold
,degree_thresh
,angle_thresh
(w zależności od wybranego algorytmu) może pomóc uzyskać dokładny wynik.Oto samouczek .
źródło
Nie zrobiłem tego, ale myślę, że mogę zasugerować kierunek.
ST_ModEdgeHeal połączy jedną krawędź w drugą. ST_NewEdgeHeal zastąpi oba nowymi krawędziami.
Podręcznik topologii PostGIS
źródło
@ w mroku, widzę, że napisałeś narzędzie do zagęszczania linii w Sextante. Dlatego sugeruję następujący algorytm, aby uniknąć „losowego” przyciągania jednego z twoich punktów.
Wybierz segmenty linii, których chcesz się pozbyć na podstawie ich długości.
Dla każdego z tych segmentów utwórz punkt w punkcie środkowym
Usuń mały segment
Teraz możesz używać ST_Snap w PostGIS (patrz przykład tutaj )
EDYCJA: pamiętaj, że w twoim przypadku możesz najpierw użyć v.net , aby usunąć pseudo-węzły (węzeł łączący tylko dwie linie)
źródło
Przekazywanie, w jaki sposób Michaël Michaud przeanalizował to na liście programistów OpenJUMP:
źródło