Worldwide routable Garmin maps: URL REMOVED

Yes, http://www.javawa.nl/gmtk_en.html

There are still two red tiles on the latest OFM (also a small part on London).
Lambertus, can you check in your error logs what went wrong? Maybe I can examine those two osm files to see where/if it crashes on my OFM styles? Could be a mkgmap, OFM or OSM bug.

great !!!
thank you very much for javawa GMTK

I’ll try to look into this tonight. I suspect is has something to do with the recent changes in Splitter algorithms as it was updated at the end of May from r343 to r404 (and since then the latest version on each map update).

Edit:
I already took a peek in the log and, indeed, the initial file is too large for Mkgmap so needs further subsplitting but Splitter cannot find a suitable split configuration :roll_eyes:

Edit:
Possibly there is something else going on that eventually triggers the above. Take a look on the website at Cleveland, Ohio, USA in the OFM lite map. The tiles are getting really small there which suggests that Mkgmap has problems rendering the area which results in further subsplitting. The root cause could be actually something in Mkgmap, OSM data and/or the style.

What I don’t understand is why the other generic maps dont have such tiny tiles. Does this subsplitting is carried out after mkgmap fails to process this tile? If so, the OFM style might get stuck on maybe a certain OSM element. Maybe I can investigate that tile further. If this doesnt depend on mkgmap and my OFM style but a huge number of nodes, maybe this area contains too many nodes and the splitter tries to get below a certain number of nodes? Maybe those nodes are not even used in my OFM map. In that case, maybe it’s better to carry out the mkgmap process after a 2nd or 3rd subsplit, no matter how many nodes there are in a tile. I always use --max-nodes=1600000 and until so far hardly saw that a tile was skipped (and the last time was a few years ago).

All the maps are rendered using the same build scripts, source data, applications and the same initial tile splits. So if there is different behavior then it’s either a map specific setting (e.g. max-nodes) or the style. I’ll link to the source data later.

The generic routable also has problems, the new generic routable is fine.

Edit:
Initial spliit setting -max-nodes=1500000
The problem initial tile is: 63440523.o5m which is unsuccessfully rendered with the following commandline:
ulimit -t 900 && java -Xmx1792M -XX:StringTableSize=100003 -ea -jar /home/lambertus/garmin/utils/mkgmap/mkgmap.jar --family-id=20011 --product-id=1 --draw-priority=20 --description=‘Openfietsmap Lite’ --series-name=‘Openfietsmap Lite’ --style-file=‘/home/lambertus/garmin/utils/styles/’ --style=‘ofm_lite’ --bounds=‘/home/lambertus/garmin/utils/bounds.zip’ --reduce-point-density=4 --reduce-point-density-polygon=8 --precomp-sea=‘/home/lambertus/garmin/utils/sea.zip’ --generate-sea=land-tag=natural=background --show-profiles=1 --add-pois-to-lines --index --location-autofill=is_in,nearest --latin1 --remove-short-arcs --min-size-polygon=10 --merge-lines --add-pois-to-areas --preserve-element-order --process-destination --process-exits --route --name-tag-list=name:en,int_name,name:zh_py,name:engels,name --x-housenumbers --copyright-message=‘Map data \A9 openstreetmap.org, Map layout \A9 openfietsmap.nl’ --input-file=63440523.o5m

Which gives:
java.lang.AssertionError
at uk.me.parabola.mkgmap.reader.osm.RestrictionRelation.getWayIds(RestrictionRelation.java:604)
at uk.me.parabola.mkgmap.reader.osm.LinkDestinationHook.retrieveWays(LinkDestinationHook.java:149)
at uk.me.parabola.mkgmap.reader.osm.LinkDestinationHook.end(LinkDestinationHook.java:727)
at uk.me.parabola.mkgmap.reader.osm.OsmReadingHooksChain.end(OsmReadingHooksChain.java:79)
at uk.me.parabola.mkgmap.reader.osm.o5m.O5mBinMapDataSource.load(O5mBinMapDataSource.java:49)
at uk.me.parabola.mkgmap.reader.osm.OsmMapDataSource.load(OsmMapDataSource.java:127)
at uk.me.parabola.mkgmap.main.MapMaker.loadFromFile(MapMaker.java:167)
at uk.me.parabola.mkgmap.main.MapMaker.makeMap(MapMaker.java:63)
at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:253)
at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:249)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Exiting - if you want to carry on regardless, use the --keep-going option

Then my script tries to subsplit until everything is rendered which ultimately leaves a tiny tile that cannot be rendered: 63442037.o5m

As a sidenote:
I also see this error for OFM Lite:
SEVERE (StyledConverter): 63440363.o5m: routable type 0x08 is used with a non-routable way which was also added as a routable way. This leads to routing errors. Try --check-styles to check the style.

I havent examined the problem yet, but I notice one important difference: -ea (enable assertion).
In the past map generation broke on tiny errors on osm when enabling this. After I removed this option, I never had any errors/empty tiles. See https://www.mail-archive.com/mkgmap-dev@lists.mkgmap.org.uk/msg10947.html

Another problem is showing up with the generic map: A rendered tile is judged to be too large by my build script and is subsequently subsplit, but Splitter is unable to generate at least two subtiles. The succesfully rendered tile is removed because it is too large but there is no replacement available so the area turns up as a red square in the website. I think this needs to be reported to the Splitter devs.

ulimit -t 900 && java -Xmx1792M -XX:StringTableSize=100003 -ea -jar /home/lambertus/garmin/utils/mkgmap/mkgmap.jar --family-id=2000 --product-id=6 --draw-priority=20 --description=‘OSM Generic Routable’ --series-name=‘OSM Generic Routable’ --style-file=‘/home/lambertus/garmin/utils/styles/’ --style=‘default’ --bounds=‘/home/lambertus/garmin/utils/bounds.zip’ --reduce-point-density=4 --reduce-point-density-polygon=8 --precomp-sea=‘/home/lambertus/garmin/utils/sea.zip’ --show-profiles=1 --add-pois-to-lines --index --location-autofill=bounds,is_in,nearest --latin1 --remove-short-arcs --min-size-polygon=10 --merge-lines --add-pois-to-areas --preserve-element-order --make-opposite-cycleways --process-destination --process-exits --route --name-tag-list=name:en,int_name,name:zh_py,name:engels,name --input-file=63240007.o5m
Time started: Mon Jun 30 09:23:22 CEST 2014
Number of MapFailedExceptions: 0
Number of ExitExceptions: 0
Time finished: Mon Jun 30 09:24:38 CEST 2014
Total time taken: 75772ms
09:24:38 Processing file 63240007.o5m failed (result=0, exists=1, size=13342208)
09:24:38 Removing 63240007.img
09:24:38 Acquire the split lock
09:24:38 Splitting 63240007 with nodes=1500000, starting at 63242034. Max id was 63242033, level = 1

Cannot find a good split with exactly 2 areas

The lines in italics come from my script and the underscored line is coming from Splitter. The other lines come from Mkgmap.

The original source tile that somehow cannot be subsplit further is: 63240007.o5m

The commandline for Splitter-r412 is:
java -Xmx7000m -ea -jar ~/garmin/utils/splitter/splitter.jar --output=o5m --keep-complete=true --no-trim=true --mapid=1 --max-nodes=1500000 --max-areas=1024 --write-kml=$split_dir/initial.kml --geonames-file=/home/lambertus/garmin/utils/cities15000.zip /home/lambertus/planet.openstreetmap.org/planet-latest.o5m

Edit:
I changed the build script to render the problem tile again when Splitter cannot subsplit further and just not check the result but continue rendering the next tile.

Thank you everyone for the help. It appears that, per Beddhist, ‘shortest distance’ instead of ‘fastest route’ was the culprit.

I’m glad the cause has been found. :slight_smile:

I tracked down what caused the tile of Cleveland did not process. I couldnt download your o5m files but with a small extract from Cleveland I was able to reproduce it.

If I remove -ea it will process normally (thats what I always do).
With -ea, mkgmap couldnt compile the tile.
If I use --ignore-turn-restrictions mkgmap will process the tile, so the bug was in one of the turn-restrictions.

I found out that the problem was this relation http://www.openstreetmap.org/relation/3490966
My style didnt seem to handle the type=restriction:motorcar very well so I changed the code (for a bike map I want to ignore this restriction, but somehow mkgmap crashed on this). I dont know if it’s a bug in mkgmap or in my styles but I think it will pass the next update without errors.

Thanks Ligfietser,

The file access forbidden was a dumb permission problem.

I remember -ea was once necessary to prevent Mkgmap generating broken maps but apparently this is no longer so. If the next update is still giving problems then I’ll remove this option.

There is still a line missing in the typ file for generic_new: https://code.google.com/p/mkgmap-style-sheets/source/browse/trunk/typ/world/2000.txt

Can you add the following before line 2188?:

[_line]

I’ve added _line, thanks for noticing it.

You can ignore those errors :slight_smile:

Thanks.

Great.

New update running :slight_smile:

The problem with the OFM-lite style seems to be resolved, Cleveland looks normal again.

The generic map still has red-tiles, a better work-around is now implemented and a new version should come online ~tomorrow. A report for Splitter is sent to the Mkgmap mailinglist.

OFM doesn’t have those red tiles anymore, but I do see a lot of red tiles in the generic map. I notice the tiles in the ocean are not matched together (because you use --no-trim=true). Any reason for this to use --no-trim? Maybe it helps to solve the splitter problem to leave this parameter out (the generic new map is fine).

Well, I thought the -no-trim option should prevent this behavior instead of provoking it. :wink:

But I’ll try it for the next update (after the one that’s currently running).

I never use --no-trim because it makes gaps in the ocean, so I guess it’s better to leave it out :wink:
If I search on the mkgmap dev list, I find this comment from Gerd:
http://comments.gmane.org/gmane.comp.gis.openstreetmap.mkgmap.devel/13701

The problem with the red-squares is solved, also for the generic map. :slight_smile: The script now expects at least 2 tiles from Splitter on each subsplit and when just one new tile is found it will simply render this without further tests. This is a solid work-around that even works when Splitter eventually gets fixed.

Next up: reducing the number of map variants (Windows, gmapsupp, gmapi, tiles) to reduce the CPU load. Especially the NSIS installer for Windows uses a lot of CPU cycles. Ligfietser’s OFM map shows that it’s possible to combine a small installer with the tiles in a single zip-file, resulting in the need for only one file for both Windows as Linux.

Edit 22:00 CET:
I’m guessing about 40 tot 50 people are downloading at the same time from the country server, the harddisk is maxxed-out and 200+ MBit/s is pumped out the ethernet port… :sunglasses: :smiley:

Why has my Norton Anti-Virus software blocked this website as a “known malicious” website, as of this morning?