Kompilacja OpenStreetMap pod Garmina

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.

  1. Dane mapy. Np. stąd http://download.geofabrik.de/europe.html. Polecam brać wersję pbf (najmniejszy rozmiar)
  2. Bounds – granice. Np. stąd – http://osm2.pleiades.uni-wuppertal.de/bounds/
  3. Sea Polygons – Np. stąd – http://osm2.pleiades.uni-wuppertal.de/sea/
  4. 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.

2 thoughts on “Kompilacja OpenStreetMap pod Garmina”

  1. Ś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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *