Miejsce na dysku i liczba płytek dla warstwy świata


9

Zastanawiam się nad testowaniem generowania kafelków warstwy światowej do tworzenia map internetowych.

W tym kontekście chcę wiedzieć, jak mogę obliczyć liczbę kafelków (256x256 dla tilecache, jeśli pamiętam) będę potrzebował n poziomów we współrzędnych WGS84.

Być może użyję rozwiązania złożonego z wstępnie wygenerowanymi kafelkami i generowania w locie, ale na końcu muszę wiedzieć, ile miejsca na dysku jest generowane, czy każdy kafelek jest generowany i ile plików będzie reprezentować.

Są dwa cele, czas potrzebny i potrzebne miejsce na dysku.

Wszelkie informacje są mile widziane

Edytować:

Znalazłem ten skrypt do obliczania liczby kafelków do wygenerowania w zależności od poziomów powiększenia i zasięgu danych. Zobacz tę treść https://gist.github.com/1675606


Odpowiedzi:



5

Zrobiłem ściągawki, która zawiera całkowitą liczbę płytek dla danego poziomu powiększenia.

Ma dwie stoły. Jeden pokazuje liczbę poziomów powiększenia potrzebnych do pokazania rzeczy w określonej skali, zaczynając od kafelka przedstawiającego ludzi.

level 1: 1 # Person
level 2: 5 # Car
level 3: 21 # House building
level 4: 85 # Square
level 5: 341 # Small neighbourhood
level 6: 1,365 # Football stadium
level 7: 5,461 # Small farm
level 8: 21,845 # Central park New York
level 9: 87,381 # Entire airport
level 10: 349,525 # Small city (Copenhagen)
level 11: 1,398,101 # Medium city (Amsterdam)
level 12: 5,592,405 # Large city (London)
level 13: 22,369,621 # Medium Island (Mallorca)
level 14: 89,478,485 # Large Island (Sicily)
level 15: 357,913,941 # Small country (Denmark, Estonia, Taiwan)
level 16: 1,431,655,765 # Medium Country (Korea, Greece)
level 17: 5,726,623,061 # Region (Southern Europe, Arabian Peninsula)
level 18: 22,906,492,245 # Small continent or large country (China)
level 19: 91,625,968,981 # Medium continent (Africa) or huge country (Russia) 
level 20: 366,503,875,925 # Asia
level 21: 1,466,015,503,701 # The World

Drugi pokazuje liczbę poziomów powiększenia potrzebnych, jeśli zaczynasz od mapy świata, i poziomy szczegółowości progresywnej:

level 1: 1 # The World
level 2: 5 # Large contenents
level 3: 21 # Medium continents, huge countries
level 4: 85 # Small continents, large countries
level 5: 341 # Region (Southern Europe, Arabian Peninsula)
level 6: 1,365 # Medium Country (Korea, Greece)
level 7: 5,461 # Small country (Denmark, Estonia, Taiwan)
level 8: 21,845 # Large Island (Sicily)
level 9: 87,381 # Medium Island (Mallorca)
level 10: 349,525 # Large city (London)
level 11: 1,398,101 # Medium city (Amsterdam)
level 12: 5,592,405 # Small city (Copenhagen)
level 13: 22,369,621 # Entire airport
level 14: 89,478,485 # Central park New York
level 15: 357,913,941 # Small farm
level 16: 1,431,655,765 # Football stadium
level 17: 5,726,623,061 # Small neighbourhood
level 18: 22,906,492,245 # Square
level 19: 91,625,968,981 # House building 
level 20: 366,503,875,925 # Car
level 21: 1,466,015,503,701 # Person

1

To bardzo stare pytanie, ale istnieją (przynajmniej) dwa ważne zastrzeżenia, w zależności od wykonywanego zadania.

  1. Zadanie może spowodować renderowanie (bardzo) dużej liczby pustych kafelków bez konkretnego zarządzania procesem tworzenia kafelków.
  2. Rozmiar dysku piramidy kafelkowej może być znacznie (więcej niż 100%) większy niż oczekiwano z sumy rozmiarów plików składowych, ze względu na minimalny rozmiar klastra 4KB (inaczej rozmiar bloku) w większości pamięci.

(2) jest już prawie wyjaśnione, ale jako przykład mam piramidę kafelkową, w której całkowity rozmiar pliku to 168 MB, ale jego rozmiar na dysku to ponad 600 MB. To sprawia, że ​​znacznie ważniejsze jest poprawne (1).

Odnośnie do (1): zastanów się, czy Twoja praca nad plikiem światowym obejmuje tylko granice państw.

Dowolny kafelek, który nie jest granicą, może być podawany z jednym z dwóch kafelków „alt” - kafelkiem „morskim” (niebieskim) w dowolnym miejscu poza krajem lub kafelkiem „blokowym” (wypełnienie) dla kafelków, które są całkowicie w obrębie granica państwowa. Renderowane muszą być tylko kafelki zawierające segment granicy - pozostałe można „domyślnie” odrzucić.

Dlaczego to? Ponieważ wszystkie płytki blokowe określonego typu (wpisz (morze, ląd) lub wpisz (morze, kraj a, kraj b itp.)) Będą identyczne.

Płytka „blokowa” może mieć jeden kolor dla każdego kraju, jeden kolor dla całego świata lub pustą płytkę (jeśli nakładasz kontury kraju na tle).

Płytki „Block” należy renderować tylko raz (np. 1 płytka 256 x 256, całkowicie wypełniona pożądanym kolorem).

Podczas tworzenia kafelków możesz przetestować

(a) jeżeli istnieje jego „element nadrzędny” - kafelek o jednym powiększeniu mniejszym - i

(b) jeżeli jest to płytka „blokowa” (tzn. jest całkowicie wypełniona jednym kolorem).

W przypadku (a) płytki nie trzeba renderować; jeśli rodzic nie istnieje, to dlatego, że rodzic był całkowicie kafelkiem bloku i został usunięty.

W przypadku (b) (jeśli element nadrzędny istnieje, więc płytka wymaga przetestowania), jeśli jest to płytka blokowa, można ją bezpiecznie usunąć z piramidy dachówkowej. (Test kafelkowania bloków jest po prostu oparty na rozmiarze pliku. Kafelek 256x256 w całości jednego koloru ma bardzo dokładny rozmiar, a prawdopodobieństwo, że kafelek „właściwej zawartości” ma ten sam rozmiar, wynosi zero).

Usunięcie tych kafelków podczas procesu tworzenia minimalizuje czas w pętli renderowania kafelków, ale oszczędza ogromne ilości miejsca na dysku. Alternatywą jest wyrenderowanie wszystkiego, a następnie rekurencyjne przeszukiwanie piramidy w poszukiwaniu bloków i usuwanie ich: trwa to dłużej.

Po zbudowaniu piramidy procedura wywołania kafelka może zostać domyślnie ustawiona na kafelek „bloku”, jeśli przejdzie on do poszukiwania kafelków / z / x / y i otrzyma 404.

Aby zobaczyć, dlaczego tak jest, rozważ renderowanie powiększenia 256x256 = 1, gdy górna ćwiartka jest całkowicie pusta. Wiesz z pewnością, że 4 płytki przy powiększeniu = 2 pokrywające ten sam obszar również będą puste. Podobnie 16 płytek przy powiększeniu = 3 i tak dalej.

Tak więc w dowolnym momencie podczas procesu kafelkowania, w którym kafelek ma kolor bloku (lub jest pusty), wszystkie czasy przy wyższych poziomach powiększenia można zignorować.

Oszczędza to dużo miejsca i dużo czasu w procesie układania płytek.

Zastrzeżenie do tych zastrzeżeń: bardziej złożone zadanie układania płytek przełącza się na różne warstwy przy różnych poziomach powiększenia. W takim przypadku należy zadbać o to, aby test „macierzysty” nie był przeprowadzany, gdy poziom powiększenia to taki, w którym nowa warstwa znajduje się w zestawie renderowania.

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.