Worldwide routable Garmin maps: URL REMOVED

Please use the very latest r2328. It contains a fix when using location-autofill=bounds together with add-pois-to-areas.

I can reproduce the Prinsengracht problem with this old bounds file. There are two possible problems with the old bounds zip file.

  1. The zip file must not contain subdirectories any more since r2275.
  2. If the zip file does not contain subdirs I get error messages in the log file:
Failed to read boundary file bounds_1850000_750000.bnd Unsupported file format

I am not sure what has changed in the bounds file format but I am also not sure which mkgmap release was used to create the

Anyhow using the latest the problem disappears.


Thanks WanMil for confirming that the bounds file is probably too old, I’ve also upgraded to the latest Mkgmap and run an update now.


I like your tool and the style of the resulting maps. But I wanted to have a very large map.
This resulted in a server error with the message: “The requested URL’s length exceeds the capacity limit for this server.”

Also I know that this would be not so good for your server. Is it possible e.g. to download a map with europe. I think this would reduce CPU load for you, and it would be possible to get large maps.


I’m very well aware that everyone has his own way of working, but mine can be an answer on your question. Most likely it is not the best way, but by posting it I want to learn something.

  1. I download only predefined countries. In most cases the tile set already exists and is ready for immediate download. I need only and rename it offcourse with the country name.
  2. I extract all tile sets to a single directory within my Garmin directory. There will be double tiles, but just overwrite them.
  3. By using GMapTool and cGPSmapper, I create a new Mapset with an unique ID for MapSource. This step takes almost no time.
  4. Within MapSource I select only the part which I want to send to my GPS. And I have still access to the previous ones.

The conclusion is for at least me is that I have within a mum of time what I want and without huge CPU effort on the server side (just downloading).


Searching for “Prinsengracht” shows some improvements, although there are still some weird results.
Here is a comparison between the search results of the Generic map and the OFM Benelux.

What I would expect is streetname,place,province,country (like in the OFM BNL) but the generic map shows streetname,nearest place poi,place,country
Sometimes the local place poi is an obvious mapping error like “Leidseplein” (some tourist was mapping for the renderer and put a suburb poi on this square).
There are very strange results like Enkhuizen in Edam-Volendan (spelling error and wrong assignment, Enkhuizen is not in Edam-VolendaM!)
Also Meppel is not even close to Grafschaft Bentheim, which lies in Germany!

I dont know where those errors come from, I have to wait for the results of the OFM Lite to see if the results are different (could be caused by the styles file)
Maybe the bounds file is broken, too (for the OFM Benelux i have used an older bounds file from 22/01/2012)

Yes, this bounds file is too old. You should see some errors in the mkgmap logfile.


I havent noticed any errors.
The results still look good (see the screenshot, the right box with OFM Benelux is made with the older bounds file. I still have to test the latest one to see if the results are different)

Btw here are the locator settings in my Openfietsmap Benelux styles

# first set the country code
mkgmap:country!=* & mkgmap:admin_level2=* { set mkgmap:country='${mkgmap:admin_level2}' }
mkgmap:country!=* & addr:country=* { set mkgmap:country='${addr:country}' }
mkgmap:country!=* & is_in:country=* { set mkgmap:country='${is_in:country}' } 

mkgmap:country=DEU & mkgmap:region!=* & mkgmap:admin_level3=* { set mkgmap:region='${mkgmap:admin_level3}' }
mkgmap:country=LUX & mkgmap:region!=* & mkgmap:admin_level6=* { set mkgmap:region='${mkgmap:admin_level6}' }
mkgmap:country=BEL & mkgmap:region!=* & mkgmap:admin_level6=* { set mkgmap:region='${mkgmap:admin_level6}' }
mkgmap:region!=* & mkgmap:admin_level4=* { set mkgmap:region='${mkgmap:admin_level4}' }
mkgmap:region!=* & mkgmap:admin_level5=* { set mkgmap:region='${mkgmap:admin_level5}' } 
mkgmap:region!=* & mkgmap:admin_level6=* { set mkgmap:region='${mkgmap:admin_level6}' } 
mkgmap:region!=* & is_in:county=* { set mkgmap:region='${is_in:county}' }

# Germany = DEU cities
mkgmap:country=DEU & mkgmap:admin_level4=Hamburg {set mkgmap:city='${mkgmap:admin_level4}' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8|subst:Gemeinde |subst:Stadt }' }
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' } 
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level6=* { set mkgmap:city='${mkgmap:admin_level6}' } 
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' } 
mkgmap:country=DEU & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' } 

mkgmap:country=NLD & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' } 
mkgmap:country=BEL & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=AUT & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8|subst:Gemeinde }' }
mkgmap:country=CZE & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=CZE & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' }
mkgmap:country=DNK & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=DNK & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' }
mkgmap:country=FIN & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=FIN & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=FRA & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=FRA & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=ISL & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=ITA & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=NOR & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=POL & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' }
mkgmap:country=POL & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=PRT & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=PRT & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=SVN & mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' }
mkgmap:country=ESP & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
mkgmap:country=SWE & mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' }
mkgmap:country=SWE & mkgmap:city!=* & mkgmap:admin_level7=* { set mkgmap:city='${mkgmap:admin_level7}' }
mkgmap:country=CHE & mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' }
# common rules for all the rest of countries
mkgmap:city!=* & mkgmap:admin_level8=* { set mkgmap:city='${mkgmap:admin_level8}' } 
mkgmap:city!=* & mkgmap:admin_level9=* { set mkgmap:city='${mkgmap:admin_level9}' } 
mkgmap:city!=* & mkgmap:admin_level10=* { set mkgmap:city='${mkgmap:admin_level10}' } 
mkgmap:city!=* & is_in:city=* { set mkgmap:city='${is_in:city}' }
mkgmap:city!=* & addr:city=* { set mkgmap:city='${addr:city}' }

mkgmap:postal_code!=* & mkgmap:postcode=* { set mkgmap:postal_code='${mkgmap:postcode}' } 
mkgmap:postal_code!=* & addr:postcode=* { set mkgmap:postal_code='${addr:postcode}' } 

mkgmap:street!=* & addr:street=* { set mkgmap:street='${addr:street}' }
mkgmap:street!=* & addr:housename=* { set mkgmap:street='${addr:housename}' }

mkgmap:housenumber!=* & addr:housenumber=* { set mkgmap:housenumber='${addr:housenumber}' }

mkgmap:phone!=* & phone=* { set mkgmap:phone='${phone}' }

mkgmap:is_in!=* & is_in=* { set mkgmap:is_in='${is_in}' }

Unfortunately, the street search of the OFM Lite version is also messed up: :rage:

I have no idea what the cause is, because the styles should be ok (style file is the same as my map).

Next thing to test is to generate my maps with the latest bounds file although I doubt that this is the cause.

Another question for Lambertus, regarding those parameters:

$command.= " --style-file=‘$style_dir’“;
$command.= " --style=‘$style’”;

I dont use the first line, just --style-file=%style% with %style% the directory to my style files.
What does the first line mean? What kind of styles are in that style_dir? Maybe another set of locator files that is messing up the index?

I generated one tile of my Openfietsmap Benelux with the latest and I couldnt reproduce those errors.
It finds Prinsengracht, Enkhuizen, Noord-Holland, NLD (as expected) and not Prinsengracht, Enkhuizen (or 30),Edam-Volendan,NLD

So the fault could be in the styles files. Lambertus, can you mail me a copy of the exact contents of your $style_dir?

Finally, I think i have found the index bug :slight_smile:

In your first step, I missed the index parameter.
This one is crucial. It reads the location from the style file parameters and puts the info in the img tiles.

In the second step another index is created, but it misses some location info that lacks in the individual tiles.
Maybe Wanmil can confirm this, because it is just a wild guess. I can partly reproduce the error when I first make an img tile without the --index (Prinsengracht,30,ABC) and then compile a new map with the --index parameter.

Good day Lambertus

I’ve used you nifty site many times to generate custom maps to send directly to my 60CSx. Now I’m trying desperately to use Base Camp on Mac OSX (ML). First I downloaded the “” file and Mac seems to extract it, but I can’t figure out or seem to Google what to do from there? There doesn’t seem to be any install file or anything I can import to Base Camp on Mac… (I could be missing something obvious I’m very new to Mac) Thanks a lot for the great site

Did you try double clicking the extracted file?
On a Mac things are simplier than you think…

Thanks for your great maps. I really enjoy them. :smiley:

I have one little idea:
I often use a custom selection of tiles. It would be nice to do the tile selection by loading a tiles.txt file from a previous download to get the same selection as before.

That’s what I expected. Check this screen shot. Do I need to dl again or am I missing something?

Ough, just watch out for the obvious things… I missed that too that the index parameter was not there.

Without index parameter the bounds files are not used. And I think the address information should be completely missing (but I would have to step through the source code to know that for sure…).
The second step merges the tiles only and does not add any information to the tiles. So if index is missing on the first step the information from the bounds files will not be added on the second step.


That folder should be shown as a file by the Finder, maybe you didn’t run BaseCamp yet?

Tried restarting and opening/closing Base Camp. Read something about red tiles, but I haven’t seen any. Are there any known issues? I have the map on my 60CSx now but I could really use it on Base Camp to plan long routes

So I dl the zip file for Mac, I double click to extract it, open Base Camp and double click a file? Edit: I tried to dl a new map but I’m stuck at the same place. I double click the zip file and Mac extracts it, but I can’t find anything to open after that.

FYI, I located the error and found a workarund:

Apparently, the HTTP request is so large that it is split into multiple packets. This can confuse some HTTP proxies and firewalls performing certain protocol checks:

.Voilá, that worked. If anyone else with a SonicWALL firewall encounters the same problem, this is the workaround:


Hello all,

I tried to create a containing germany, austria, switzerland and some parts of italy. While submitting the request I get the following error:

Request-URI Too Large

The requested URL's length exceeds the capacity limit for this server.
Apache/2.2.22 (Ubuntu) Server at Port 80

I think this because the request is sent as as HTTP GET request, which is limited by size. Would it be possible to accept the request as a HTTP POST request, which dies not have a limitation of size. Or is this limitation to prevent to large requests?

Thanks for any information about it,

I hope that’s it ligfietser. Although I pretty sure the --index parameter was left out for a reason but, alas, can’t find it anymore. :roll_eyes:

I’ve started a new update, let’s see what it does. Thanks!

Great, I’m glad you worked it out yourself :slight_smile:

I think I’ll rewrite the submit to use an http post method, that would solve the server (and proxy) limitations. Maximum tilecount checks are also performed in the code and will let you know when you request too many tiles.

Edit: The request has now been rewritten as a POST request (and will now also open in a new browser window/tab).

Thank you very much, Lambertus :slight_smile: