Lately I’ve been poking at updating and improving my usual offline mapping setup on Android. For the last few years or so I’ve been GPX tracking my outings, adventures and some other stuff. Mainly for photo geotagging but also because it can be neat to see where I was and when after a day trip.

When out and about I insist on purely offline maps too. I like being away from the modern world, notifications and distractions. So… my phone ends up in places without cell service or the SIM card removed.

Thankfully there are some good map apps on Android and they do offline maps. The one even supports MapsForge (link) maps and the MapsForge folk have published details on how to generate your own. If you’re lazy OpenAndroMaps (link) has pre-compiled maps for use.

I started out with the OpenAndroMaps but ultimately wanted more control of my map data.

Read on for details.


First and foremost: applications on Android. I use Locus Maps (link) when on my adventures. I also have OsmAnd (link) setup with basic maps just in case I need routing (rare but… helpful when desired).

Locus does a great job for replacing a paper map and I loved it for GPX tracking. There are even GeoCaching plugins that aren’t half bad.


The maps are the real tricky part though. I’ve been a consumer (and light contributor) to the OpenStreetMap database for years now. However, finding ‘small’ maps that fit my needs has been difficult over the years.

Because of this I ended up re-creating the MapsForge scheduled extract process in a way that’s a bit more refined (read: fewer dependencies) and can do some creative merging.

It’s a Python module with some supporting scripts/docs/misc that will let you download OSM extracts, process them and spit out MapsForge maps on the other side. I even went so far as getting the OpenAndroMap tag transformations working with my app.

I can now get a ‘local’ map that’s far less than 1Gb in size and I can also do smaller extracts for any travel destinations. Going to the South East USA? No problem! Process a map in a day or two.

Traveling out of the country. YEP! Done, map loaded and ready.

My Process

My process is available as OSS here (link). The readme has a bunch of useful info on how to run the tool and a number of examples.

You’ll want at least 32Gb of RAM in your system and an SSD for the processing though. The processing likes to chew up RAM and disk.

Everything in that repo has been vetted and the ‘major releases’ are tagged so you don’t have to faff about with git.

Next Steps

My next magic trick will be documenting how to get elevation data and contour lines into the maps. I’m still sorting out the best approach but it is coming. Once the contour line stuff is added to my code you’ll be able to create your own, small offline maps for your next adventure.