Pragnę tym artykułem przybliżyć przeciętnemu urzytkownikowi Garmina sposób na tworzenie i edytowanie map wektorowych. Przy tworzeniu tego opracowania kożystałem z materiałów publikowanych na stronie dyskusyjnej pl.rec.gps oraz dzięki artykułom Janusza GpsManiaka.
1. podstawowe funkcje edytora GPS MapEdit
Podstawowym narzędziem pozwalającym na wykonanie mapy w formacie Garmina tj. pliku *.img jest program kompilujący
cgpsmapper. Cgpsmapper przetwarza plik wsadowy w tzw. "formacie polskim" (.*.mp) na plik wynikowy w postaci mapy Garmina.
Do pracy z mapami i przygotowania pliku wsadowego dla cgpsmappera służy program
MapEdit. To program typu shareware, ale dla naszych potrzeb w 100% wystarczy wersja niezarejestrowana. Osobiście używam wersji przygotowanej przez
Michaiła Sotina. Publikowany przez Michaiła Service Pack - jest w postaci nieskompilowanego źródła , zatem polecam wizytę na stronie
Rafała Fitta i pobranie pełnej skompilowanej wersji MapEdit+Service Pack (nie podaję bezpośredniego linku ponieważ jest to program cały czas rozwijany i co chwilę ukazuje się poprawiona wersja).
UWAGA Po pierwszym uruchominieniu programu GPS Map Edit w celu uniknięcia przypadkowych przesunięć obiektów ZDECYDOWANIE zaleca się wyłączenie opcji Snap to Gird !!!
(Tools --> Options)
Następnie wybieramy mapkę podkładową , ja kożystam z zestawu map "sztabówek" wojskowych z końca lat 80 , dostępne są na aukcjach internetowych w postaci 3 płyt CD , są one skalibrowane co jest bardzo wygodne bo wczytujemy tylko plik kalibracji , a obraz jpg jest układany automatycznie tam gdzie jego miejsce.
Do dodawania obiektów służy funkcja Add. Po uruchomieniu programu tą funkcją możemy wczytać plik mapy, na którym będziemy pracować. Ale opcja Add służy również do dodania określonego pliku do pliku obecnie edytowanego. Celowo używam słowa plik, bo operacja ta dotyczy zarówno podkładów jak i map wektorowych w formacie polskim, lub plików img.
UWAGA Nie należy łączyć tą metodą mapek wektorowych zarówno w postaci "formatu polskiego" czyli. *.mp jak też "formatu Garmin" czyli *.img - pochodzących z różnych źródeł. Ze względu na możliwość różnej struktury warstw (o czym za chwilę) operacja łączenia prawie zawsze skończy się niepowodzeniem.
Jednak bez problemu dzięki funkcji Add możemy np. wczytać kolejny podkład (jeżeli Twoja karta graficzna na to pozwoli). Czynność tę możemy wykonać na każdym etapie tworzenia mapy. Jeżeli Twoja karta graficzna jest zbyt słaba i nie pozwala na większą liczbę wczytanych podkładów - zwłaszcza kolorowych, to w dowolnym momencie możesz dany podkład usunąć, aby wczytać następny.
Usunięcie podkładu odbywa się przez wskazanie go (w aktywnej funkcji Select) kursorem i kliknięciu prawym przyciskiem myszy - reszta jest oczywista.
Zapamiętaj ! Podobnie jak w innych programach wskazanie obiektu (w aktywnej funkcji Select lub Move) i kliknięcie lewym przyciskiem powoduje jego zaznaczenie, a prawym zaznaczenie i wywołanie okna dialogowego.
UWAGA przy aktywnej funkcji Select bardzo ostrożnie używaj lewego przycisku myszy, gdyż łatwo w przypadkowy, a co gorsza niezauważalny sposób przesunąć wskazany obiekt mapy wektorowej.
Wykonamy naszą mapkę za pomocą podkładu z mapy: n-33-142b.map. W pierwszej kolejności ustawiamy właściwości mapy opcja: File --> Map Proporties (lub kombinacjia klawiszy [Alt]+[Enter]) Pojawia się okno Map proporties, w którym musimy zmodyfikować dwie zakładki.
Pierwsza z nich to Header tu podajemy dwie wartości:
ID - 8 cyfrowy numer mapy, nadamy mapce numer 48000000
Name - Nazwa mapy (będzie m.in. wyświetlana w odbiorniku, a także programie MapSource). Tu brak przeciwskazań do używania takich samych nazw dla różnych map. Wygodniej jednak każdą mapkę nazywać odmiennie. Dla naszego przykładu wprowdzimy nazwę: J_GORECKIE (Jezioro Góreckie)
Druga zakładka to Level. Każdy kto miał styczność z programami do obróbkl grafiki np. AutoCadem, Adobe, czy Corelem rozumie pojęcie warstw. Pracując z Mapedit musimy cały czas mieć świadomość, że mapka jest przeznaczona dla odbiornika, dlatego też pojęcie warstw (level) musimy wyjaśnić sobie na poziomie odbiornika GPS.
Kliknij na Insert Before. Pojawiły się dwa levele. Zawsze ostatni level (tu: level_1) jest levelem nieaktywnym, a zatem w chwili obecnej mamy jeden level aktywny (level_0). Inaczej mówiąc mamy mapkę "jednowarstwową".
Zobaczmy co jest w "Level setting --> Bits". Mamy do wyboru 9 aktywnych leveli o numerach od 16 do 24. Każdemu levelowi przypisany jest konkretny overzoom odbiornika (lub dwa - tak jak np. 200-300m). Obrazowo rzecz ujmując: gdybyśmy zaprojektowali w MapEdit mapę o 9 levelach, to w wyniku kompilacji uzyskalibyśmy dziewięciowarstwową mapę, z których poszczególne levele byłyby widoczne w następujący sposób: przy overzoom=30 km widzielibyśmy mapę bazową przy overzoom=20km widzielibyśmy level o nazwie 16 ........ przy overzoom=500m level o nazwie 22 itp. To wydaje się logiczne. Po co jednak projektować tak rozbudowne mapy ? W praktyce - dla naszych zastosowań wystarczą 4 levele. (Emapa Nawigator ma 6 leveli). Na razie uaktywniliśmy 1 level (przypominam: ostatni jest zawsze niektywny). Nie zastanawiając nad tym, który level mamy podświetlony, wprowadźmy następne 3 aktywne levele (Insert before). Następnie level po levelu w ustawieniach: Level setting --> Bits oraz Level setting --> MapSource range poprawiamy ich wartości by doprowadzić do takiej konfiguracji:
Ostatni level (tu: level_4) jest levelem nieaktywnym zatem mamy aktywne 4 levele o nazwach: od 0 do 3. Moim zdaniem jest to optymalne ustawienie, ale to rzecz gustu i oczywiście docelowo będziesz mógł posprawdzać jaki układ Tobie odpowiada najbardziej.
A o oto jak w takim układzie będzie wyglądało wyświetlanie poszczególnych leveli w odbiorniku (w odbiorniku szczegółowść wyświetlania powinna być ustawiona na - "NORMALNA")
Oznacza to że jeżeli pełną ilość szczegółów (obiektów) umieścimy w level_0, a w poszczególnych levelach począwszy od 1 - wzwyż ilość obiektów będzie malała, to "pełną" mapę ze wszystkimi szczegółami zobaczymy dopiero przy overzoom=300m lub mniejszym. Myślę, że to powinno być standardem. Emapa nawigator ma co prawda level_0 na poziomie overzoom=120m, ale POI włączją się już przy level_1 tj przy overzoom=300m czyli ...... tak jak u nas. Zmiany dotyczące powiązań poszczególnych overzoomów i leveli można zmienić - na poziomie odbiornika przez zmianę ustawienia "szczegółowość" wyświetlania.
UWAGA Zastanów się, co może się stać jeżeli do tak skonfigurowanej mapy będziesz chciał dograć funkcją Add mapkę *.mp w której np. level_2 będzie przypisany zoomowi=3 km - czyli inaczej niż u nas ? To nie może się udać. Ale MapEdit nie jest na tyle zaawansowanym narzędziem aby Ciebie o tym poinformować. Prawie na pewno program się wyłoży, a właściwie jeszcze gorzej. Nie komunikując Ciebie o błędzie program będzie działał dalej, ale mapka będzie wadliwa. Łączenie mapek, w których ilość leveli lub ustawienia leveli (GPS zoom, MapsSource zoom) są różne, w większości przypadków doprowadzi do powstania "mapki niewidzialnej".
Po wykonaniu powyższych czynności jesteśmy w 100% przygotowani do wykonania mapy wektorowej. Teraz dla bezpieczeństwa zapisujemy skonfigurowany podkład opcją: File --> Save As
Proponuję plikowi nadać roboczą nazwę 001 (program doda rozszerzenie i w efekcie otrzymamy 001.mp).
Ponieważ Twój plik ma w chwili obecnej nazwę "arc" zamknij go - funkcja Close
Wczytaj ponownie 001.mp
MapEdit ma domyślnie opcję View-->Levels ustawioną na wartość Auto. Ze względu na wielkość podkładu z automatu ukazał się level_2. Gdybyś teraz naniósł jakikolwiek obiekt na mapę to zostanie on umieszczony w level_2 !!!
Ponieważ wszystkie obiekty musimy nanosić w level_0 to bezwzględnie przełącz opcję View-->Levels na level_0. Najłatwiej to zrobić naciskając klawisz [0] z klawiatury numerycznej.
UWAGA nanoszenie obiektów na mapę odbywa się zawsze w level_0
Teraz klawiszami [+] i [-] z kalwiatury numerycznej możemy zmienić skalę podglądu, następnie przesunąć podkład na interesujący nas reojon i rozpocząć tworzenie obiektów opcją "Create object". Mamy tu 3 możliwości: Punkt, Linia, Wielokąt.
Wykonajmy teraz pierwszy obiekt naszej mapki. Z funkcji Create object wybieramy Polygon (wielokątąt) i wg naszego uznania (jeżeli chodzi o dokładność - ilość punktów) wypunktowujemy fragment Jez. Góreckiego. Kiedy postawimy ostani punkt przez [Esc] wywołujemy okienko dialogowe i zamykamy obiekt - End. Wybieramy odpowiedni typ obiektu np: 0x003c. Pojawia się okienko EDYTORA NAZWY naciskamy ESC, aby przejść dalej bez wprowadzania nazwy lub wprowadzamy nazwę + [Enter].
Pamiętaj: w dowolnym momencie kreślenia wielokątu bądź linii możesz nacisnąć [ESC] i wycofać błędnie postawiony punkt przez Remove last point, bądź całkiem zrezygnować z tworzenia danego obiektu Cancel.
Po wykonaniu 3 elementów mamy pełną mapkę Jez. Góreckiego z 2 wyspami.
Czas na zapoznanie się z opcjami dotyczącymi modyfikacji POJEDYŃCZEGO obiektu mapy.
Zacznijmy od funkcji Move points
Po wybraniu Move points dany obiekt zaznaczamy przez kliknięcie lewym przyciskiem.
Teraz możemy konkretny punkt wielokąta (lub linii) przesunąć w dowolne miejsce.
Ponadto klikając prawym przyciskiem myszy na krawędź wielokąta (bądź na linię) możemy wywołać okno dialogowe, pozwalające nam dodać punkt (Add point here), który następnie metodą opisaną wyżej można przesunąć.
Inne możliowści modyfikacji występują przy aktywenj funkcji Select.
Klikając na POJEDYŃCZY OBIEKT prawym przyciskiem otwieramy okno dialogowe, w którym mamy poza typowymi (cat, delete) funkcję: Modify, a w niej możliwość zamiany w POJEDYŃCZYM OBIEKCIE
takich parametrów jak: nazwa (Label), typ oraz level, od którego ma być widoczny dany obiekt (patrząc od strony najwyższego) Extended all elements up to level.
Teraz pora wspomnieć o dwóch możliwościach nadania nazwy dla Jez. Góreckiego. Jeżeli chcesz wykorzystać typową funkcję odbiornika, czyli wyświetlanie nazwy obszaru to możesz metodą opisaną powyżej tj: Modify --> Label wprowdzić nazwę np. do środkowej części jeziora (nie zalecam wpisywania nazwy do wszystkich 3-ech części). Jeżeli jednak będziesz chciał, aby to jezioro znalazło się w zaindeksowanym POI, to raczej nie nadawaj żadnej nazwy utworzonym poligonom. Wystarczy jak ją podamy na etapie tworzenia punktów.
Opisaną wcześniej metodą wykonajmy jeszcze w ramach prób fragment lasu. Do wykonania lasu polecam użyć obiektu typu: 0x052 Tundra oraz (ewentualnie) nadać nazwę (las). Odbiorniki kolorowe obiekt 0x052 wyświetlają na biało, dlatego zalecam użycie: 0x0014 National Park. Tak jak w przypadku wysp na jeziorze tak tu przypominam o pozostwaieniu "wolnych" polanek leśnych - i zbiorników wodnych. Co prawda w odbiorniku GPS woda ma priorytet wyświetlania nad tundrą, ale gdybyśmy chcieli docelowo zmienić typ obiektu, to lepiej wodę potraktować identycznie jak polany i .... pozostawić nie zalesioną.
Plik możemy zapisać. Polecam ponownie wykonać to opcją Save As i nadać nazwę 002.mp
Teraz dla zwiększenia czytelności naszej mapki włączmy funkcję przeźroczystości poilgonów Transparent polygons.
Włączamy funkcję rysowania linii Create object-->Polyline i tworzymy drogi przebiegające w okolicach jeziora, wykorzystując dla celów szkoleniowych następujące typy: 0x0004 0x0005 0x0006 - wg własnego uznania i jakieś wybrane ścieżki stosując typ: 0x000a. Następnie wyłączmy funkcję Show attachments i oto co mamy:
Możemy plik zapisać jako 003.mp, włączyć wyświetlanie podkładu i przejść do tworzenia punktów mapy Create object-->Point.
W ramach szkolenia proponuję nanieść 2 punkty: Lokalizację dyrekcji parku: WPN typ 0x6402 oraz nadanie nazwy jeziora: JEZ.GORECKIE typ 0x650d
Wszystkie dotychczas omówione opcje stanowią podstawowe narzędzia MapEdita. Teraz wydawałoby się, że nadszedł czas na projektowanie leveli. Przedtem parę moich pomysłów.
Nasz mapka szkoleniowa wykonanana na podkładzie topo nie posiada żadnych obiektów turystycznych. Obiekty te możemy nanieść na podstawie skalibrowanego kolorowego podkładu turystycznego. Można też nanieść je na podstawie własnych pomiarów (waypointów). Waypointy pobieramy z odbiornika np. programem OziExplorer DEMO (nie potrzeba żadnej mapki - wystarczy wczytać załączoną do oziego mapkę World). Dane te zapisujemy na dysku jako plik: *.wpt.
Zapisujemy mapkę jako 004.mp i zamykamy ją. Wczytujemy teraz matrycę tj. plik arc.mp. Ustawiamy level_0. Opcją Add dodajemy waypointy z pliku wpn_próby. Usuwamy podkład w postaci mapy n-33-142b (przypominam: aktywna funkcja Select - prawy przycisk myszy i del).
Moje waypointy to dwa parkingi i jedna ławeczka. Aby je przekonwertować na punkty mapy, używamy opcji zaznaczania (aktywna funkcja Select) i konwersji. Można to robić punkt po punkcie, ale ponieważ parkingi są blisko siebie i nie są rozdzielone innymi waypointami możemy wykonać tzw. zaznaczenie grupowe wg. obszaru.
Po kliknięciu przytrzymujemy lewy przycisk myszy i rysujemy otaczający określone punkty prostokąt.
Kursorem wskazujemy jeden z "zaznaczonych" punktów i prawym przyciskiem myszy wywołujemy okno dialogowe. Wybieramy Convert to --> Point
Pozostawiamy zaznaczony level_0, a następnie wybieramy typ (powiedzmy że parking bez indeksacji) 0x4d00.
W podobny sposób przekształcamy ławeczkę wybierając dla niej typ: 0x4a00
Wykonujemy znane już zaznaczenie grupowe wg obszaru, ujmując wszystkie obiekty mapy, a następnie używamy funkcji kopiuj Copy. Zamykamy plik arc (Close) - nie zapisując go (ewentualnie przed zamknięciem zapisując pod inną nazwą np: roboczy1). Otwieramy ostatnią wersję mapki - plik 004.mp
Następnie wklejamy obiekty ze schowka - funkcją Paste
Tak po tej czynności wygląda nasza mapka. Możemy ją zapisać jako 005.mp.
Teraz prawym przyciskiem myszy moglibyśmy uaktywnić dla wgranych punktów po kolei punkt po punkcjie (parkingi i ławeczka) opcję Modify-->Label i wykasować zbędne nazwy (i tak nie będą indeksowane).
Ale tu tego nie zrobimy. Nazwy zostaną
Uwaga! jeżeli chcesz połączyć obiekty z różnych map *.mp nigdy nie używaj funkcji Add, a tylko Copy/Paste. Pamiętaj o zachowaniu prawidłowych ustawień w levelach. Jeżeli będziesz musiał skopiować obiekty z level_2 mapki wyjściowej do level_0 mapki docelowej to najpierw z mapki wyjściowej usuń pierwsze dwa levele, tak aby obecny level_2 pozostał jako level_0 (MapProporties-->Levels-->Remove). UWAGA: takie łącznie obiektów może się nie udać, jeżeli jeden z plików nie jest "prawdziwym" plikiem źródłowym, lecz pochodzi z wczytanego do mapedita pliku img. W takim przypadku spójrz do arykułu: "Gdy brak źródeł....."
Do zakończenia prac nad plikiem źródłowym pozostało nam przypisanie obiektów do poszczególnych leveli. Zobaczmy jakie obiekty mamy na naszej mapce (File-->Map proporties --> statistics)
Mając wykaz zastosowanych typów obiektów przystępujemy do opracowania leveli. Tu w ramach przykładu przyjmijmy następujące włączanie się poszczególnych obiektów:
0x4a00 -- level_0
0x4d00 -- level_0
0x6402 -- level_0
0x650d -- level_1
0x0004 -- level_2
0x0005 -- level_1
0x0006 -- level_0
0x000a -- level_0
0x003c -- level_3
0x0052 -- level_3
W ten sposób w level_3 czyli overzoom= 3 km i 2 km, będziemy widzieli tylko zarys jeziora i granice lasów. Dróg nie będzie. Gdyby na naszej mapce były drogi krajowe lub międzynarodowe należałoby je umieścić w level_3. Drogi, które są na naszej mapce mogą spokojnie pojawić się dopiero w niższych levelach.
Do zdefiniowania leveli dla poszczególnych typów obiektów wykorzystamy funkcję grupowego zaznaczania wg typów.
Edit-->Select-->By type.
Wybieramy właściwy typ obiektów w celu wykonania "zaznaczenia" grupowego wg typów.
Po czym wskazujemy na jeden z "zaznaczonych" obiektów i prawym przyciskiem myszy otwieramy okno dialogowe. Wybieramy Modify --> Extend... po czym wprowadzamy z góry założoną wartość levela (tu: 1)
Następnie dezaktywujemy "zaznaczenie" [Esc] i wybieramy kolejny typ obiektów wg założonego schematu itd.
SZTUCZKI I KRUCZKI
Grupowe zaznaczanie obiektów można także wykorzystać do zaznaczenia kilku typów obiektów w tej samej sesji ! - w naszym przykładzie można np. zaznaczyć wszystkie obiekty typu 0x003c "Lake", a następnie - nie wprowadzając żadnych zmian - wszystkie obiekty typu 0x0052 "tundra" i dopiero potem wykonać Modify --> Extend all elements up to level.
Poza taką zbiorczą opisaną wyżej - automatyczną metodą projektowania leveli, obiekty na których Tobie wybitnie zależy możesz przenieść do wyższego levela przez pojedyńcze zaznaczenie i pojedyńczą modyfikację. Tak np. szczyty tatrzańskie możesz zdefiniować jako aktywne w level_2, ale same Rysy np już w level_3.
Grupowe zaznaczanie wg typów pozwala również łatwo zmienić typ dla całej grupy obiektów. Jeżeli np. podejmiesz decyzję zastąpienia typu lasów z 0x0052 "tundra" na 0x0050 "Forest" to niezależnie jak duża będzie to mapa - grupowe zaznaczenie obiektów wg typów załatwi sprawę w 5 sec.
Zapisujemy mapkę - jako 006.mp , a następnie jako 48000000.mp.
Przełączając (klawiatura numeryczna) poszczególne levele obejrzyjmy wynik naszej pracy:
Teraz ostatnia czynność: kompilacja cgpsmapperem.
UWAGA Jeżeli przygotowujesz swoją mapkę nie dla odbiornika Garmin, a dla PocketPC i przeglądarki RUSSA nie kompiluj mapki cgpsmapperem - po prostu wybierz opcję: "zapisz jako .... .rus"
Jeżeli posiadasz wersję co najmniej shareware lub zamierzasz skompilować mapkę na serwerze mapowym i chcesz mieć indeksację POI - to w ustawieniach mapy File-->Map proporties w zakładce GPSmapper zastosuj takie ustawienia. Po zmianie ustawień ponowny zapis (pod tą samą nazwą) i .....kompilacja: File-->Export--> Garmin IMG /Cgpsmapper. Wskazujemy scieżkę dostępu do cgpsmappera podajemy nazwę: 48000000 a na końcu Run.
Ciąg dalszy nastąpi. W następnym odcinku pokażę jak edytować istniejącą mapkę do swoich potrzeb.