Upraszczasz wielokąty do znakowania linii?

16

Chciałbym uprościć niektóre wielokąty, które przedstawiają rzeki w linie. Zakładam, że dziury w wielokątach można pominąć. Czy ktoś ma jakiś dobry pomysł, jak to zrobić?

Byłoby miło, gdyby można było to zrobić bezpośrednio w postgis lub innym narzędziu open source, ale wystarczy krótki opis algorytmu.

stachu
źródło

Odpowiedzi:

13

To, czego potrzebujesz, nazywa się „algorytmem szkieletowania”.

Przeczytaj ten artykuł:

Haunert, J.-H., Sester, M., czerwiec 2008. Zanik powierzchni i linie środkowe dróg oparte na prostych szkieletach. GeoInformatica 12 (2), 169–191. URL http://dx.doi.org/10.1007/s10707-007-0028-x

Niektóre z tych algorytmów opracowano w bibliotece CGAL .

Julien
źródło
Żaden link już nie działa, Julien: czy uważasz, że możesz podać streszczenie algorytmów lub przynajmniej formalne odniesienia, aby umożliwić ludziom przeglądanie dokumentów?
whuber
Tak, zaktualizowałem odpowiedź z odpowiednim odniesieniem do nowszego artykułu.
Julien
2
Dziękuję Ci! (Nie mogę jednak dodać kolejnej aprobaty - miałem tylko jedną. :-)
whuber
4

W PostGIS 2.2 z SFCGAL można to zrobić za pomocą ST_StraightSkeleton lub ST_ApproximateMedialAxis , w zależności od kryteriów.

dbaston
źródło
2

wtyczka szkieletu JUMP jest dostępna jako część openjump http://www.openjump.org

blackholesunn
źródło
1

Jako ostrzeżenie, nigdy wcześniej tego nie próbowałem. Twój sukces będzie zależeć od jakości danych, które obecnie posiadasz.

Pomyśl o wielokącie jako o pasie trójkątów. Każdy trójkąt łączy się z wierzchołkiem po przeciwnej stronie korytarza za pomocą krawędzi. Teraz, dla każdej krawędzi w korytarzu, po prostu umieść prawy klaps w środku na środku. Te nowe wierzchołki są punktami linii. Prawdopodobnie możesz manipulować sposobem wybierania środkowego punktu na krawędzi dla większej dokładności.

Jon Bringhurst
źródło
0

Po raz kolejny ET GeoWizards może być odpowiedzią. Wypróbuj narzędzie Utwórz linie środkowe z wielokątów .

Don Meltz
źródło