Offline Mapping Visualizations with Maps on a Stick


4 min read

We just released Maps on a Stick, a simple client-side mapping tool that lets you access map tilesets and mash them up with information while you’re offline. Maps on a Stick runs on either a USB drive or directly from a hard drive and allows you to browse custom baselayer maps and add KML overlays to them without connecting to the internet.

Here’s a look at Maps on a Stick. The data overlay is from a U.S. Geological Survey KML file showing recent earth quake data, and the baselayer map is the World Light tile from MapBox.

49764b6dbf04  0OpxW9j wGWRo5R4A

You can zoom in on the maps, just like you can with any slippy map.

49764b6dbf04  0 0 ZmhcTjZkzKw99

Maps on a Stick parses the KML so you can click on any point and read about it, allowing you to interact with your data.

49764b6dbf04  0 Bz1lqoalRyz9NPO

Maps on a Stick fills a strategic void for our partners who are working on the ground abroad. With it organizations can distribute custom baselayer maps to their teams in places that don’t have internet access and therefore traditionally could only use static maps. Accessing the baselayers is the hard part (and some heavy lifting is needed to make a USB drive show images), but once on the ground teams have this running, generating KML is easy. It’s also much more feasible to download KML on a low bandwidth connection. You can expect a lot more of our mapping sites to offer granular KML exports as we focus on data portably and now that we have a tool that extends the reach of our maps to anyplace that can run a computer — regardless of its internet connection.

The code for Maps on a Stick is available on github. There’s also a light version that you can download and have running in just a couple minutes (it’s 17MB) if you’d like to test it out. This version is so light because it pulls map tiles from MapBox — the purpose of this version is just to give you a feel for how Maps on a Stick works.

For technical developers there’s a fully packaged version with a base tileset of the world with zoom levels 0–10 as a .dmg. To get started check out the documentation on Customizing Maps on a Stick and on generating a USB drive image using Distributing Maps on a Stick, which will make copying to a USB stick faster and let you run Windows/Linux/OSX. While our target audience for end users of Maps on a Stick is non-developers, the code is very technical and setting it up — particularly imaging a USB drive — takes some work. You’ll be shocked how long it takes to transfer a lot of files to a USB drive. But for developers wanting to generate USB images for their on the ground operations, it’s a good tool and there is solid documentation on how to image USB drives.

We focused on keeping Maps on a Stick simple. It’s not an application that syncs up data, and it doesn’t make websites work both online and off. What it is is a tool that let’s you map data when you’re offline. It’s essentially just a configuration of OpenLayers that points to a local tile stack and has some customization that makes adding KML over a map easy. Tom built Maps on a Stick, and worked with AJ and Saman on parts of the UI to make sure this simplicity is carried though to the end user.

Issues and shortcomings

In their current state the .dmg file and instructions on how to use Maps on a Stick are great for people who have the tech skills to set up the drives and for people who are given the drives to use. However, they’re not a very helpful resource for anyone who doesn’t have either.

Loading tiles onto a drive is difficult simply because there are so many individual files needed to make a complete tileset. The World Light tileset we use in the examples above is composed of roughly 22,369,620 images for zoom levels 1–12. Simply dragging and dropping a directory containing all of these images from your computer to a USB drive would take days to complete.

The use-case of offline mapping in this fashion is possibly better served in the longterm by a portable binary of TileLite, rather than a package of pre-rendered tiles. This would be smaller in size, easier to distribute, and much easier to load up with new kinds of tiles.

Please post any feedback and bugs to github. Patches are always welcomed :)


What we're doing.