piątek, listopada 27, 2009

Tiles - mapy w kawałkach

Było już o pobieraniu danych z serwisów internetowych i łączeniu ich w jedną dużą mapę, teraz czas na coś odwrotnego - jak podzielić mapę na kawałki i udostępnić je w sieci. Takie kawałki zwą się po angielsku tiles (kafelki, cegiełki...), zaś sama czynność to tiling [kafelkowanie? głupio brzmi... to może lepiej już 'tajlowanie' ;) ].

Po co w ogóle dzielić? Odpowiedź jest prosta: chodzi o wydajność. Zamiast przesyłać wielkie pliki i ładować je w całości do pamięci lub co chwilę tworzyć obrazki od nowa (czyli tak, jak to jest w przypadku serwera WMS), o wiele lepiej jest z góry pociąć dane na części i udostępniać tylko to, co jest potrzebne w danej chwili użytkownikowi.
W każdym razie bez tajli i tajlowania nie byłoby tych wszystkich serwisów mapowych (Google Maps, Bing Maps) czy wirtualnych globusów (Google Earth, NASA World Wind).

Nie będzie to jednak szczegółowy poradnik krok-po-kroku, a raczej krótki przegląd i omówienie istniejących narzędzi, które ułatwiają w mniejszym lub większym stopniu to zadanie:

GDAL
Nazwa programu nie powinna być obca (przynajmniej niektórym), już kilkakrotnie pojawiała się na blogu. Właściwie od zawsze udostępniał mechanizmy pozwalające na dzielenie rastrów (narzędzia gdalwarp i gdal_translate), natomiast wszystko trzeba było robić ręcznie (samemu ustalać rozmiar plików w px, sposób nazewnictwa, strukturę katalogów itp.).
dstile to pierwszy program, który automatyzował proces tworzenia plików dla World Wind. Pierwotnie (podobnie jak cała biblioteka GDAL, o którą się opiera) dostępny był jedynie w wersji nieokienkowej, potem doczekał się GUI, a nawet przekształcenia go w plugin do WW. Pozwala również na 'destylację' danych wysokościowych (możliwość dodania własnego DEM to obecnie chyba jedna z niewielu zalet WW nad Google Earth...).
gdal2tiles jest narzędziem bardziej uniwersalnym - tworzy pliki graficzne dla Google Earth (+odpowiednie kml), Google Maps, Bing Maps, OpenLayers, Yahoo! Maps, OpenStreetMaps. gdal2tiles jest obecnie częścią GDAL, istnieje też MapTiler, będący po prostu graficzną nakładką na program.
Gdal to Tiles C# - kolejne narzędzie oparte o GDAL (z GUI)

MapCruncher
Narzędzie dedykowane dla map Microsoftu (Bing), ale wynikowe pliki da się wyświetlić również w Google Maps. Użytkownik wgrywa dowolną mapę bez georeferencji (w pliku graficznym, pdf), następnie kalibruje na kilku punktach, a program przetwarza i dzieli ją na kawałki w odwzorowaniu Mercatora.

GMap Creator i Image Cutter
Pierwsza aplikacja służy do konwersji danych wektorowych z pliku shp na pliki i stronę Google Maps, druga działa na rastrach (ale z opisu na stronie wynika, że przeznaczona jest bardziej do zwykłych zdjęć niż map).

Arc2Earth
Płatny program do publikacji danych rastrowych i wektorowych z ArcGIS w Google Earth, Google Maps, Bing Maps i OpenLayers

TNTMips
Rozbudowany pakiet do GIS/teledetekcji, od niedawna posiada funkcję tworzenia tilesetów Google Maps, Google Earth, Bing Maps i World Wind oraz ich publikacji w sieci. Więcej o programie na blogu GIS Diary. (TNTMips to program komercyjny, istnieje też wersja bezpłatna, ale ze względu na ograniczenia w rozmiarze pliku nie nadaje się do tilingu).

Global Mapper
Kolejny duży i komercyjny program GIS. GM był chyba pierwszym oprogramowaniem, które pozwalało w łatwy sposób tworzyć zestawy kafelków. Obsługuje Google Earth, Maps, World Wind, Bing i Zoomify.
dlgv32 Pro to bezpłatna wersja udostępniana przez USGS, która posiada pewne ograniczenia (maksymalnie można otworzyć 4 pliki źródłowe), ale same opcje eksportu działają bez problemów.


Istnieje wiele innych programów o zbliżonych funkcjonalnościach (rozwiązania oparte o Image Magick, skrypty do Photoshopa), natomiast ww. są najpopularniejsze i stosunkowo najłatwiejsze w obsłudze, a przede wszystkim operują na danych przestrzennych.

6 komentarzy:

Anonimowy pisze...

Ciekawy post.

A istnieje może narzędzie, które by automatycznie sklejało by kafelki z cache'u World Winda w większy obraz?

m_k pisze...

Istnieje plugin do WW, który pozwala na tworzenie dużych obrazów z plików w cache.

Do pobrania tutaj:
http://shockdev.com/DEP10_full.zip
http://shockdev.com/DEP12.zip (update)
http://www.shockdev.com/WorldWind_1.4_DEP_v0.12.exe (to jest chyba to samo co w tych 2 zipach)

O ile pamiętam to należy wypakować wszystkie pliki do katalogu głównego WW (konieczne może być nadpisanie kilku plików już tam istniejących), jedynie sam plugin (plik .cs) idzie do podkatalogu Plugins. Ładuje się go z menu Plugins->Load/Unload (DEP), a potem File->Export georeferenced imagery. Wybiera się obszar, warstwę i poziom i klika Export.

Anonimowy pisze...

Dziękuję za odpowiedź, ale nie do końca o to mi chodziło - to narzędzie najwyraźniej nie obsługuje niestandardowych warstw takich jak te geoportalu czy Virtual Earth.

m_k pisze...

Racja, domyślnie szuka on jedynie warstw, które w Layer Managerze są w Images (czyli Landsat, BMNG i USGS). Żeby dodać pozostałe trzeba w pliku DEP.cs zmienić jedną linijkę (#196):
if ((roRol != null) && (ro.Name == "Images"))
na:
if (roRol != null)
VirtualEarth działa na innej zasadzie (nie jest to zwykła warstwa WW ani WMS), więc jej dodanie do listy w pluginie nie jest możliwe.

Anonimowy pisze...

Jeszcze raz wielkie dzięki!

Wiem, że VE działa na innej zasadzie, dlatego myślałem o programie sklejającym kafelki prosto z cache'u, który w przypadku VE zdaje się być zapisywanym w standardowej dla World Winda formie.


No cóż, będę się musiał pobawić w ręczne sklejanie...

m_k pisze...

Istnieje WMS serwujący mapy VE: http://vizure.net/home/item/2-virtual-earth-wms-service
możesz spróbować posklejać z niego