Hacking MoNav (Dreams come true)

Travel-compass (openclipart.org, public domain)

Travel-compass (openclipart.org, public domain)


As I started mapping and writing software for openstreetmap back in 2006, I did this mainly as I noticed that my Garmin eTrex Venture Cx for 500€ was incapable of doing proper bike routing. Map data was only available commercially, far too expensive for private use.

These days, we had no slippy map or any other maps at all. If we wanted to have maps, we grabbed a portion of data via JOSM, converted it into svg using Osmarender and looked at it in Inkscape. Soon we began to convert the data into the Garmin format using cgpsmapper, and we struggled a lot with unordered segments. We checked the maps in Qlandkarte and spent many hours to order the segments causing troubles. We did all of this as we knew that openstreetmap was extraordinary and revolutionary.

Getting MoNav up and running

A lot has changed since then. AFAIR Gosmore was the first routing engine which made use of the OSM data. A lot of further routing engines exist. But recently, I still complained that most are far away from being user friendly.

After hacking on Navit and Routino, MoNav is the only one I want continue to work on. It’s written in Qt (and thus very portable). Its routing engine is somewhot unearthly fast, and it will route across Europe in a fraction of a second. The user interface was hard to use until two weeks ago, but both its maintainer and me have been working to improve the situation. If you do not have QtMobility right at your fingertips, just #define NOQTMOBILE at build time. It meanwhile is running on the N900, a mobile computer powered by Maemo, a Debian like Linux system. I heard rumors that it also is running on Windows Mobile platforms.

I got some speech output on the N900 as a pet project, but it’s far from being usable. But anyway, it showed the potential very well.

Currently there’s no officially released code, but you can check out the source from SVN and either compile it for the desktop or cross compile it in Scratchbox for the N900:

svn checkout http://monav.googlecode.com/svn/trunk/ monav-read-only
cd navit-read-only
qmake monavclient.pro

Then download some routable map material, like the complete data set for Europe in two chunks. As you are using alpha code, please note that the map data format can change every day, and the downloaded map data can thus become digital trash begging for being updated. Delete the file plugins.ini you’ll find in the map dataset, and replace it by a file called MoNav.ini containing the following lines:

router=Contraction Hierarchies
renderer=OSM Renderer
gpsLookup=GPS Grid
addressLookup=Unicode Tournament Trie
name=Europe Car Routing
description=Europe Car Routing without map tiles

Select this data set from Monav and have fun. In case you are incapable to follow the abovementioned steps, please stay tuned until the author announces the next public release.


To wet your appetite, here are a couple of screenshots taken on the N900. Here’s a route from Spain to Russia, calculated at a blink of an eye:

While others still complain that our address and housenumber data prevents them from doing proper routing, Monav just does the job. Jep, there are no housenumbers. Jep, it cannot ensure that it assigned a street correctly to the city it belongs to. But it makes the OSM data usable. The community will subsequently find solutions to those problems. Here’s the address search dialog, listing streets in Karlsruhe, the secret OSM capital, while you type:

Currently there are no spoken turn by turn directions. But there are some displayed on-screen. That should be sufficient to find your destination:

Rendering experts wanted

The above MoNav.ini will ensure that MoNav will download map tiles directly from the OSM servers. Alternatively, there are some Mapnik tiles available via the download section and can be placed in the routing data folder, while MoNav.ini should be changed to contain renderer=Mapnik Renderer. Unfortunately those map tiles require some effort for being preprocessed and uploaded and consume both a lot of disk space as well as a lot of network bandwith.

What MoNav is missing is an efficient vector renderer which makes use of preprocessed polygons and nodes. Someone who is savvy in this domain is required. If you are, do not hesitate to give MoNav a try. It deserves it.


I’m very glad that Christian Vetter, the author of MoNav, put all his knowledge and all those efforts into this excellent piece of software. Even better, he released it choosing an open source license. MoNav raises the usability of the N900 and fulfils a dream I had back in 2006 when starting to work with OSM: Bike routing on a mobile device. It’s just plain fun to contribute to MoNav. And it’s the moment when I sit back and say: What a great journey!

2 thoughts on “Hacking MoNav (Dreams come true)

  1. Tim Teulings

    Please take a look at libosmscout.sf.net. libosmscout and libsomscout-map offer an offline vector map renderer for cairo and Qt. If you have any questions do not hesitate to ask me :-)

  2. Pingback: MoNav tracklogging patch finished « Points of Interest

Comments are closed.