osm2mp.pl: OSM -> Polish format converter

osm2mp.pl can convert OpenStreetMap data into Polish map format (MP).

Current version is 0.80

Main features:

  • customizable type set
  • multipolygon support
  • routing graph generation with road classes and turn restrictions
  • address search support
  • data processing for cgpsmapper (merging roads, fixing self-intersecting roads and close nodes)
  • reports on data mistakes

Download: http://garminmapsearch.com/osm/osm2mp_v080.zip

Use: osm2mp.pl file.osm > file.mp

Other useful tools:
cGPSmapper - for converting MP file into garmin IMG file. Use personal version for routing support.
GPSMapEdit - for MP visualization, editing and error checking

some examples here: http://openstreetmap.org/edit?lat=55.7853&lon=37.6216&zoom=14


  <relation id="20408" visible="true" timestamp="2008-07-10T19:54:13+01:00" user="liosha">
    <member type="node" ref="271603925" role="via"/>
    <member type="way" ref="10630805" role="to"/>
    <member type="way" ref="25475073" role="from"/>
    <tag k="type" v="restriction"/>
    <tag k="created_by" v="Potlatch 0.9c"/>

Now I can see that to/from roles are applied to ways, instead of nodes :stuck_out_tongue:

Hello liosha,

I tried to use your converter for a map from Slovakia but faced the problem that some letters are not converted especially those which are not part of the us-ascii code set. Do you have any idea how to fix this?

You can replace the codepage number at the top of osm2mp.pl to match your preferred codepage.
Expect a weird conversion when some utf8 symbol is outside of the page range, and blame garmin for not using utf8 :wink:

my $codepage    = "1251";

small update: http://garminmapsearch.com/osm/osm2mp_v053.zip

  • added duplicate road reporting
  • geo. location in most error messages
  • few fixes

Good stuff liosha! Would it be possible to have the option send a parameter to the converter to disable some of the error corrections? I find it useful to use GPSMapEdit to spot errors that aren’t easily found otherwise. Thanks!

A small improvement suggestion, make the .cfg-files support tab. Have been trying to add shop=mall for some time until I finally realised it was the tabstops that screwed it up. Thanks again for a really useful piece of software!!

i’ll implement command-line options in future versions.
this time you can disable features by editing first lines of the script, like my $fixclosenodes = 1;
or just search result .mp for error messages: grep ERROR: file.mp

i’ll fix it in next version

Are you also going to do something with the coastlines?

Note: You could look at Kosmos, it has an algorithm which uses the bounding box in the OSM files to fill the right side of the coastline with water

Here’s another suggestion for improvement: Choose which language to use by default (name:en, name:de etc. with name as fallback if it doesn’t exist)

Trying to setup a correct poi.cfg file. And I’m in desperate need of some clarification. Which POI numbers should I use, it doesn’t make sense to me since there are several numbers for the same POI’s: SCHOOL can be defined as both 0x6410 and 0x2C05. I have a faint memory of reading a webpage somewhere stating that you should avoid using certain number-ranges due to compatibility issues. So what numbers should I use to define POI’s?

If someone could clarify this for me I would greatly appreciate it!

Explain this, and if this is something you can specify anywhere which RGN set to use (as found in this file: http://ukgarminairmap.wikispaces.com/space/showimage/RGNtype.txt ):

Really nice script.
I noticed one bug in the newest version though(An old version I used before did it correctly), some roads where getting random “no bicycle, no car, no etc…” tags
I solved this problem by changing

      undef ($poly);

      undef ($polyname);
      undef ($polydir);



      undef ($poly);

      undef ($polyname);
      undef ($polydir);

   undef ($polytoll); 
   undef ($polynoauto);
   undef ($polynobus);
   undef ($polynoped);
   undef ($polynobic);
   undef ($polynohgv);


Not sure if it’ll cause any other problems, but at least the highway near my house isn’t closed for cars anymore.

stupid bug… thanks! :slight_smile:

Hi Liosha, and thank you for the great job you do on routed maps.
You are using Template.pm module since few days. And when I run osm2mp (v0.60r19) it fails on Template.pm

Can’t locate Template.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at F:\David\OSM\Tools\osm2mp_v060r19\osm2mp.pl line 66.
BEGIN failed–compilation aborted at F:\David\OSM\Tools\osm2mp_v060r19\osm2mp.pl line 66.

Where can I find this perl module ?

Yes, now osm2mp uses Template-Toolkit and Getopt::Long.
See http://cpan.org/
I use Perl Package Manager (PPM) to install them

The page
"osm2mp v0.53 has a bug causing access permissions to be overwritten. This has been fixed in the svn version. "

Can we have a new version with this fix?

Beside, could you please switch from DOS linebreaks (cr/nl) to unix breaks? The DOS breaks cause that it’s not possible to make the osm2mp.pl file executable on linux and just run it:

hanno@libertalia ~/osm/routing/osm2mp-read-only/osm2mp $ ./osm2mp.pl
-bash: ./osm2mp.pl: /usr/bin/perl^M: bad interpreter: Datei oder Verzeichnis nicht gefunden

ok, i’ve removed cr symbol
you can get fixed code from svn: http://code.google.com/p/osm2mp/source/checkout


first of all “Thank You” for the great script you wrote. I found that --fixclosenodes does not work correctly in all cases as cgpsmapper still detects a couple of too close nodes. As far as I can tell the closenodes() function is implemented correctly. My guess for the cause is that nodes are only checked and corrected in pairs: Assume that node 1 is too close to both node 2 and node 3. First the distance to node 2 ist corrected and then the distance to node 3. The second correction might push node 1 closer to node 2 again.

As a workaround I tried to execute the correction repeatedly in order to slowly push all conflicting nodes further apart until everything is fixed. However, it seems that this does not work. Either it converges only very slowly or certain node constellations are cycled through in a circular way. Unfortunately, I am not very good at perl so that I can’t try anything more sophisticated.

I know about this problem
But it requires too complex processing to fix it
So i advise to fix such areas in OSM, or use cgpsmapper -e