osm2mp.pl: OSM -> Polish format converter

Great stuff, liosha. Routing across tiles really work, and POI indexing also work.

Just a minor error on line 279 of osm2mp.pl

          $poicountry = $country        if ($region);

maybe what you meant was

          $poicountry = $country        if ($country);

Ok, here is my way of a fully automatic process of downloading osm, creating a routable mp and then img and sending it to the Garmin device. And the osm, mp, and img file will be stored in a separate folder. Probably experts will find some problems in the maps created this way. So, I’m open for critics, as I want to learn of these. (I have just started dealing with this a few days ago.)

Part I: Required software:
download

  • groundtruth
  • mkgmap
  • osm2mp
  • sendmap
  • activeperl
    (14 MB for the first four plus 82 MB for Perl.)

activeperl needs to be installed, the other software can just be unzipped. To have the batch file at the end of this post running right away, create a folder with a name like “MapManager” (anywhere on your HD) In this folder create subfolders

  • GroundTruth
  • MKGMap
  • OSM2MP
  • Sendmap
  • MAPS
    and unzip the programs to their corresponding folder.

Part II: Completing Perl (description for Windows, on other systems this works differently)

  • Go to C:\Perl\bin
  • Start ppm.bat
  • select template-toolkit for adding
  • add template-toolkit to your perl installation

Part III: Choosing a part of the world map

  • go to www.openstreetmap.org
  • select a viewport you want to end up on your Garmin
  • click Permalink on the lower right of the page
  • select the URL and press Ctrl-C

Part IV: modifying the batch file.
In “MapManager” create a batch file “ManageMaps.bat” that looks like


set NAME=Chicago
md MAPS%NAME%
GroundTruth\groundtruth getdata -bu=“http://www.openstreetmap.org/?lat=41.785&lon=-87.766&zoom=9&layers=B000FTF
copy output.osm MAPS%NAME%%NAME%.osm
del output.osm
cd OSM2MP
osm2mp.pl …\MAPS%NAME%%NAME%.osm > …\MAPS%NAME%%NAME%.mp
cd …\MKGMap
java -jar mkgmap.jar --route …\MAPS%NAME%%NAME%.mp
cd …
copy MKGMap\63240001.img MAPS%NAME%%NAME%.img
del MKGMap\63240001.img
Sendmap\sendmap20 MAPS%NAME%%NAME%.img
echo DONE
pause

Modify the first line with a name describing your openstreetmap view and the third line via Ctrl-v with the corresponding URL. Save “ManageMaps.bat” and start it with a double click in the explorer. If you have your Garmin connected you can return after some time (that of course depends on the size of the map), and if there is “DONE” at the bottom of the cmd window, you can unplug your device and enjoy the map. ANyway, your map will be placed in MapManager\MAPS\NAME, where “NAME” is the value of the NAME variable in the first line of “ManageMaps.bat”.

perhaps you can paste this into the wiki page?

It’s fine, if someone does this, who knows better, where best to place it.

you could either create a new page and link to it from : http://wiki.openstreetmap.org/wiki/Routable_garmin_maps
or just add to the current page.

Version 0.65
http://gpsmapsearch.com/osm/osm2mp_v065.zip

  • added bbox cropping
  • added POI addresses
  • reimplemented turn restrictions - now both types (no_* and only_*) are supported
  • minor fixes

I then use ezMS to install in mapsource so that I can test the map’s routability before sending it to my gps device.

POI addresses and turn restrictions doesn’t yet work with mkgmap, looks great when compiled at mapcenter2 though. Maybe if you can create POI for roads we’ll then be able to search for street addresses as well :wink:

mkgmap can already create POI for roads. Use option --road-name-pois and you’ll get them in your map.
There’s also a patch for POI addresses, take a look at “POI Address support, Country Region autofill” thread in mkgmap mailing list: http://www.mkgmap.org.uk/pipermail/mkgmap-dev/2009q1/subject.html

afaik you don’t need POI for roads to be able to search for street addresses.
cgpsmapper can produce search index for streets (and i think mapcenter too).

Ok, I’ve posted it to the wiki. Personally I’m interested in the issue “Any additional options that will improve the result anyway? Any options that will improve it in some cases?”

In principle, it would be simple to write a GUI for all of this, for those users, who surrender upon mere talking of “.bat”.

I think generation of map with mkgmap could be improved with some options. This is the full command I usually use:
java -enableassertions -jar mkgmap.jar --route --utf8 --description=“OpenStreetMap-Cáceres” --gmapsupp --country-name=ESPAÑA --country-abbr=ESP --region-name=EXTREMADURA --region-abbr=EX --family-name=“Open Street Map” --net --road-name-pois
Why?
-enableassertions: mkgmap is less likely to create a buggy map if you run it with assertions (java -enableassertions -jar mkgmap.jar), it will crash instead.
–utf8: enables non ASCII characters for languages other than English
–description: any description for the map to identify it.
–gmapsupp: This creates also a combined map (GMAPSUPP.IMG) from supplied .osm file. Combined maps can be copied directly to GPS devices that support mass storage mode.
–country-name: your country name
–country-abbr: your country name abbreviation
–family-name: if you omit this your map will be named ‘family name’
–net: Enables the creation of the NET section. With this option enabled the garmin device is able to lock on roads. Some devices also display the current street in the status bar.
–road-name-pois: it creates a poi for each highway in the map, thus enabling searches of streets using Spell feature of garmin devices.
Additionally, -Xmx may be necessary if map is quite big to avoid memory problems. -Xmx256M will assign 256 MB of memory for the process.

cdavila ,
My map generated by mkgmap has a problem with abbreviated POI/street names on MobileXT. Any option that’ll correct this? No such problem when compiled with mapcenter2.

I’m not an expert on mkgmap. More details would be necessary about the problem. You can ask in mkgmap mailing list or the author of this feature (markb at ordern dot com)

Using v0.65 all but one restriction in my map is processed, but now no information about that one is in the output. How can I know which restriction is giving problems?

cdavila,
it’s strange…
there must be an ‘ERROR:’ message in somewhere in mp-file

Sry for my newbie problem:
I always get an empty (0 KB) file.mp.
I wrote the following code into start.bat

osm2mp.pl file.osm > file.mp

What am I doing wrong?

KaChing_Cacher,
do you have Perl installed?
did you installed required packages (Template-toolkit and Getopt::Long)?
have you prepared .osm file and named it ‘file.osm’?
what do you see on screen after running start.bat?

Oops, I didn’t install these packages. Shame on me… :smiley:
Do I have to install Getopt::Long? Because it also works without it.

I created a map now, but the German letters like “ä, ö, ü, ß” are all replaced by a “?”.
I used --utf8 like cdavila said but had no success.

/Edit: Also tried it with --latin2, no better results.

KaChing_Cacher,
use osm2mp with “–codepage 1252” option

“Could not open file: 1252” …
I also used --road-name-pois, but how can I remove these ugly green points on the displayed map now?
I use a Garmin Vista HCx.