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ć.
Odpowiedzi:
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.
źródło
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ś.
źródło
Czy badałeś Tilemill pod kątem produkcji zestawów płytek? Automatycznie zmniejszy węzły przy różnych poziomach powiększenia. https://github.com/mapbox/tilemill
źródło
Prawdopodobnie nie odpowiada na twoje pytanie, ale jest dość powiązane - w ten sposób Google koduje polilinie, w tym informacje o uogólnieniu: http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html
źródło