CustomMaps - przygotowanie własnego rastra dla Garmina.  GPS Maniak - strona główna serwisu

* Wstęp
  Odbiorniki Garmina, kojarzą się weteranom wykorzystania GPSu w turystyce wyłącznie z mapami wektorowymi. W zasadzie jest to słuszne podejście do tematu, bo z jednej strony sam "wynalazek" rastra dla Garmina to zupełnie świeża historia (jesień 2009), z drugiej strony możliwość wgrania własnej mapy rastrowej dotyczy wybranych modeli odbiorników turystycznych, na końcu zaś możliwości związane z rastrem w Garminie są mocno ograniczone.

   Do podstawowych ograniczeń należą:
  • Brak możliwości załączania i wyłączania poszczególnych map. Włączana jest usługa "CustomMaps" jako całość co powoduje, że dla danego regionu można mieć tylko jedną mapę w odbiorniku
  • Określona maksymalna ilość i wielkość tzw. kafelków mapowych, po przekroczeniu których odbiornik albo odmówi nam obsługi "CustomMaps", albo części kafelków po prostu nie wyświetli.
Przekroczony limit "kafelków" mapy .....

 Po przekroczeniu limitu "kafelków" CustomMaps,
część mapy rastrowej nie będzie wyświetlana. 
   Wobec powyższego można uznać, że usługa "CustomMaps" w Garminie, to swojego rodzaju proteza, którą możemy wykorzystać w ograniczonym terenie działania (oczywiście możliwe jest zarządzanie plikami mapowymi na karcie pamięci, w zewnętrznym urządzeniu - np. w telefonie komórkowym z menadżerem plików), dla którego albo całkowicie brakuje sensownych map wektorowych, albo dla którego chcielibyśmy mieć mapkę specjalistyczną, tematyczną, np. mapę historyczną, które to mapy nie występują w postaci wektorowej.
   Wspomniane ułomności nie zmieniają faktu - zwłaszcza w kontekście pokrycia sporego kawałka naszego globu naprawdę dobrymi mapami wektorowymi - że traktując raster jako uzupełnienie map wektorowych możemy na zaproponowane rozwiązanie spojrzeć z dużą dozą sympatii.
  Co prawda Garmin podaje na swojej stronie przepis w jaki sposób przygotować rastrowy plik w formacie KMZ, obsługiwanym przez odbiorniki Garmina, ale jest to sposób raczej mało przyjazny, zwłaszcza dla tych użytkowników, których rastrowe zasoby mapowe obejmują głównie mapy w formacie OziExplorer.
  Z tego powodu chciałbym pokazać jakimi narzędziami można przekonwertować do postaci KMZ mapę w formacie Oziego. Do tego celu wykorzystamy przykładową, czarno białą mapę topograficzną użytą w artykule o kalibracji map. Przypomnę, że mapa po kalibracji składa się z dwóch elementów:

   Chcąc skorzystać z moich plików testowych, należy kliknąć na w.wym. elementy prawym przyciskiem myszy i używając opcji: "zapisz jako", zapisać oba pliki na dysku.
Przy okazji dwie uwagi:
  • edytując (np. notatnikiem) plik "map" zauważymy w 3 linii informację o lokalizacji pliku graficznego, w postaci pełnej ścieżki dostępu:

         Taki wpis dokonany przez program Ozi Explorer na etapie kalibracji mapy, może w niektórych aplikacjach mapowych spowodować nieco zamieszania, gdybyśmy np. pliki skopiowali do innego folderu/katalogu niż ten użyty na etapie kalibracji. Dlatego też proponuję skorygować ten zapis do uproszczonej i uniwersalnej - akceptowanej przez wszystkie aplikacje postaci:

  • Pliki CustomMaps w formacie KMZ nie mogą w nazwie zawierać spacji, znaków specjalnych, polskich znaków diaktrycznych, myślników etc, gdyż istnieje ryzyko że odbiornik nie odczyta takiego pliku.

Wobec powyższego nazwa: n-33-142-b jest nieprawidłowa i na etapie konwersji do formatu KMZ nazwę pliku docelowego będzie trzeba zmienić np. na: N_33_142_b

* Global Mapper, czyli komercyjne narzędzie do wszystkiego
   Mój ulubiony program do obróbki map, to komercyjny Global Mapper który poza dość rozbudowaną funkcją ręcznego przygotowania plików KMZ o określonych parametrach, posiada - począwszy od wersji 11.1 - funkcję "szybkiej konwersji" na format strawny dla Garmina.
   Zaletą GlobalMappera jest to, że obsługuje większość układów współrzędnych (uwaga: nie obsługuje "Borowej Góry") stosowanych na dzisiejszych mapach. W efekcie otwarcie mapy w formacie OziExplorerer (nie ma znaczenia czy wskażemy na plik "map" czy na plik graficzny, ważne aby oba pliki miały zgodną nazwę i znajdowały się w tym samym katalogu/folderze) w dość nietypowym układzie jakim jest np. Pułkowo 1942 powoduje załadowanie mapy z odpowiednimi parametrami:

Po wczytaniu mapy:

  • Wybieramy funkcję: GPS -> Send Raster Maps ..... 

  • potwierdzamy ustawienia domyślne
  • wbrew nazwie funkcji (wyślij do podłączonego urządzenia Garmin) wskazujemy dowolną lokalizację zapisu pliku
  • nadajemy nazwę pliku zgodną z zasadami, czyli  bez spacji, znaków specjalnych, polskich znaków diaktrycznych, myślników etc
  • i czekamy na wynik konwersji.

   Tak przygotowany pliczek kopiujemy na kartę pamięci, bądź do odbiornika - w obu przypadkach do katalogu: Garmin\CustomMaps, w efekcie w odbiorniku, w opcji: Konfiguracja mapy -> Wybierz mapę, powinniśmy gdzieś w pobliżu końca listy ujrzeć napis: "Własne mapy" a pod nim nazwę naszego pliku. Uaktywniamy mapę, po czym możemy cieszyć oko rastrem w Garminie.

  Mapka wygenerowana GlobalMapperem z ustawieniami domyślnymi będzie się wyświetlała "pod" wybranymi obiektami ewentualnie włączonych map wektorowych (tu: GPMapa Topo 2009), dając dość ciekawą hybrydę wektorowo - rastrową co widać na ilustracji obok.

Hybryda wektorowo rastrowa
 
* OziMapToKMZ, czyli za darmo też można
  Możliwość konwersji map z formatu OziExplorera na format KMZ za pomocą programu OziMapToKMZ omówił szczegółowo na "Garniaku" w wątku zatytułowanym: OziToKMZ rastry Oziego do colorado nasz kolega Krzysztof "soko" z Poznania. Konwersja map tym bezpłatnym programem - posiadającym na pierwszy rzut oka dość znaczną ilość opcji - jest w zasadzie tak samo prosta jak komercyjnym GlobalMapperem.
   Jedynym problemem jest to, że OziToKMZ obsługuje w zasadzie wyłącznie mapki skalibrowane w WGS-84, a co za tym idzie takie "wynalazki" jak czarno białe sztabówki w układzie Pułkowo 1942 po konwersji tym narzędziem nie będą miały prawidłowych georeferencji, a to - z praktycznego punktu widzenia - oznacza że nie trafią we właściwą lokalizację, czyli krótko mówiąc będą przesunięte - czasami dość znacznie - względem rzeczywistości, co wyraźnie widać na ilustracji obok: blisko 200m przesunięcie na tle wektorowej GPMapy Topo.
  Ominięciem problemu jest wstępna obróbka mapy i doprowadzenie do układu WGS84 np. niezarejestrowaną wersją programu
GPS MapEdit. Przypominam, że te dodatkowe działania dotyczą wyłącznie map skalibrowanych w innym układzie niż WGS-84.
Błędna interpretacja układu współrzędnych przez OziMapToKMZ
  Po uruchomieniu programu GPS MapEdit, wybieramy: File->Open po czym odszukujemy naszą mapkę, a dokładniej plik georeferencyjny, gdyż próba bezpośredniego załadowanie pliku graficznego zakończy się niepowodzeniem.
  Następnie klawiszami +/- dobieramy zoom - skalę mapy. Optymalnym - przynajmniej na początek - wydaje się zastosowanie nieco większej skali
(większe zbliżenie) od skali naturalnej, a zatem sytuacja, w której na ekranie PC-ta 1cm będzie odpowiadał mniej więcej 1cm papierowego odpowiednika. Oczywiście rozmiar piksela inny na monitorze, inny w odbiorniku spowoduje rozbieżności, dlatego docelowo ostateczny optymalny widok mapy należy dobrać metodą prób i błędów.
 
   Po dobraniu zoomu mapy wybieramy opcję: File->Export->OziExplorer map. Pojawia się menu kontekstowe, w którym wskazujemy katalog docelowy (ścieżkę dostępu) nowej mapy wraz z nazwą plików map i bmp (przypominam o unikaniu znaków specjalnych i myślników), po czym aktywujemy SetWholeMap i przyciskiem Zakończ, zapisujemy pliki na dysku. 
  Wygenerowany plik map będzie zawierał pełną ścieżkę dostępu do pliku graficznego, co w większości przypadków nie będzie problemem, ale - o czym wspomniałem nieco wyżej - można "dla porządku" poprawić ten wpis edytując plik "map" np. notatnikiem, w celu uniknięcia w przyszłości ewentualnych  niespodzianek w przypadku gdybyśmy chcieli zestaw "map + bmp" przekopiować do innego folderu.
   Posiadając pliki mapowe w formacie Oziego, w WGS-84, możemy dokonać konwersji mapy do postaci KMZ, czyli pliku strawnego dla Garmina. Do tego celu wykorzystamy program OziMapToKMZ.
   Po uruchomieniu programu:
  1. Odszukujemy plik mapowy w formacie OziExplorer
  2. Wskazujemy folder (katalog) docelowy, do którego ma być zapisany plik KMZ
  3. Podajemy nazwę pliku KMZ (przypominam o niestosowaniu myślników, znaków specjalnych etc.)
  4. Klikamy na "Split map into smaller pieces ......
  5. Gotowy plik KMZ kopiujemy na kartę pamięci odbiornika do folderu: Garmin\CustomMaps

...... koniec.

  Przy okazji zwracam uwagę na ustawienia Compression Quality i Draw Order. Pierwszy z nich odpowiada za stopień kompresji (jakość) obrazka, drugi wskazuje na sposób wyświetlania w odbiorniku. Przy ustawieniu widocznym na screenshocie (DrawOrder=30) możliwe będzie łączne (hybrydowe) wyświetlanie mapy rastrowej wraz z wektorową (np. CityNavigatorem czy UMP), co wydaje się rozwiązaniem optymalnym, gdyby się bowiem okazało, że w określonej sytuacji lepszym rozwiązaniem będzie wyświetlanie samej mapy rastrowej, wyświetlanie mapy wektorowej możemy wyłączyć z poziomu odbiornika. Przy zastosowaniu wyższego Draw Order, raster zasłoni całkowicie mapę wektorową i z poziomu odbiornika niczego już nie zmienimy.
 
* mapc2mapc - inna możliwość bez kosztów
   Inną darmową możliwością wygenerowania własnych plików KMZ jest freewarowa wersja programu mapc2mapc. Więcej na ten temat można przeczytać w dziale Programy w odrębnym artykule: mapc2mapc - generowanie rastra dla Garmina.
 
* Kilka praktycznych uwag
  CustomMaps (czy alternatywnie pliki JNX) mogą bazować na różnych źródłach. Mogą to być własne skany map papierowych, rastry turystyczne zakupione u wydawcy, a także serwisy internetowe i serwery WMS. Więcej na ten temat można przeczytać w dziale Mapy w artykule: Źródła map rastrowych.
  Jak wspomniałem we wstępie, system CustomMaps stanowi w odbiornikach Garmina swojego rodzaju "protezę" uzupełniającą tylko podstawowy system bazujący na mapach wektorowych. Jeżeli tak właśnie podejdziemy do zagadnienia, wówczas ograniczenia tego rozwiązania staną się jeżeli nie mniej uciążliwe, to przynajmniej mniej stresujące. A jakież to ograniczenia?
   Rozpoznane i sprawdzone w praktyce ograniczenie to przede wszystkim limit sumarycznej ilości 100 kafelków z jakich składa się plik (pliki) KMZ. Ten parametr możemy stosunkowo łatwo kontrolować. W przypadku konwersji mapy programem OziMapToKMZ wystarczy tylko śledzić i ewentualnie odpowiednio ustawić parametry: Number of Tiles X (ilość kolumn) oraz Number of Tiles Y (ilość wierszy) i w efekcie kontrolować końcową ilość kafelków w pliku KMZ. W przypadku generowania mapy Global Mapperem z użyciem standardowej opcji: "GPS->Send Raster Maps ...." problem kontroli ilości kafelków przejmuje program. Ich ilość na pewno nie przekroczy 100. Sytuacja komplikuje się nieco, gdy będziemy chcieli mieć w odbiorniku kilka plików KMZ. Limit obejmuje sumaryczną ilość kafelków ze wszystkich plików, zatem tu automatyczna kontrola limitu 100 kafelków dla jednego pliku KMZ, jaka występuje w GlobalMapperze w opcji "GPS->Send Raster ...." zawiedzie. W takiej sytuacji OziMapToKMZ z możliwością dzielenia rastra na kolumny i wiersze, czy ewentualne wykorzystanie GlobalMappera ale z opcją: "File->Export Web Formats->Export KML/KMZ ...." wydaje się być lepszym rozwiązaniem. W tym drugim przypadku (GlobalMapper) należy wyłączyć opcję "Super Overlay Setup", natomiast ilość kafelków, a dokładniej ilość kolumn i wierszy zadeklarować w zakładce Girdding w polach: Specify Numbers of Rows and Columns.
   Wydawać by się mogło, że takie działania rozwiązują problem, gdyż ustalając małą ilość kafelków na jedną mapę (w skrajnym przypadku 1 mapa = 1 kafelek) moglibyśmy przygotować aż 100 map rastrowych. Niestety. System posiada również inne ograniczenia, w tym w wielkości pojedynczego kafelka w MB i w pikselach, co w powiązaniu z ilością kafelków zawsze sprowadza się do jednego wniosku: zbyt dużej mapy, a dokładniej zbyt dużego rastra określonego zarówno ilością pikseli jak też ilością MB po prostu do Garmina wgrać nie można.
   Dla porządku poinformuję, że Garmin nie zaleca stosować większych kafelków niż 1024x1024 pikseli, gdyż po przekroczeniu tej wielkości może nastąpić zauważalny spadek jakości wyświetlania mapy. Trudno dyskutować z obwarowaniami narzuconymi przez firmę, która udostępnia daną aplikację, jednak praktyka pokazuje, że nawet przy kafelkach o wymiarach zbliżonych do 2500x2500 nie widać pogorszenia jakości wyświetlanej mapy.
   Drugi problem jest istotniejszy i dotyczy ograniczenia pojedynczego kafelka do wielkości 3MB. W praktyce stosunkowo łatwo przekroczyć tę wielkość, jeżeli zastosujemy niską kompresję (wysoką jakość) plików JPG. Dlatego też, niezależnie od tego czy używamy OziMapToKMZ, czy GlobalMappera z opcją "GPS->Send Raster Map ...." nie należy "szaleć" z parametrem Image Quality (Compression Quality) i używać go na poziomie nie wyższym niż 80-85%. W takim przypadku kafelki przeciętnej mapy turystycznej, czy nawet dwóch map turystycznych wysokiej rozdzielczości przygotowywanych razem powinny zmieścić się w limicie 100 kafelków o rozmiarach nie przekraczających 3MB.
   Co ciekawe, problem jakości rastra w Garminie zależy jeszcze od jednego parametru: od obszaru (określonego w km.kw realnej powierzchni). Sprawę dość trudno opisać, ale wygląda to tak jakby odbiornik całkiem normalnie, wyglądające przy podglądzie w komputerze pliki KMZ (dokładniej JPGi z KMZ) lokalizował w dość wysokim zoomie - powiedzmy 2km, po czym powiększał, renderowal ten początkowy obrazek, nie dostrzegając szczegółów rastra. Problem dobrze ilustruje następujący przykład: 6 map Compassu (od Podhala po Bieszczady) wgranych do Global Mappera, po czym zapisanych w pliku KMZ opcją: GPS->Send Raster ..... Efekt w odbiorniku jest następujący: 
  Na ilustracji wyżej - na pierwszy rzut oka - nie widać jeszcze niczego niepokojącego, ale po przezoomowaniu mapy okazuje się, że raster wygląda fatalnie, co widać po prawej.  Wniosek: nie wgrywajmy na kartę mapy obejmującej zbyt duży obszar, nawet jeżeli formalne ograniczenia tj.
  • ilość kafelków
  • wielkość w pikselach
  • wielkość w MB

nie zostałyby przekroczone.

   Wydaje się, że połączenie dwóch rastrów Compassu, przykładowo: zachodniego arkusza Bieszczadów i wschodniego arkusza Beskidu Niskiego stanowi swojego rodzaju optimum. W przypadku gdybyśmy chcieli korzystać z większej ilości map rastrowych należy albo umieścić je na różnych kartach (żonglerka kartami), albo - jeżeli mamy telefon komórkowy z menadżerem plików - stosować zarządzanie mapami (zmiana rozszerzenia, zmiana lokalizacji) z poziomu komórki.
   Nie są to może zbyt wygodne rozwiązania, ale niestety innej drogi - jeżeli chodzi o CustomMaps nie ma. Alternatywą jest korzystanie z
plików JNX.
 
Zbyt duży obszar objęty mapą - widoczny spadek jakości.
   Na zakończenie drobna uwaga na temat "łączenia" arkuszy map. Wydaje się, że tej materii Global Mapper jest niezastąpiony. Czy dotyczy to typowych map turystycznych np. rastrów Compassu, czy map pobranych z serwisów interenetowych, wczytujemy stosowne pliki do GlobalMappera, po czym spokojnie generujemy jeden plik KMZ - jak w przykładzie wyżej. Dodatkowo już na etapie zapisu pliku KMZ na dysk, możemy w zakładce Export Bounds określić obszar eksportu. Mało tego, za pomocą GlobalMappera i funkcji Export Bounds z wykorzystaniem "pośrednich" plików zapisywanych na dysku (np. w formacie geotiff) mamy możliwość stosunkowo łatwego cięcia, po czym ponownego składania map.
   W przypadku stosowania darmowego oprogramowania jakim jest OziMapToKMZ, "składanie" mapy może nastąpić we wspomnianym wyżej GPSMapEdicie. Jest też możliwość konwersji kilku przyciętych GPSMapEditem mapek, do kilku plików KMZmapek, wyświetlanych wspólnie w odbiorniku.
   Sposób przycięcia mapy GPSMapEditem - prezentuje ilustracja, którą opublikował kolega Krzysztof "soko", w swoim obszernym
artykule na temat "CustomMaps", do przeczytania, którego serdecznie namawiam.
 
 www © GPS Maniak  
------------------------------------
Lech Ratajczak XII 2010