=== Command line ===

The command line is of the format:

:	java.exe [java-options] -jar mkgmap.jar [mkgmap-options]

=== Java options ===

Details of the Java options are available at docs.oracle.com.
The most likely options you may need to use are:

;-Xmx<size>[g|G|m|M|k|K]
:	Use this option to set the maximum Java heap size in GB, MB, KB or
bytes. Mkgmap allows the use of multiple CPU cores, and the amount of
heap memory required increases proportionally with the number of CPU
cores being used. The default value may not be sufficient to allow
mkgmap to use all the available CPU cores, which will cause the run time
to be longer than necessary or can cause mkgmap to crash if it runs out
of memory. To allow mkgmap to run optimally, you may
need to use this option to allow more memory to be allocated to the Java
heap. Note there is no space or equals sign in the option.

;-enableassertions
;-ea
:	Causes an error to be thrown if an assertion written in the mkgmap
code is evaluated as not true. This is useful in detecting bugs in the
mkgmap code.

;-Dlog.config=filename
:	Specifies a logging configuration file that allows you to enable and
disable specific logging messages. This is useful if you want to see
certain types of message that are not logged by default or choose where
the messages should be written.

=== Mkgmap options ===

The order of the options is significant in that options only apply
to subsequent input files. If you are using splitter, you probably
will need to put most of your options before '-c template.args'
(this file is generated by splitter).

=== Information options ===

These options provide information and do not require any input files.

;--help[=help|options|links|copyright|logging]
: 	Display help on the given topic. If the topic is omitted then
general help information is displayed, the same as in help=help.

;--version
: 	Write program version to stderr.

=== File options ===

;filename
;--input-file=filename
: 	Read input data from the given file.  This option (or just a
filename) may be specified more than once. Make sure you set all
wanted options before this.

;--gmapsupp
: 	Create a gmapsupp.img file that can be uploaded to a Garmin or
placed in the /Garmin folder of a microSD card (such as by mounting the
device in USB mass storage mode). It can be used on already
compiled img files, or if the input files are not already compiled
then they are compiled first and then the gmapsupp is created.

;--gmapi
: 	Create a directory in the "gmapi" format required by Mac applications.
It can also be used for Windows programs; copy the complete directory tree
into {user}\AppData\Roaming\Garmin\Maps or \ProgramData\Garmin\Maps
and the map will be available to Garmin PC programs.
The directory name is --family-name with extension .gmap.

;--gmapi-minimal[=<include-pattern>]
: 	Special option for map providers to reduce disk writes when updating. Works like
--gmapi but does not write Product data for input files which are provided as
*.img. It is assumed that the content of those files wasn't changed and thus
doesn't need a rewrite. The optional include-pattern is a regular expression
which can be used to specify *.img files for which a write should be forced. The
pattern is used on the full path to the input file. The global index files and
the *.tdb file will still contain all needed references.
:	Example usage with pattern:
::	--gmapi-minimal=.*4711[0-9]{4}\.img
::	This pattern matches file names between 47110000.img and 47119999.img
::	and ignores the path.

;-c filename
;--read-config=filename
: 	Each line of the named file contains a command option in the form
option=value or option:value.  The options are included as arguments of
the executed command as if they had been specified on the command line with one
exception: a relative path given with option input-file is assumed to be relative
to the location of the file.
<p>
Lines beginning with a # character are ignored and can be used as
comments.  Any command line option can be specified, however the
leading '--' must be omitted.
The short option names with a single '-' cannot be used, simply use the long name instead.

;--output-dir=directory
:	Specify the directory in which all output files are written. It defaults
to the current working directory, i.e. the directory the command is
executed from.

;-n name
;--mapname=name
: 	Set the name of the map. Garmin maps are identified by an 8 digit
number.  The default is 63240001.  It is best to use a different
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.

;--description=text
: 	Set the descriptive text for individual tiles and gmapsupp.img.
Map tiles take the most recent --description before the --input-file
option that defines the tile. Because gmapsupp.img is created after all
the other tiles have been processed, gmapsupp.img takes the last --description
found in the command line, regardless of where the --gmapsupp option is placed
in the command line.
<p>
Note that if you use splitter with its --geonames-file option or its own --description
option, the generated template.args file includes --description values that will apply
to individual tiles. In this case it is not possible to override splitter's
description for individual tiles from the mkgmap command line.
Placing the mkgmap --description option after -c template.args ensures that the
value is applied to gmapsupp.img.
<p>
Different GPS devices and PC programs handle descriptions
inconsistently. Some display the description when selecting maps or tiles,
others use the family name.

;--country-name=name
: 	Set the map's country name. The default is "COUNTRY".

;--country-abbr=abbreviation
: 	Set the map's abbreviated country name. The default is "ABC".

;--region-name=name
: 	Set the map's region name. By default, the map has no region name.

;--region-abbr=abbreviation
: 	Set the map's abbreviated region name. By default, the map has
no abbreviated region name.

=== Label options ===

;--code-page=number
:     Specify which international character set is to be used. Only 8 bit
character sets are supported so you have to specify which code page you
want to use.
It is entirely dependent on the device firmware which code pages are
supported.

;--latin1
: 	This is equivalent to --code-page=1252.

;--unicode
: 	This is equivalent to --code-page=65001. Note that some devices don't support
Unicode maps produced by mkgmap.

;--lower-case
: 	Allow labels to contain lower case letters.  Note that many
Garmin devices are not able to display lower case letters at an angle.

=== Address search options ===

;--index
: 	Generate an address index to allow searches by address.
The default is to not create an address index.

: The address fields are assigned by special mkgmap address
tags using the style file:
<pre>
  mkgmap:country
  mkgmap:region
  mkgmap:city
  mkgmap:postal_code
  mkgmap:street
  mkgmap:housenumber
  mkgmap:phone
  (mkgmap:is_in - used by --location-autofill=is_in)
</pre>
: If the index is created from previously compiled .img files, then the
same code page and sorting options (e.g. --code-page, --latin1) must
be used as were used to compile the individual map tiles.

;--split-name-index
:	Index each part of a street name separately.
For example, if the street is "Aleksandra Gryglewskiego" then you will be able to
search for it as both "Aleksandra" and "Gryglewskiego".  It will also increase the
size of the index.  Useful in countries where searching for the first word in name
is not the right thing to do. Words following an opening bracket '(' are ignored.
:	See also option --road-name-config.

;--road-name-config=filename
:	Provide the name of a file containing commonly used road name prefixes
and suffixes.
This option handles the problem that some countries have road names which
often start or end with very similar words, e.g. in France the first word
is very often 'Rue', often followed by a preposition like 'de la' or 'des'.
This leads to rather long road names like 'Rue de la Concorde' where only
the word 'Concorde' is really interesting. In the USA, you often have names
like 'West Main Street' where only the word 'Main' is important.
Garmin software has some tricks to handle this problem. It allows the use
of special characters in the road labels to mark the beginning and end of
the important part. In combination with option --split-name-index
only the words in the important part are indexed.

:There are two main effects of this option:
::	- On the PC, when zooming out, the name 'Rue de la Concorde' is only
rendered as 'Concorde'.
::	- The index for road names only contains the important part of the name.
You can search for road name 'Conc' to find road names like 'Rue de la Concorde'.
However, a search for 'Rue' will not list 'Rue de la Concorde' or 'Rue du Moulin'.
It may list 'Rueben Brookins Road' if that is in the map.

::	Another effect is that the index is smaller.
:	See comments in the example roadNameConfig.txt for further details.

;--mdr7-excl=name[,name...]
:	Specify words which should be omitted from the road index.
It was developed before option --road-name-config and is probably no longer needed.
:	Example usage: --mdr7-excl="Road, Street, Weg"

;--mdr7-del=name[,name...]
:	Use this option if your style adds strings to the labels of roads which you
want to see in the map but which should not appear in the result list
of a road name / address search. The list is used like this:
For each road label, mkgmap searches for the last blank. If one is found, it checks
whether the word after it appears in the given list. If so, the word is removed
and the search is repeated. The remaining string is used to create the index.
:	Example: Assume your style adds surface attributes like 'pav.' or 'unp.' to a road
label. You can use --mdr7-del="pav.,unp." to remove these suffixes from the index.

;--poi-excl-index=poi[-poi][,poi[-poi]...]
:	By default, mkgmap indexes the following POI types with a non-empty label:
::	- 0x00 .. 0x0f (cities, sub type 0, type <= 0xf)
::	- 0x2axx..0x30xx (Food & Drink, Lodging, ...)
::	- 0x28xx (no category ?)
::	- 0x64xx .. 0x66xx (attractions)
:	This option allows the exclusion of POI types from the index.
The excluded types are not indexed, but may still be searchable on a device,
as some devices seem to ignore most of the index, e.g. an Oregon 600 with
firmware 5.00 only seems to use it for city search.
If your device finds a POI name like 'Planet' when you search for 'Net',
it doesn't use the index because the index created by mkgmap cannot help for
that search.

:	So, this option may help when you care about the size of the index or the
memory that is needed to calculate it.
The option expects a comma separated list of types or type ranges. A range is
given with from-type-to-type, e.g. 0x6400-0x6405. First and last type are both
excluded.  A range can span multiple types, e.g. 0x6400-0x661f.
:	Examples for usage:
::	- Assume your style adds a POI with type 0x2800 for each addr:housenumber.
It is not useful to index those numbers, so you can use --poi-excl-index=0x2800
to exclude this.
::	- For the aforementioned Oregon you may use --poi-excl-index=0x2a00-0x661f
to reduce the index size.

;--bounds=directory|zipfile
:     Specify a directory or zip file containing the pre-processed bounds files.
Bounds files in a zip file must be located in the zip file's root directory.
<p>
The pre-processed boundaries are used to add special tags to all elements
(points, lines and polygons) containing the elements location information.
The style file can be used to assign the address tags mkgmap:country,
mkgmap:region etc. using these values.
<p>
The following special tags are added:
<pre>
  mkgmap:admin_level2 : Name of the admin_level=2 boundary
  mkgmap:admin_level3 : Name of the admin_level=3 boundary
  ..
  mkgmap:admin_level11
  mkgmap:postcode : the postal_code value
</pre>
Pre-processed bounds can be created with the following command:
<pre>
  java -cp mkgmap.jar
    uk.me.parabola.mkgmap.reader.osm.boundary.BoundaryPreprocessor
    <inputfile> <boundsdir>
</pre>
:The input file must contain the boundaries that should be pre-processed.
It can have OSM, PBF or O5M file format. It is recommended that it
contains the boundary data only to avoid very high memory usage.
The boundsdir gives the directory where the processed files are stored.
This directory can be used as --bounds parameter with mkgmap.

;--location-autofill=[option1,[option2]]
: 	Controls how the address fields for country, region, city and zip info
are gathered automatically if the fields are not set by using the special
mkgmap address tags (e.g. mkgmap:city - see option --index).
Warning: automatic assignment of address fields is somehow a best guess.
:;is_in
::     The is_in tag is analysed for country and region information.
:;nearest
::	The city/hamlet points that are closest to the element are used
to assign the missing address fields. Beware that cities located
in the same tile are used only. So the results close to a tile
border have less quality.

;--housenumbers
:   Enables house number search for OSM input files.
All nodes and polygons having addr:housenumber set are matched
to streets. A match between a house number element and a street is created if
the street is located within a radius of 150m and the addr:street tag value of
the house number element equals the mgkmap:street tag value of the street.
The mkgmap:street tag must be added to the street in the style file.
For optimal results, the tags mkgmap:city and mkgmap:postal_code should be
set for the housenumber element. If a street connects two or more cities
this allows all addresses along the road to be found, even when they have the
same number.
: Example for given street name:
:: Node -  addr:street=Main Street addr:housenumber=2
:: Way 1 - name=Main Street
:: Way 2 - name=Main Street, mkgmap:street=Main Street
:: Way 3 - mkgmap:street=Mainstreet
:: Way 4 - name=Main Street [A504]
: The node matches to Way 2. It has mkgmap:street set with a value equal to
the addr:street tag value of the house number node.
<p>
If the street is not given with addr:housenumber, mkgmap uses heuristics
to find the best match.
<p>
Tells mkgmap to write NET data. If you specify this option, you do not need to
specify --net and option -no-net is ignored.

=== Overview map options ===

;--overview-mapname=name
: 	If --tdbfile is enabled, this gives the name of the overview
.img and .tdb files. The default map name is osmmap.

;--overview-mapnumber=8 digit number
: 	If --tdbfile is enabled, this gives the internal 8 digit
number used in the overview map and tdb file.  The default
number is 63240000.

;--overview-levels=level:resolution[,level:resolution...]
:   Like levels, specifies additional levels that are to be written to the
overview map. Counting of the levels should continue. Up to 8 additional
levels may be specified.
The hard coded default is empty.
:	See also option --overview-dem-dist.

;--remove-ovm-work-files
:   If --overview-levels is used, mkgmap creates one additional file
with the prefix ovm_ for each map (*.img) file.
These files are used to create the overview map.
With option --remove-ovm-work-files=true the files are removed
after the overview map is created. The default is to keep the files.

=== Style options ===

;--style-file=directory|zip-filename|url
: 	Specify the path to a directory, zip file or url containing style information.
A style is composed of a group of files and typically contains the following files:
version, info, options, points, lines, polygons, relations - see the style manual
for further details.
<p>
The style files can be in the specified directory or contained in a sub-directory.
If styles are contained in sub-directories then the required style must be specified
with the --style option.

;--style=name
: 	Specify a style name. Must be used if --style-file points to a
location containing multiple styles. If used without also
specifying --style-file, it selects one of the built-in styles.

;--style-option=tag[=value][;tag[=value]...]
: 	Provide a semicolon separated list of tags which can be used in the style.
The intended use is to make a single style more flexible, e.g.
you may want to use a slightly different set of rules for a map of
a whole continent. The tags given will be prefixed with "mkgmap:option:".
If no value is provided the default "true" is used.
: Example: --style-option=light;routing=car
: will add the tags mkgmap:option:light=true and mkgmap:option:routing=car
to each element before style processing happens.
This can then be used in rules like:
: landuse=farmland & mkgmap:option:light=true {delete landuse}

;--list-styles
: 	List the available styles. If this option is preceded by a --style-file
option then it lists the styles available within that file or folder.

;--check-styles
: 	Perform some checks on the available styles. If this option is
preceded by a --style-file option then it checks the styles
available within that file. If it is also preceded by the --style
option it will only check that style.

;--levels=level:resolution[,level:resolution...]
: 	Change the way that the levels on the map correspond to the zoom
levels in the device. See customisation help. The hard coded default is:
"0:24, 1:22, 2:20, 3:18, 4:16", although each style can have
its own default. The default style for example overwrites it with
"0:24, 1:22, 2:20, 3:18". Up to 8 levels may be specified.

;--name-tag-list=tag[,tag...]
: 	Specify the tag that will be used to supply the name.  Useful for
language variations.  You can supply a list of tags and the first one
found will be used.  e.g. --name-tag-list=name:en,int_name,name

=== Product description options ===

;--family-id=integer
: 	This is an integer that identifies a family of products.
Range: [1..65535]
Default: 6324

;--family-name=name
: 	If you build several maps, this option describes the
family name of all of your maps. Garmin will display this
in the map selection screen.
The default is "OSM map".
:	Example: --family-name="OpenStreetmap mkgmap XL 2019"

;--product-id=integer
: 	This is an integer that identifies a product within a family.
It is often just 1, which is the default.

;--product-version=integer
: 	The version of the product. Default value is 100 which means version 1.00.

;--series-name=name
: 	This name will be displayed by Garmin PC programs in the map selection
drop-down. The default is "OSM map".

;--area-name=name
:   Area name is displayed on Garmin units (or at least on eTrex) as the second
part of the mapname in the list of the individual maps.

;--copyright-message=text
: 	Specify a copyright message for files that do not contain one.

;--copyright-file=filename
: 	Specify copyright messages from a file.
Note that the first copyright message is not displayed on a device, but is
shown in BaseCamp. The copyright file must include at least two lines and
be UTF-8 encoded. The following symbols will be substituted by mkgmap:
$MKGMAP_VERSION$, $JAVA_VERSION$, $YEAR$, $LONGDATE$, $SHORTDATE$ and $TIME$.
Time and date substitutions use the local date and time formats.

;--license-file=filename
: 	Specify a file which content will be added as license.
The license file must be UTF-8 encoded.
The following symbols will be substituted by mkgmap:
$MKGMAP_VERSION$, $JAVA_VERSION$, $YEAR$, $LONG_DATE$, $SHORT_DATE$ and $TIME$.
Time and date substitutions use the local date and time formats.
All entries of all maps will be merged in the overview map.

=== Optimization options ===
;--improve-overview
: 	Tells mkgmap to use a more complex method to calculate the outlines of
complex multipolygons which are visible in the overview map. This reduces
the size of the overview map and it improves especially complex coastline areas.

;--reduce-point-density=NUM
: 	Simplifies the ways with the Douglas Peucker algorithm.
NUM is the maximal allowed error distance, by which the resulting
way may differ from the original one.
This distance gets shifted with lower zoom levels.
(Default is 2.6, which should lead to invisible changes)
See also --simplify-lines which gives better control.

;--reduce-point-density-polygon=NUM
: 	Allows you to set the maximal allowed error distance for the DP algorithm
to be applied against polygons.
See also --simplify-polygons which gives better control.

;--merge-lines
: 	Try to merge lines. This helps the simplify filter to straighten out
longer chunks at lower zoom levels. Decreases file size more.
Increases paint speed at low zoom levels.
Default is enabled, use --no-merge-lines to disable.

;--allow-reverse-merge
: 	Use this option to allow the reversing of lines and roads to get even better
results from line merging. Reversing is only done when oneway attribute allows
it and the type has no direction. See --line-types-with-direction for further
details.

;--line-types-with-direction=type[,type ...]
: 	Use this option to tell mkgmap which line types should never be reversed.
If your TYP file renders certain line types with a direction even if the way has
no oneway attribute you must list those types here to prevent reversing.
:	Example usage: --line-types-with-direction=0x26,0x10005,0x10006

;--min-size-polygon=NUM
:   Removes all polygons smaller than NUM from the map.
This reduces map size and speeds up redrawing of maps.
Recommended value is 8 to 15, default is 8.
:	See also polygon-size-limits.

;--polygon-size-limits=resolution:value[,resolution:value...]
:	Allows you to specify different min-size-polygon values for each resolution.
Example:
::	--polygon-size-limits="24:12, 18:10, 16:8, 14:4, 12:2, 11:0"
:	If a resolution is not given, mkgmap uses the value for the next higher
one. For the given example, resolutions 19 to 24 will use value 12,
resolution 17 and 18 will use 10, and so on.
Value 0 means to not apply the size filter.
Note that in resolution 24 the filter is not used.
The following options are equivalent:
::	--min-size-polygon=12
::	--polygon-size-limits=24:12
::	--polygon-size-limits=24:0,23:12
::	--polygon-size-limits=24:0,23:12,22:12,21:12,16:12

;--simplify-lines=resolution:value[,resolution:value...]
: 	Use this option to specify different values for the Douglas Peucker algorithm
depending on the resolution when it is applied to lines. It overwrites the
--reduce-point-density value. The syntax is similar to --polygon-size-limits,
but values are given in metres. This distance gets shifted with lower zoom levels.
Example:
::	--simplify-lines=23:2.6,22:4.2,21:5.4,20:6

;--simplify-polygons=resolution:value[,resolution:value...]
: 	Use this option to specify different values for the Douglas Peucker algorithm
depending on the resolution when it is applied to polygons. It overwrites the
--reduce-point-density-polygon value. The syntax is similar to --simplify-lines.

=== Hill Shading (DEM) options ===

:   Hill Shading is rendered by BaseCamp and GPS devices
when the map includes a Digital Elevation Model (DEM). Use the following options
to add a DEM to the map and control its characteristics. DEM creation requires
files containing height information for the area covered by the map, the so
called hgt files, which typically cover 1 degree latitude by 1 degree longitude
and are named by the coordinates of their bottom left corner (e.g. N53E009). They
contain height information in a grid of points. Typical hgt files contain either
1 arc second or 3 arc second data. 3 arc second files have 1201 x 1201 points, which means
files contain 2 x 1201 x 1201 = 2,884,802 bytes. 1 arc second files have 3601 x 3601 points,
with a file size of 25,934,402 bytes. Other files are supported as long as the
formula sqrt(filesize/2) gives an integer value.

;--dem=path[,path...]
:   The option expects a comma separated list of paths to directories or zip
files containing *.hgt files. Directories are searched for *.hgt files
and also for *.hgt.zip and *.zip files.
:   The list is searched in the given order, so if you want to use 1 arc second files
make sure that they are found first. There are different sources for hgt
files, some have so called voids which are areas without data. Those should be
avoided.

;--dem-dists=number[,number...]
:   If given, the option specifies the resolution(s) for the DEM data.
If not given, mkgmap determines a single value based on the resolution of the hgt files.
For BaseCamp you only need one value; for GPS devices you need one for each
resolution given with the --levels option. The actual values are the
distance between two DEM points and should be a multiple or submultiple of the
distance between two points in the hgt file, that is 3314 for 1 arc second and 9942 for
3 arc second. Higher distances mean lower resolution and thus fewer bytes in the map.
Reasonable values for the highest resolution should not be much smaller than
50% hgt resolution, that is somewhere between 1648 and 5520 for 1 arc second hgt input
files (3312 is often used), and 5520 to 9942 for 3 arc second hgt input files.
:	Example which should work with levels="0:24, 1:22, 2:20, 3:18":
:	--dem-dists=3312,13248,26512,53024
:	This was found in a Garmin Demo map for transalpin data created 2009.

;--dem-interpolation=auto|bicubic|bilinear
:   Use this option to specify the method that is used to interpolate data from
hgt raster to the DEM raster. The value bicubic gives the highest precision
but is slower, bilinear is faster but less precise, it tends to smooth the
profile and thus also reduces DEM size compared to bicubic. The value auto
means that bicubic is used where is seems appropriate according to hgt
resolution and dem-dist value, else bilinear is used. The default is auto.

;--dem-poly=filename
:   If given, the filename should point to a *.poly file in osmosis polygon
file format. The polygon described in the file is used to determine the area
for which DEM data should be added to the map. If not given, the DEM data will
cover the full tile area.

;--overview-dem-dist=integer
:   If given, the option specifies the resolution(s) for the DEM data in the
overview map. If not given or 0, mkgmap will not add DEM to the overview map.
Reasonable values depend on the size of the area and the lowest resolution
used for the single tiles, good compromises are somewhere between 55000
and 276160.

=== Sea Processing options ===

If your map contains sea areas then you will need to use --generate-sea to generate
the sea areas from the OSM files or --precomp-sea to use separate precompiled sea tiles.

;--generate-sea[=VALUE[,...]]
:	Generate sea polygons. When this option is specified, the sea is generated using a
multipolygon unless the polygons value is specified. The coastline data can be read from
the input OSM files, separate files containing coastline data if --coastlinefile
is specified or precompiled sea data if --precomp-sea is specified. The VALUEs are as follows:
:;multipolygon
:: generate the sea using a multipolygon. This is the default value.
:;polygons | no-mp
:: don't generate the sea using a multipolygon - instead,
generate a background sea polygon plus individual land
polygons (see land-tag value).
:;land-tag=TAG=VAL
:: tag to use for land polygons (default natural=land) created by the polygons option.
For these to be visible in the Garmin map, a suitable land polygon type must
be defined in the TYP file (suggested type is 0x010100 or 0x54), the polygon must
have a higher drawing level than the sea polygon type and the style file must link
TAG=VAL to the land polygon type defined in the TYP file.
:;no-sea-sectors
:: disable the generation of "sea sectors" when the
coastline fails to reach the tile's boundary.
Under some conditions land sectors are generated instead and these use land-tag.
:;extend-sea-sectors
:: Adds a point so coastline reaches the nearest tile boundary.
This implies no-sea-sectors.
:;close-gaps=NUM
:: close gaps in coastline that are less than this distance (metres)
:;floodblocker
:: enable the flood blocker that prevents a flooding of
land by checking if the sea polygons contain streets
(works only with multipolygon processing)
:;fbgap=NUM
:: flood blocker gap in metre (default 40)
points that are closer to the sea polygon do not block
:;fbthres=NUM
:: at least so many highway points must be contained in
a sea polygon so that it may be removed by the flood
blocker (default 20)
:;fbratio=NUM
:: only sea polygons with a higher ratio
(highway points x 100000 / polygon size) are removed
(default 0.5)
:;fbdebug
:: switches on the debugging of the flood blocker
generates GPX files for each polygon checked by
the flood blocker
:;check
:: check whether the coastline data contains sea within sea or land
within land

;--coastlinefile=filename[,filename...]
: 	Defines a comma separated list of OSM or PBF format files that contain
coastline data to be used instead of extracting the data from the input files.
If you specify --coastlinefile you must also specify --generate-sea.

;--precomp-sea=directory|zipfile
:     Defines the directory or a zip file that contains precompiled sea data.
Sea data in a zip file must be located in the zip file's root directory or in
a sub directory named sea. When this option is defined, natural=coastline tags
from the input OSM files are ignored, the --coastlinefile option is ignored
and the precompiled data is used instead.
You can use the multipolygon, polygon and land-tag values of the --generate-sea
option in conjunction with --precomp-sea to control the way the sea is built,
but the other --generate-sea values are not available.
If --generate-sea is not specified, the --precomp-sea option sets --generate-sea=multipolygon.

You can download procompiled sea data for the whole world from the mkgmap download page at
http://www.mkgmap.org.uk/download/mkgmap.html

If you want to build your own precompiled sea data, you will need to build a copy
of mkgmap from the source, with the optional PrecompSeaGenerator source included.
This generator uses ESRI shapefiles as its source data.  It is not included in
the standard mkgmap build due to its dependencies on external libraries.

=== Diagnostic options ===

Messages produced by the diagnostic options are directed to stderr when no logging
configuration file is in use. When using a logging configuration file, they are logged
with custom level DIAGNOSTIC (1100).

;--report-roundabout-issues[=all|loop|direction|overlap|junctions|flares[,...]]
: 	Report on various types of roundabout issue:

:* all - report on all the types of issue. This is the default if --report-roundabout-issues
is specified without a value.
:* loop - check that each roundabout is formed from a single loop with no forks or gaps
:* direction - check the direction of travel around the roundabout, see also --fix-roundabout-direction
:* overlap - check that highways do not overlap the roundabout
:* junctions - check that no more than one connecting highway joins at each node
:* flares - check that roundabout flare roads are one-way, are in the right direction, and don't extend beyond the flare

;--roundabout-flare-rules-config=filename
: 	Provide a configuration file containing the rules to be used with the
--check-roundabouts=flares option in determining whether a pair of roads joining
a roundabout should be considered to be flares.

;--report-routing-islands
: 	Routing islands are small road networks which are not connected to other
roads. A typical case is a footway that is not connected to the main road
network, or a small set of ways on the inner courtyard of a large building.
:	These islands can cause problems if you try to calculate a route and the GPS
selects a point on the island as a start or end. It will fail to calculate the
route even if a major road is only a few steps away. If this option is
specified, then mkgmap will report these islands.
:	See also --max-routing-island-len.

;--report-similar-arcs
: 	Issue a warning when more than one arc connects two nodes and
the ways that the arcs are derived from contain identical
points.

;--report-dead-ends[=LEVEL]
: 	Set the dead end road warning level. The value of LEVEL determines
those roads to report:
:* 0 = none (the default)
:* 1 = report on connected one-way roads that go nowhere (default if no LEVEL specified)
:* 2 = also report on individual one-way roads that go nowhere.

;--dead-ends[=key[=value]][,key[=value]...]
:	Specify a list of keys and optional values that should be considered
to be valid dead ends when found on the node at the end of a way. Ways with
nodes matching any of the items in the list will not be reported as dead ends.
If no value or * is specified for value then presence of the key alone will
cause the dead end check to be skipped. The default is --dead-ends=fixme,FIXME.

=== POI options ===

;--add-pois-to-lines[=all|start|end|mid|other]
: 	Generate nodes that may be used by the points file to produce POIs at
various positions of non-closed lines. The option expects a comma separated list that
specifies the positions at which a node should be generated. The default is all.
If the inner or all values are used, a lot of points are likely to be generated and
these are likely to need filtering in the points file.
Each node is tagged with the same tags as the line plus mkgmap generated tags
mkgmap:line2poi=true and mkgmap:line2poitype with one of the following values:
:* start  - The first point of the line
:* end    - The last point of the line
:* inner  - Each point of the line except the first and the last
:* mid    - An extra point added by mkgmap at the middle of the line

;--add-pois-to-areas
: 	For each polygon and multipolygon, generate a node that may be used by the
points file to produce a POI.
The nodes are created after the relation style but before the other styles are applied.
Each node is tagged with the same tags of the area/multipolygon, plus mkgmap generated
tag mkgmap:area2poi=true.
Artificial polygons created by multipolyon processing are not used.
The nodes are created at the following positions:
:;polygons: the first rule that applies of:
::* the first node tagged with a tag defined by the --pois-to-areas-placement option
::* the centre point
:;multipolygons: the first rule that applies of:
::* the node with role=label
::* the centre point of the biggest area

;--pois-to-areas-placement=tag=value[;tag=value...]
:     A node is placed at the first node of the polygon tagged with the first tag/value
pair. If none of the nodes are tagged with the first tag-value pair the first node
tagged with the second tag-value pair is used and so on. If none of the tag-value pairs
matches or no tag-value pairs are supplied, the centre of the polygon is used.
It is possible to define wildcards for tag values like entrance=*.
<p>
Default: entrance=main;entrance=yes;building=entrance

;--make-poi-index
:	Generate a POI index in each map tile. Probably not used by modern devices,
but still supported.

;--poi-address
: 	Enable address / phone information to POIs. Address info is
read according to the "Karlsruhe" tagging schema. Automatic
filling of missing information could be enabled using the --location-autofill option.
Default is enabled, use --no-poi-address to disable.

;--nearby-poi-rules=type[-type][/all|named|unnamed]:distance[:delete-poi|delete-name][,...]
:	Defines a set of rules to follow when a POI is near to another of the
same type and label. Each rule consists of three parts separated by colons. The
first two parts must be provided; the last part can be defaulted.

:	The first part of the rule is a Garmin POI type code or range of type codes,
with an optional suffix; it determines when the rule is triggered. A type code may be
specified in decimal or hexadecimal (e.g. 0x2c0b). A rule is triggered
when processing a POI if the type code of the POI matches the rule type
or falls within the range of type codes,
providing there is also a match in the POI name and the first part
suffix. If the suffix is '/all' (the default) then the match is only made
on the type. If the suffix is '/named' then the rule is only triggered if
the POI has a name. If the suffix is '/unnamed' then the rule is only
triggered if the POI has no name. A wildcard of an asterisk character may
be used to match any type code. The wildcard may also be combined with a
suffix to allow separate processing of named and unnamed POIs.

:	The second part of the rule is the distance in metres which an already
processed POI must be within for it to be considered to be nearby and
hence trigger the action part of the rule.

:	The third part of the rule is the action part and provides two options:

::	delete-poi - the POIS are considered to be duplicates and the
duplicate is deleted. This is the default.
::	delete-name - the POIS are not duplicates, but only a single
name needs to be displayed.

:	Wildcard rules are only applied if no other rule is applicable.

:	For example:
:	--nearby-poi-rules=*/named:10,*/unnamed:25,0x2f17-0x2f1f:30

:	This has the following effect:
:	If no other rule applies, a POI with the same name and type and
	within 10m of one already processed will be deleted.
:	If no other rule applies, a POI having no name and of the same type
	and within 25m of one already processed will be deleted.
:	A POI of any type between 0x2f17 and 0x2f1f that is within 30m of
	another POI with the same type will be deleted.

:	If you have a lot of rules, the --nearby-poi-rules-config option is likely to
be easier to use.

:	Note: a POI that matches another in type, name and exact location is always
considered a duplicate and deleted.

;--nearby-poi-rules-config=filename
:Allows you to specify the nearby POI rules as described in the --nearby-poi-rules option
in a configuration file.
The format of the rules is the same as in --nearby-poi-rules, except that each rule is
specified on a separate line, rather than separated by commas. This format makes it easier
to view and maintain the rules when you have a lot of them. If you just have one or two rules,
it is simpler to use the --nearby-poi-rules option.

=== Miscellaneous options ===

;--max-jobs[=integer]
: 	Specify the number of threads to be used for concurrent processing.
Increasing max-jobs will reduce the execution time, providing sufficient
memory is available and the value is not greater than the number of cores
in the CPU. If no value is specified, the limit is set to the number of CPU
cores. The default is for the limit to be automatically set to a reasonable
value based on the amount of memory allocated to the Java runtime and the
amount used in processing the first tile.

;--keep-going
: 	Don't quit whole application if an exception occurs while
processing a map - continue to process the other maps.

;--block-size=integer
: 	Changes the block size that is used in the generated map. This
option is not usually needed, but sometimes an error message
will ask you to try a value for this option.

;--net
: 	Tells mkgmap to write NET data, which is needed for address search
and routing. Use this option if you want address search, but do
not need a map that supports routing or house number search.

;--route
: 	Tells mkgmap to write NET and NOD data, which are needed in maps
that support routing. If you specify this option, you do not need
to specify --net and --no-net is ignored.

;--add-boundary-nodes-at-admin-boundaries=NUM	
: 	This option controls how mkgmap calculates special routing nodes which
are needed by Garmin software to allow routing between different map tiles.
These nodes are written to section 3 and 4 in the NOD file.
When a road crosses the tile boundary (bbox), the road is split at this
point and such a special node is written. This allows routing between
one set of tiles produced by splitter.jar. However, if you create a map
from different sets of tiles, those tiles are likely to overlap.
For the overlapping tiles, none of the entries in NOD3 match and thus
routing across tile border doesn't work when the route is not fully
covered by one of the tiles.
The option tells mkgmap to add special nodes wherever a road touches or
crosses an administrative boundary. The NUM parameter specifies a filter
for the admin_level. Boundaries with a higher admin_level value are ignored.
The default value is 2 (country borders). Another reasonable value might
be 4. A value less or equal to 0 tells mkgmap to ignore intersections at
administrative boundaries.

;--drive-on=left|right|detect|detect,left|detect,right
: 	Explicitly specify which side of the road vehicles are
expected to drive on.
If the first option is detect, the program tries
to find out the proper flag. If that detection
fails, the second value is used (or right if none is given).
With OSM data as input, the detection tries to find out
the country each road is in and compares the number
of drive-on-left roads with the rest.
Use the --bounds option to make sure that the detection
finds the correct country.

;--ignore-turn-restrictions
: 	When reading OSM files, ignore any "restriction" relations.

;--ignore-osm-bounds
: 	When reading OSM files, ignore any "bounds" elements.
With this option selected generate-sea sometimes works better,
but routing across tiles will not work.

;--preserve-element-order
: 	Process the map elements (nodes, ways, relations) in the order
in which they appear in the OSM input. Without this option,
the order in which the elements are processed is not defined.

;--cycle-map
: 	Tells mkgmap that the map is for cyclists. This assumes that
different vehicles are different kinds of bicycles, e.g. a way
with mkgmap:car=yes and mkgmap:bicycle=no may be a road that is
good for racing bikes, but not for other cyclists.
This allows the optimisation of sharp angles at junctions of those roads.
Don't use with the default style as that is a general style!

;--nsis
: 	Write a .nsi file that can be used with the Nullsoft Scriptable Install System
(NSIS) to create a Windows Installer for using the map in BaseCamp.
It looks for an installer template and license file template in the resources and resources\installer folders.
Note that it does not use the license file specified in --license-file.

;--make-opposite-cycleways
: 	Some one-way streets allow bicycle traffic in the reverse
direction and this option makes a way with the same points as
the original that allows bicycle traffic (in both directions).

;--link-pois-to-ways
:     This option may copy some specific attributes of a POI
to a small part of the way the POI is located on. This can be used
to let barriers block a way or to lower the calculated speed
around traffic signals.
POIs with the tags highway=* (e.g. highway=traffic_signals)
or barrier=* (e.g. barrier=cycle_barrier) are supported.
The style developer must add at least one of the access tags
(mkgmap:foot, mkgmap:car etc.), mkgmap:road-speed and/or
mkgmap:road-class to the POI.
The access tags are ignored if they have no effect for the way,
else a route restriction is added at the POI so that only
allowed vehicles are routed through it.
The tags mkgmap:road-speed and/or mkgmap:road-class are
applied to a small part of the way around the POI, typically
to the next junction or a length of ~25m. The tags
are ignored for pedestrian-only ways.

;--process-destination
: 	Splits all motorway_link, trunk_link, primary_link, secondary_link,
and tertiary_link ways tagged with destination into two or three parts where
the second part is additionally tagged with mkgmap:dest_hint=*.
The code checks for the tags destination, destination:lanes,
destination:street and some variants with :forward/:backward like
destination:forward or destination:lanes:backward. If a value for
destination is found, the special tag mkgmap:dest_hint is set to
it  and the way is split.
This happens before the style rules are processed.
This allows to use any routable Garmin type (except 0x08 and 0x09)
for that part so that the Garmin device tells the name of
this part as hint which destination to follow.
:	See also --process-exits.

;--process-exits
:     Usual Garmin devices do not tell the name of the exit on motorways
while routing with mkgmap created maps. This option splits each
motorway_link, trunk_link, primary_link, secondary_link, and
tertiary_link way into three parts.
All parts are tagged with the original tags of the link.
Additionally the middle part is tagged with the following tags:

::	mkgmap:exit_hint=true
::	mkgmap:exit_hint_ref=<ref tag value of the exit>
::	mkgmap:exit_hint_name=<name tag value of the exit>
::	mkgmap:exit_hint_exit_to=<exit_to tag value of the exit>

:	Adding a rule checking the mkgmap:exit_hint=true makes it possible
to use any routable Garmin type (except 0x08 and 0x09) for the middle
part so that the Garmin device tells the name of this middle part as
hint where to leave the motorway/trunk.
The first part must have type 0x08 or 0x09 so that Garmin uses the hint.

;--delete-tags-file=filename
: 	Names a file that should contain one or more lines of the form
TAG=VALUE or TAG=*. Blank lines and lines that start with
a # or ; are ignored. All tag/value pairs in the OSM input are
compared with these patterns and those that match are deleted.

;--ignore-fixme-values
: 	Ignore all tags for which the value matches the regular expression pattern "(?i)fix[ _]?+me".	

;--tdbfile
: 	Write files that are essential to running with BaseCamp; a .tdb file and
an overview map. The options --nsis and --gmapi imply --tdbfile.

;--show-profiles=1
: 	Sets a flag in the tdb file. The meaning depends on the availability of DEM
data (see "Hill Shading (DEM) options").
: 	Without DEM data the flag enables profile calculation in BaseCamp based on
information from contour lines.
: 	If DEM data is available the profile is calculated with that
information and the flag only changes the status line to show the height when
you hover over an area with valid DEM data.
: 	The default is show-profiles=0.

;--transparent
: 	Make the map transparent, so that if two maps covering the same area are
loaded, you can see through this map to see details from the other map too.
Typically used for maps containing just contour lines. See --draw-priority
as well.

;--draw-priority=integer
: 	When two maps cover the same area and both are enabled in the device, this
option controls the order in which they are drawn in and therefore which map
is on top.  Higher priorities are drawn "on top" of lower priorities.
The map drawn on top must be transparent for the one underneath to be seen.
The default value is 25.

;--custom
: 	Write a different TRE header. With this option, mkgmap writes the bytes
0x170401 instead of the default 0x110301 at offset 43. Useful for marine maps.	

;--hide-gmapsupp-on-pc
: 	Set a bit in the gmapsupp.img that tells PC software that the file is
already installed on the PC and therefore there is no need to read it
from the device.

;--verbose
: 	Makes some operations more verbose. Mostly used with --list-styles.

;--order-by-decreasing-area
:	Puts area/polygons into the map in decreasing size order, so
that smaller features are rendered over larger ones
(assuming the draw order is equal).
The tag mkgmap:drawLevel can be used to override the
natural area of a polygon, so forcing changes to the rendering order.

;--max-routing-island-len=integer
: 	Routing islands are small road networks which are not connected to other
roads. A typical case is a footway that is not connected to the main road
network, or a small set of ways on the inner courtyard of a large building.
:	These islands can cause problems if you try to calculate a route and the GPS
selects a point on the island as a start or end. It will fail to calculate the
route even if a major road is only a few steps away. If a positive value is
specified, then mkgmap will mark islands with a total length less than the
specified value in metres as not routable.
Reasonable values are 500 or higher. The default is to not to mark any islands
as unroutable. If any of the roads forming the island touches a tile boundary or a
country border the island is ignored, as it may be connected to other roads in
a different tile.
:	See also options --add-boundary-nodes-at-admin-boundaries and
--report-routing-islands.
: This option seems to cause routing problems in BaseCamp.

;--fix-roundabout-direction
: 	Reverse the direction of travel around roundabouts that do not have the expected
direction (clockwise when vehicles drive on the left). See also --report-roundabout-issues=direction.

=== Deprecated and Obsolete Options ===

;--check-roundabouts
: 	Deprecated; use --report-roundabout-issues and/or --fix-roundabout-direction instead.
Check that roundabouts have the expected direction (clockwise
when vehicles drive on the left). Roundabouts that are complete
loops and have the wrong direction are reversed. Also checks
that the roundabouts do not fork or overlap other roundabouts
and that no more than one connecting highway joins at each node.

;--check-roundabout-flares
: 	Deprecated; use --report-roundabout-issues=flares instead.
Check that roundabout flare roads point in the correct
direction, are one-way and don't extend too far.

;--max-flare-length-ratio=NUM
: 	Deprecated; use --roundabout-flare-rules-config instead.
When checking roundabout flares, ignore roads whose length is
greater than NUM (an integer) times the distance between the
nodes on the roundabout that the flare roads connect to.

;--check-routing-island-len=integer
: 	Deprecated; use --report-routing-islands and --max-routing-island-len instead.
Translated to --report-routing-islands if info level logging is enabled, plus
--max-routing-island-len=integer.

;--drive-on-left
;--drive-on-right
: 	Deprecated; use --drive-on instead.
The options are translated to --drive-on=left|right.

;--make-all-cycleways
:   Deprecated; use --make-opposite-cycleways instead. Former meaning:
Turn on all of the options that make cycleways.

;--charset=name
: 	Obsolete; use --code-page instead.

;--map-features=filename
: 	Obsolete; use --style-file instead.

;--ignore-maxspeeds
: 	Obsolete; former usage:
When reading OSM files, ignore any "maxspeed" tags.

;--ignore-builtin-relations
: 	Obsolete; former usage:
When reading OSM files, skip the built-in processing of
relations. This speeds up the processing non-routable map
layers that do not contain multipolygons. This implies
--ignore-turn-restrictions.

;--road-name-pois[=GarminCode]
: 	Obsolete; former usage:
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.  This is a workaround for not
being able to search for roads.
0x2f15: a blue dot in the middle of the road, and if you select,
or 'hover' over it, the street name appears.

;--make-cycleways
:   Obsolete; former meaning:
Some streets have a separate cycleway track/lane just for
bicycle traffic and this option makes a way with the same
points as the original that allows bicycle traffic. Also,
bicycle traffic is prohibited from using the original way
(unless that way's bicycle access has been defined).

;--remove-short-arcs[=MinLength]
:  	Now ignored, former usage:	
Merge nodes to remove short arcs that can cause routing
problems. If MinLength is specified (in metres), arcs shorter
than that length will be removed. If a length is not
specified, only zero-length arcs will be removed.

;--adjust-turn-headings[=BITMASK]
:	Now ignored, former usage:	
Where possible, ensure that turns off to side roads change
heading sufficiently so that the GPS believes that a turn is
required rather than a fork. This also avoids spurious
instructions to "keep right/left" when the road doesn't
actually fork.

:	Optional BITMASK (default value 3) allows you to specify which
adjustments are to be made (where necessary):
::	1 = increase angle between side road and outgoing main road
::	2 = increase angle between side road and incoming main road
