From OpenStreetMap Wiki
Jump to navigation Jump to search
Mkgmap edit



Known issues


Download maps


此程序將OpenStreetMap數據轉換為可以加載到Garmin GPS設備上的地圖格式。它可以一步完成轉換,不需要其他輔助程序。

该项目的目标是在我的Garmin Legend Cx上顯示OpenStreetMap数据,以便在制图时了解那些已经完成和那些还未完成。另外,可以看到自己创建的地图是非常开心的。

报告BUG,提供建议或获得帮助,请阅读contact page, 或添加talk page.


目前提供zip(Windows环境下使用方便), 和压缩tar文件,内容完全一样。




  • 更好的Multipolygon和海洋支持
  • 对Style文件由上而下的逻辑解析(而不是基于规则的复杂匹配)
  • 针对MapSource生成NSIS安装器的能力


  • Routing over several (more than 2) tiles in Mapsource
  • Address index still not 100% correct (works in Mapsource, in the active tile only on "old-style" GPS like etrex/60CSx/edge, does not work at all on GPS like Nuvi, Oregon)
  • Overview map for Mapsource empty (a non empty overview map would pan around quicker)


  • Shields are displayed on highways
  • Extended/Marine types added, providing more line types
  • make-cycleways to synthesise cycle ways on roads that have a separate cycle lane
  • 更小的img文件
  • Many bug fixes and routing improvements


It requires Java 1.6, with the last release that worked on 1.5 being r1195. If your operating system does not already have java then install it.


Since at least Jaunty mkgmap is available in the Ubuntu software repositories. Simply run the following at a command prompt to install. note that currently (April 2010) the version in the ubuntu-repository is very old, so you better use the current version from svn sudo aptitude install mkgmap

The program can then be run by typing mkgmap at the terminal.


  • Create a file containing OSM data. I do this by saving from JOSM. You can call the file anything you like — I'm using data.osm in the example. You can also get a larger map area by using XAPI like this (example for the UK Midlands area):
   wget http://www.informationfreeway.org/api/0.6/*[bbox=-3.5,51.5,-1.0,53.5] -O data.osm


   curl -L "http://www.informationfreeway.org/api/0.6/map?bbox=-3.5,51.5,-1.0,53.5" -o data.osm
  • Then to make a Garmin map image file; open a command prompt and navigate to your Mkgmap directory. Then run the following command:
   java -jar mkgmap.jar [options] data.osm
  • This will produce a file called 63240001.img

It's possible that the application may crash out after a point, particularly if you're processing a large area, with Exception in thread "main" java.lang.OutOfMemoryError: Java heap space errors. If this happens, simply increase the size of your max heap space like this:

   java -Xmx512M -jar mkgmap.jar [options] data.osm 

which would allocate 512Mb of physical memory to the process.


For larger maps, you may want to alter some details of the default map. There are options you can set. If you want to set several options, it might be easier to put the options into a file and use the the -c option. For a complete list see the complete option list (which may be outdated) or run java -jar mkgmap.jar.

Usage: mkgmap [options...] <file.osm> Options:

       Print help on the given topic.  If the topic is omitted, a list of
       all the help topics is printed instead.
-c filename
       Specify a configuration file instead of command-line options.
       In the file, each line is an option setting of the form
       option=value, just like on the command line except that there is no
       leading ';--'.
-n name
       Change the name of the map. Garmin maps are named by 8 digit numbers.
       The default is 63240001. It is best to change the name if you are going
       to be making a map for others to use so that it is unique and does not
       clash with others.
       NOTE: enter just the name, without the ".img" extension, otherwise the
       tool will throw an exception. The tool won't warn you if you put in
       something other than 8 digits but your Garmin may not show the map.
       Sets the descriptive text for the map. This may be displayed in
       QLandkarte, MapSource on on a GPS etc.
       Sets the map's country name. The default is "UNITED KINGDOM".
       Sets the map's abbreviated country name. The default is "GBR".
       Sets the map's region name. By default, the map has no region name.
       Sets the map's abbreviated region name. By default, the map has
       no abbreviated region name.

Label options:

       This option allows the use of non-ascii characters in street names. What
       is actually supported is hardware-dependent. Some devices can only do
       ASCII characters, for example.
       Mkgmap goes to some length to convert un-displayable characters,
       though, and by default (without this option), it will transliterate
       characters to unaccented ASCII characters where possible.
       Use the specified character set.
       Use the given code page.For example, use --code-page=936 to display the correct chinese character.
       Allow labels to contain lower-case letters.  Note that this doesn't
       work on many (most, all?) Garmin devices.

Style options:

Also see the custom style documentation.

       Specify a different style name, rather than the default.
       Specify an external file from which to obtain the style. "file" can be a
       directory containing style directories (such as mkgmap/resources/styles)
       or a zip file containing the style.  It can also be a URL. If there is
       more than one style in the zip file, then the ;--style argument can be used
       to select the style that is used. 
       For backward compatibility, you can also supply a map-features.csv file
       here.  See the customization help.
       List the available styles.
--levels=levels code
       Change the way that the levels on the map correspond to the zoom levels
       in the device. See customization help. The default is the equivalent
       of "0=24, 1=22, 2=21, 3=19, 4=18, 5=16", although this may change.
       Specify the tag that will be used to supply the name.  Useful for language
       variations.  You can supply a list and the first one found will be used
       (e.g. ;--name-tag-list=name:en,int_name,name)
       Outdated option. Use the ;--style-file option instead.

Product description options:

       This is an integer that identifies a family of products.
       This is an integer that identifies a product within a family.  It
       is often just 1.

Misc options:

       Changes the block size that is used in the generated map.  There is no
       general reason why you would want to do this.
       Create output file that supports "lock to road" option.
       Write a gmapsupp.img file, possibly joining previous gmapsupp.img (you
       need to copy in the Mkgmap's working directory), that can be uploaded
       to a Garmin device in USB mode. When making maps to join give each a
       unique 8 digit name with the flag --mapname.
       java -jar mkgmap.jar --gmapsupp corsica.img cyprus.img mallorca.img malta.img tenerife.img
       When reading OSM files, ignore any "bounds" elements.
       Generate a POI for each named road. By default, the POIs'
       Garmin type code is 0x640a. If desired, a different type code
       can be specified with this option.
       Write a .tdb file.
       Write MDR and MDX index files.
       Write a .nsi file for use with NSIS to generate an executable to install the map in MapSource on Windows.
       When two maps cover the same area, this option controls what order they
       are drawn in and therefore which map is on top of which.  Higher
       priorities are drawn "on top" of lower priorities.
       Make the map transparent, so that if two maps are loaded that cover the
       same area, you can see through this map and see the lower map too.
       Useful for contour line maps among other things.
       Output program version.


  • Load this onto your Garmin GPS device. Garmin models such as the Legend Cx can be set into USB mass storage mode, where they appear as just another drive letter (on Windows) or filesystem (on Unix/Linux type systems). In this case you can just copy the map to the file Garmin/gmapsupp.img. Create the folder Garmin if it does not already exist.
  • User:Tms13: If your GPS uses removable memory cards, it may be quicker to remove the card and write to it in a card reader - most Garmin units are USB 1.1; a USB 2.0 card reader will write at least 5 times faster, in my experience.
  • If you have an older serial connecting and map displaying Garmin device you can upload the .img file to your Garmin unit using Sendmap.
  • You can also combine two or more maps to one map with Sendmap or gmaptool.
  • The QLandkarte program can be used to upload to the GPSmap 60CSx and the latest version also works to my Legend Cx.


This is a list of currently known problems with mkgmap.


Due to limitations in understanding of the Garmin file formats, we do not know how to make the map searchable for street names using the built-in Garmin street search. Hacks like making every street a POI have been created (see talk page).

Mapsource (6.16.2)应用

An address search in Mapsource only partly works:

  • City search appears to works fine
  • Feature search appears to work fine as long as you enter a name for the feature
  • Address search works, but often cities are mismatched.
  • Intersection search does not work


Address search works inconsistently, depending on GPS unit. Some units require you to enter a Province but nothing that is entered works. Others (GPSMap 76csx...) semi-work as long as you enter a fictitious housenumber.


Work is needed to create a basemap, which will speed up map redraw when zoomed far out inside when using Basecamp/Mapsource/Qlandkarte GT. This will allow for more sensible resolutions.

Routing over tile boundaries broken in Mapsource/Basecamp

Routing inside Mapsource/Basecamp (though not on GPS) works inconsistently when the route crosses (several) tile boundaries.

Sea polygons

The --generate-sea option can be used to generate the sea polygons but is currently to be considered as "beta". There are two alternative ways of using --generate-sea: either with multipolygons (--generate-sea:multipolygon) or without multipolygons (--generate-sea:no-mp) combined with a TYP file.

No land polygon when --generate-sea:multipolygon is used

The no-mp version of --generate-sea will create a land polygon inside coastline, overwriting the default "Garmin yellow" with a land colour defined in a TYP file. However, the multipolygon version does not create a land polygon, meaning that maps created with this option will use the default Garmin yellow background for land cover.

Suggested solution: re-use the "generate land polygon" code from the --generate-sea:no-mp algorithms and add an option to create a land polygon when using the no-mp version of --generate-sea

No coastline when --generate-sea:no-mp is used

When --generate-sea:no-mp is used, the coastline way is lost.

Suggested solution: add further option to --generate-sea:no-mp that retains the coastline way


Too many POIs for a given area that has been split using multipolygon code

The --add-pois-to-area switch will create an appropriate POI for any polygon that has a definition in the style file. However, the processing of the --add-pois-to-area code happens after the multipolygon split. This means that any multipolygon that is split into distinct polygons by the multipolygon code ends up with multiple POIs when it should only really have one.

Suggested solution: process --add-pois-to-area before the multipolygon code

POIs created outside of polygon

When the --add-pois-to-area switch is applied to complex polygons (e.g. with strongly concave edges, such as beaches) the POI can be placed outside of the polygon with which it is associated. The calculation of what is "inside" a polygon is computationally complex, hence why no solution has yet been implemented.

Area too large

If you try to process an OSM file that is too large, mkgmap will error out due to memory limitations.

To resolve this, you will need to split the file into smaller files using splitter. Here is how to do it:

java -Xmx1000m -jar splitter.jar file.osm
  • Run mkgmap on the resulting files, for instance
java -Xmx1000m -jar mkgmap.jar -c template.args

See here for more details (you will most likely need to change splitter's --max-nodes switch to a lower value than the default).


维基页面 development, 主要基于OSM的使用

外部链接 mgkmap主页.


The software is licensed under the GPL version 2. The maps it produces are to be licensed according to the data they were derived from which is Creative Commons CC-BY-SA 2.0 for OSM data. There is therefore no licensing conflict that might exist with other approaches.


There are currently at least four efforts to provide a GUI for mkgmap, so that users can click on controls rather than remember command line instructions:

  • OSM Composer - a GUI built on top of mkgmap, for simplifying the process of creating Garmin map images from OSM and SRTM data.
  • MkgmapGUI from freegeographytools - Windows-only, closed source, only provides access to osm->img conversion
  • Mkgmapgui from activityworkshop - Java, open source, provides basic access to conversion and img file combination functions
  • DoMyMaps - according to User:Lao this has been recently suspended


For Unix users: Python Script.
For windows users: A Batch HowTo.


If you need help then try the following:

  • Ask a question in the mailing list. The mailing list can be accessed using any newsgroup reader (eg. Thunderbird) using the following:
  • Server: news.gmane.org
  • Group name: gmane.comp.gis.openstreetmap.mkgmap.devel
  • There is also an archive of the mailing list.

The mailing list is very active and will usually produce the fastest response.