To bardzo stare pytanie, ale istnieją (przynajmniej) dwa ważne zastrzeżenia, w zależności od wykonywanego zadania.
- Zadanie może spowodować renderowanie (bardzo) dużej liczby pustych kafelków bez konkretnego zarządzania procesem tworzenia kafelków.
- 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.