Na razie bez zbędnego wdawania się w szczegóły, uproszczona instrukcja „jak” poradzić sobie z kompilacją mapy z danych OpenStreetMap na Garminowy format IMG.
Po co?
- Można skompilować mapy całych kontynentów na raz – serwisy mapowe w internecie nie umożliwiają ściągnięcia więcej niż paru krajów na raz. A to uniemożliwia routing między krajami i wygodne planowanie większych podróży. Kompilować całego świata nie polecam, może nawet to i by działało, ale mało kto ma taki sprzęt, na którym uda się przeprowadzić taką operację.
- Można dostosować mapę do swoich preferencji. Każdy element z danych OSM jest transformowany do typów danych używanych przez Garmina. Od tych reguł zależy jak mapa jest wyświetlana, oraz w jaki sposób działa routing.
Co jest mi potrzebne?
Mocny komputer. Dla Europy ok 200GB wolnego miejsca na dysku, minimum 2GB wolnego RAMu. Polecam więcej, szybciej się skompiluje.
Oprogramowanie – Kompilatorem jest mkgmap. Stąd potrzeba pobrać najnowsze wersje mkgmap i splitter. Całość jest napisana w Javie, więc potrzebujemy mieć komputer z zainstalowanym JRE (Java Runtime Environment).
Style – są tym, co odpowiada za transformowanie typów danych OSM do Garmin IMG. Mkgmap posiada domyślny zestaw styli, ale polecam pobrać style stąd. Pewnym problemem jest to, że do pobrania trzeba mieć zainstalowane SVN. Dla Windowsa stąd (linuksiarze sobie poradzą).
svn checkout http://mkgmap-style-sheets.googlecode.com/svn/trunk/ mkgmap-style-sheets-read-only
Jakie dane muszę pobrać?
Polecam nie wybierać katalogu „latest”, bo on codziennie jest odświeżany, co będzie skutkować zerwaniem połączenia lub koniecznością pobrania od nowa.
- Dane mapy. Np. stąd http://download.geofabrik.de/europe.html. Polecam brać wersję pbf (najmniejszy rozmiar)
- Bounds – granice. Np. stąd – http://osm2.pleiades.uni-wuppertal.de/bounds/
- Sea Polygons – Np. stąd – http://osm2.pleiades.uni-wuppertal.de/sea/
- Nazwy miejscowości (służą do nazywania obszarów). Np. stąd http://download.geonames.org/export/dump/. Potrzeba ściągnąć jeden z plików cities, np. cities1000.zip
Kompilacja.
Pierwszym etapem jest dzielenie mapy na kawałki przez splitter. Im lepiej mapa zostanie podzielona, tym mniejszy rozmiar osiągnie i tym lepiej będzie działał routing na niej.
Używam następującego command line.
java -jar -Xmx4096m splitter/splitter.jar --geonames-file=cities1000.zip --max-areas=1024 --output=o5m --output-dir=map_splitted --precomp-sea=sea.tar.bz map_pbf/europe-latest.osm.pbf
Objaśnienie: (pełna dokumentacja)
- -Xmx4096m :- ilość pamięci w MB przydzielona maszynie wirtualnej Javy. Zależy od tego ile mamy wolnej pamięci. Im więcej, tym lepiej.
- splitter/splitter.jar :- ścieżka dostępu do splittera.
- –geonames-file=cities1000.zip :- ścieżka do zipa z nazwami miejscowości.
- –max-areas=1024 :- maksymalna liczba obszarów w kawałku. Większe liczby wymagają więcej pamięci (domyślnie 512).
- –output=o5m :- format plików wynikowych. Domyślnie pbf, który zajmuje mniej miejsca na dysku, ale jest wolniejszy
- –output-dir=map_splitted :- folder do jakiego zostaną wyrzucone wyniki
- –precomp-sea=sea.tar.bz :- ścieżka do pliku z Sea Polygons.
- map_pbf/europe-latest.osm.pbf :- ścieżka do pliku z danymi mapy.
Jeśli już kiedyś włączaliśmy splitter i było to niedawno, możemy po prostu podać wygenerowane obszary, zamiast kazać mu je liczyć od początku. Wygenerowane obszary są w pliku areas.list . Aby ich użyć dodajemy przełącznik ze ścieżką do tego pliku --split-file=map_splitted/areas.list
Jeśli splitter zadziałał i wypluł wyniki bez błędów, możemy przygotować się do właściwej kompilacji. Na tym etapie trzeba mieć wybrane i gotowe style. O stylach i ich edycji jest cały manual.
Mój command line (pełna dokumentacja)
java -jar -Xmx4096m mkgmap/mkgmap.jar --mapname=43000001 --route --add-pois-to-areas --tdbfile --index --bounds=bounds.zip --remove-ovm-work-files=true --output-dir=map_compiled --precomp-sea=sea.tar.bz --make-opposite-cycleways --style-file=mkgmap/mkgmap-style-sheets-read-only/styles/world --verbose -c map_splitted/template.args
- -Xmx4096m :- ilość pamięci w MB przydzielona maszynie wirtualnej Javy. Zależy od tego ile mamy wolnej pamięci. Im więcej, tym lepiej.
- mkgmap/mkgmap.jar :- ścieżka do mkgmap
- –mapname=43000001 :- jakiś numer. Dwie mapy nie mogą mieć tego samego numeru, bo będzie problem.
- –route :- włączy routing
- –add-pois-to-areas :- wygeneruje POI dla każdego obszaru
- –tdbfile :- plik dla mapsource/basecamp
- –index :- wygeneruje index adresów
- –bounds=bounds.zip :- plik z granicami
- –remove-ovm-work-files=true :- usuwa dodatkowe pliki map poglądowych po przetworzeniu
- –output-dir=map_compiled :- katalog wyjściowy
- –precomp-sea=sea.tar.bz :- ścieżka do pliku z Sea Polygons.
- –make-opposite-cycleways :- umożliwia routing rowerem na ulicach jednokierunkowych, pod prąd 😉
- –style-file=mkgmap/mkgmap-style-sheets-read-only/styles/world :-plik ze stylem. Bez tego zostaną użyte domyślne style mkgmap
- –verbose :- żeby wypluwał informacje do konsoli
- -c map_splitted/template.args :- plik wygenerowany przez splitter w poprzednim etapie
Kompilacja zajmuje długo, więc lepiej nie robić tego na ostatnią chwilę przed wyprawą. Specjalnie nie pisałem o wypluwaniu, od razu, pliku IMG do wgrania w urządzenie. Czemu? Plik będzie za duży do wgrania, w systemie plików FAT32 maksymalny rozmiar pliku to 4GB, Europa jest większa. Zatem warto wgrać całą mapę do Mapsource/Basecamp, a potem wysłać potrzebne kawałki do urządzenia, by nie przekroczyć 4GB. Zatem…
Jak wgrać taką mapę do Mapsource/Basecamp?
Trzeba sporządzić odpowiednie wpisy w rejestrze
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Garmin\Mapsource\Families\FAMILY_125] "IDX"="C:\\Documents and Settings\\Administrator\\Desktop\\map_compiled\\osmmap.mdx" "MDX"="C:\\Documents and Settings\\Administrator\\Desktop\\map_compiled\\osmmap_mdr.img" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Garmin\Mapsource\Families\FAMILY_125\1] "Loc"="C:\\Documents and Settings\\Administrator\\Desktop\\map_compiled\\" "Bmap"="C:\\Documents and Settings\\Administrator\\Desktop\\map_compiled\\osmmap.img" "Tdb"="C:\\Documents and Settings\\Administrator\\Desktop\\map_compiled\\osmmap.tdb"
Gdzie
C:\\Documents and Settings\\Administrator\\Desktop\\map_compiled
Jest katalogiem skompilowanej mapy. Dla systemów 32 bitowych usuń wpierw „Wow6432Node\”. Numer przy „Family” jest dość dowolny, byleby był unikalny (inaczej nadpiszemy inną mapę).
Ciekawostka. Mapa dobrze działa nawet wtedy, gdy jest zlokalizowana w udziale sieciowym (np shared folders z VirtualBoxa).
Działa?
Następnie uruchom Mapsource/Basecamp i sprawdź, czy wszystko bangla.
Świetny poradnik, skorzystałem i przygotowałem skompilowaną mapę jednego województwa, ale mam problem. Jak z otrzymanych plików
63240001.img
63240002.img
osmmap.img
osmmap.mdx
osmmap.tdb
osmmap_mdr.img
przygotować obraz jak gmapsupp.img ktory mozna wgrac do nawigacji.
Jest wiele metod. Ja zazwyczaj wysyłam przez Garminowy Basecamp. Można też użyć gmaptool i opcji scalaj.