Jak uogólnić linie brzegowe?


12

Mam duży zestaw punktów danych, które zasadniczo reprezentują linię brzegową świata. Nie znam dokładnej rozdzielczości, ale powiedziałbym, że jest w okolicach 5-10m.

Wyobraź sobie zestaw punktów reprezentujących poszarpane wybrzeże. Przy rozdzielczości 1 m widzimy wszystkie szczegóły i potrzebujemy 50 punktów danych, aby poprawnie reprezentować wybrzeże, jednak przy rozdzielczości 10 km wybrzeże wygląda jak linia prosta i potrzebowalibyśmy tylko 2 punktów.

Piszę aplikację do mapowania, która będzie wymagała skalowania danych z rozdzielczości „pełnej planety” do rozdzielczości „ulicznych”. Potrzebuję pomocy w zmniejszeniu rozdzielczości moich punktów danych, a następnie ilości danych w przypadku szerszych rozdzielczości.

Czytałem o Vector-Tiling i myślę, że będzie to najlepsze rozwiązanie (już coś takiego robię), jednak przy niskich rozdzielczościach mój zestaw danych wciąż ma ogromne znaczenie, ponieważ renderowanie zajmuje [stosunkowo] długi czas czas, w którym wysokie rozdzielczości są szybkie, ponieważ „skuteczny” zestaw danych jest mały (podzbiór całości).

Próbuję ustalić, jak pobrać mój duży zestaw danych i zmniejszyć jego skalę, aby dane kafelków widoku „pełnej planety” były w zarządzaniu. Jak utworzyć sub-zestawy kafelków z większego kompletnego zestawu danych?

Z przyjemnością korzystam z narzędzia, ale wolę zrobić to sam, próbując dowiedzieć się, jak to zrobić.


1
Czy sprawdziłeś odpowiedzi na gis.stackexchange.com/questions/6585/... ? Proszę opracować, jeśli uważasz, że twoje pytanie jest inne.
— podmroku

1
Wydaje się, że pytanie powinno dotyczyć linii brzegowych zamiast „punktów”. Czy wraz ze spadkiem rozdzielczości małe wyspy powinny zniknąć? czy można przekraczać linie brzegowe wokół wąskich, serpentynowych wysp?
— Kirk Kuykendall

Jeśli chcesz po prostu wykonać zadowalającą pracę i przejść dalej, odpowiedź @R Thiede jest prawdopodobnie najlepszym miejscem na rozpoczęcie. Jeśli chcesz pracować nad prawdziwym wyzwaniem, upraszczając rysowanie linii bez utraty znaczenia kształtów, zobacz powiązane pytania gis.stackexchange.com/questions/38/... i gis.stackexchange.com/questions/440/… .
— matt wilkie

Odpowiedzi:


7

To, jak poradzisz sobie z rozwiązaniem tego problemu, tak naprawdę zależy od przypadku i od tego, jak ważna jest dla Ciebie aktualna topologia (w porównaniu do samego wyglądu / czasu renderowania). Ponieważ twoim ostatecznym celem jest uogólnienie linii brzegowych, przydatne mogą być pewne pomysły dotyczące uogólnienia.

Jedno podejście wykorzystuje buforowanie, jak pokazano tutaj . Miałem też podobny problem jakiś czas temu i szczegółowo opisałem tutaj moje rozwiązanie .

Krótko mówiąc, możesz korzystać z oddzielnych zestawów danych wektorowych (lub przynajmniej oddzielnych geometrii), uogólnionych na różne poziomy. To rozwiązuje twój podstawowy problem, chociaż nie korzysta z kafelków, ale oczywiście możesz nadal z nich korzystać, jeśli chcesz. Oczywiście, jeśli zamierzasz podzielić swój zestaw danych na kafelki oparte na siatce, najpierw uogólnij, w przeciwnym razie powstanie przerwa między kafelkami.


+1 za przemyślaną odpowiedź. Witamy na naszej stronie, Rüdiger!
— whuber

5

Powinieneś przygotować różne uogólnione wersje swojego zestawu danych dla poziomów powiększenia „pełnej planety” aż do zbliżenia.

Klasycznym algorytmem uogólniającym jest algorytm Douglasa-Peuckera . Najpierw musisz połączyć punkty z liniami wybrzeża, jeśli jeszcze tego nie zrobiłeś.


2
Biblioteka GEOS ma wbudowane algorytmy Douglasa-Peuckera, których możesz użyć, jeśli chcesz sam to kodować. Możesz jednak rozważyć topologię, w którym to przypadku narzędzie GRASS v.generalize może również pomóc.
— lagerratrobe

Cześć @lagerratrobe. Stworzyłem tę wiki wiki społeczności, więc powinieneś być w stanie ją edytować bezpośrednio i dodawać do niej rozwiązania GEOS i GRASS.
— podmroku


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.