Self created maps are not always visible on Garmin Device (Dakota 20)

I hoping to get some advice. I am trying to create my own maps for my Garmin Dakota 20. I’ve downloaded the .osm.pbf files for the countries I want. I have split them and then modified the ‘template.args’ file to have a unique family-id. I then make the map using mkgmap and the map is built. During this whole process no errors are displayed.

I then rename the gmapsupp.img file to be gmapsuppBE.img, gmapsuppFR.img etc. and place them on the microSD card in the ‘Garmin’ directory in the root of the microSD card. When I turn on my Dakota 20 on the map for Belgium is not visible and I don’t understand why. Can someone please point me in the right direction?

These are the commands I used for downloading the map data.


curl http://download.geofabrik.de/europe/belgium-latest.osm.pbf --output BE.osm.pbf

curl http://download.geofabrik.de/europe/france-latest.osm.pbf --output FR.osm.pbf

These are the commands I use for splitting the downloaded map data.


java -Xmx1500m -jar ../splitter-r597/splitter.jar --max-nodes=1100000 ./BE.osm.pbf 

java -Xmx1500m -jar ../splitter-r597/splitter.jar --max-nodes=1100000 ./FR.osm.pbf 

I edit the template.args file to set a unique family id. I’ve chosen 6324 followed by the international dialing code for the respective country 0044, 0033, 0032, 0031 etc.


user@laptop:~/Downloads/FR$ head template.args 
#
# This file can be given to mkgmap using the -c option
# Please edit it first to add a description of each map.
#

# You can set the family id for the map
family-id: 63240033
product-id: 1

# Following is a list of map tiles.  Add a suitable description

and


user@laptop:~/Downloads/BE$ head template.args 
#
# This file can be given to mkgmap using the -c option
# Please edit it first to add a description of each map.
#

# You can set the family id for the map
family-id: 63240032
product-id: 1

# Following is a list of map tiles.  Add a suitable description

I then create the maps with the following commands.


mkgmap --route --gmapsupp -c template.args --mapname=63240033 --area-name="France" --description="OSM France" --split-name-index --series-name="OSM France" --housenumbers --country-name="France" --country-abbr="FR"  --latin1 --overview-mapname="OSM France" --overview-mapnumber=63240033

and


mkgmap --route --gmapsupp -c template.args --mapname=63240032 --area-name="Belgium" --description="OSM Belgium" --split-name-index --series-name="OSM Belgium" --housenumbers --country-name="Belgium" --country-abbr="BE"  --latin1 --overview-mapname="OSM Belgium" --overview-mapnumber=63240032

What I don’t understand is in the list of installed map the Belgian map is not listed but the French one is. Can someone help please?

Your family-id contains 8 digits, which is probably out of range. Narrow it down to 4, max 5 digits?
See also this table https://wiki.openstreetmap.org/wiki/OSM_Garmin_ID to prevent overlap with other existing maps if you plan to publish your maps later.

I have found somewhere this:
The highest number in the family-id (FID) is 65535, which corresponds to HEX “FFFF” (4 characters).
I will add this info to the wiki table.

  1. The argument -c templates.args comes too early. Most options should appear before it.
  2. It is not clear to me if you have two different directories for the two maps or not. You should have.

Thanks for the pointers. I’m re-creating the maps and will let you know the results. I am creating each map from it’s own directory into which I split the map data for the respective countries. I’ve invoked mkgmap with -c template.args as the last parameter and the map ‘numbers’ as 1033 for France, 1032 for Belgium, 1031 for Netherlands etc. These are less than #ffff and are not already in use either.

I’ll post my results later. Is there a specification for all these parameters? I’m wondering if the text labels I defined might also have overrun the reserved space and caused corruption? I’ve not looked at the source code for mkgmap but not validating input can lead to all sorts of problems (buffer/stack overflows etc.)

The help http://www.mkgmap.org.uk/doc/options says

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

I found no code that actually checks this limit.
Reg. your splitter options: It is probably best to use the corresponding value for splitter, so that tiles for the map with id 1032 start with 10320001 :–mapid=10320001

Gerd, maybe add a warning if the Fam ID > 65535 in mkgmap? All my ID’s are above 9999 and they work fine. I haven’t tested the 65535 limit myself but I remember that not all numbers with 5 digits were supported.

Yes, a check would be good. The value is finally stored in a 16 bit field. I would assume the value is used as an unsigned 16 bit int by Garmin, but maybe values > 32767 given to mkgmap already cause problems with the current code.

Glad to hear that, so I can continue labeling my maps with 20xxx for quite some years :wink:

Still not working I’m afraid. I’ve made 6 maps with the following command

mkgmap --route --gmapsupp  --mapname=1031 -c template.args

and not all maps were visible

Then I tried

mkgmap --route --gmapsupp  -c template.args

And only three of the six maps I made were visible

If I download maps from garmin.openstreetmap.nl then they show up so I know the Garmin Dakota 20 is capable of handling 6 maps.

Could people possibly post their versions of how the invoke the mkgmap command please? Maybe I can learn something from them, especially if someone knows how garmin.openstreetmap.nl invokes the command.

Thanks for all responses to date.

When I’ve needed to do it, I think that rather than create separate maps I’ve always merged the files that I’ve created into one before running splitter and mkgmap. I’ve not needed to do it for a while though - it’s rare that I visit non-contiguous countries!

Consequently I’ve never worried about the family ID et al because I’ve only ever got one user-created map to worry about. https://www.openstreetmap.org/user/SomeoneElse/diary/38613 is something I wrote a while back; while that’s not exactly what I run on a monthly basis I think it’s close. https://github.com/SomeoneElseOSM/mkgmap_style_ajt/blob/master/garmin_map_etrex.sh is similar.

Thanks for the tip. I tried running split in the downloaded map data and got this:


java -Xmx3G -jar ../splitter-r597/splitter.jar --max-nodes=1100000  *.osm.pbf > output.log
Warning: --keep-complete is only used for the first input file. Further files must use higher ids.
Error: Node ids are not sorted. Use e.g. osmosis to sort the input data.
This is not supported with keep-complete=true or --problem-list
uk.me.parabola.splitter.SplitFailedException: Node ids are not sorted
        at uk.me.parabola.splitter.MultiTileProcessor.storeCoord(MultiTileProcessor.java:497)
        at uk.me.parabola.splitter.MultiTileProcessor.processNode(MultiTileProcessor.java:126)
        at uk.me.parabola.splitter.AbstractMapProcessor.consume(AbstractMapProcessor.java:82)
        at uk.me.parabola.splitter.OSMFileHandler.execute(OSMFileHandler.java:157)
        at uk.me.parabola.splitter.ProblemLists.calcMultiTileElements(ProblemLists.java:255)
        at uk.me.parabola.splitter.Main.useProblemLists(Main.java:499)
        at uk.me.parabola.splitter.Main.start(Main.java:127)
        at uk.me.parabola.splitter.Main.main(Main.java:81)

Will retry with keep-complete=false to see what happens

The best way is to merge the files first. Use e.g. osmconvert for that.
https://wiki.openstreetmap.org/wiki/Osmconvert

Could you explain a bit more please?
Should I merge the .osm.pbf files into one big .osm.pbf file and then run split on that followed by mkgmap to create gmapsupp.img?

 
osmconvert NL.osm.pbf BE.osm.pbf LU.osm.pbf  -o Benelux.osm.pbf

Is this what you are suggesting?

Yes, that’s what I would do.

Hello all, after a couple of years I’ve tried again to make my own maps and I have been successful in getting them to appear on my Dakota 20. Its probably not the best way but it works for me. I download the .pbf file for the country or area I’m interested in from http://download.geofabrik.de/. I then split the .pbf file using the following command:

java -Xmx1024m -jar ../splitter/splitter.jar --max-nodes=900000 madagascar-latest.osm.pbf

Working from the example settings from https://wiki.openstreetmap.org/wiki/Mkgmap/help/How_to_create_a_map I then use the following command:

java -Xmx1024m -jar ../mkgmap/mkgmap.jar  --route --mapname=63240261  --add-pois-to-areas --bounds=../bounds-latest.zip --precomp-sea=../sea-latest.zip --index --country-name=MADAGASCAR --country-abbr=MD  --description="Madagascar OSM 07072022" --family-name="Madagascar OSM 07072022" --family-id=0261 --gmapsupp ./6324*.osm.pbf

Once finished I rename the gmapsupp.img file by appending the country abbreviation and then copy the file to the microSD card.

I though I would update on my progress just incase there are others still using their trusty Garmin devices!