Creating nice looking topo maps for use in GraniteMaps

🔖 cartography  code  granitemaps 

The goal of GraniteMaps is to provide accurate and educational maps for people participating in outdoor activities, so a large part of the project is creating maps that are pleasing to the eye.

The map displayed in granitemaps is actually two layers: the “base map” and the trail layer. The base map is is responsible for displaying the details of the map’s area such as land boundaries, rivers/lakes, major roads and elevation. The trail layer is an overlay of the actual trails and points of interest.

Currently GraniteMaps uses The National Map provided by the USGS for the base layer. It’s a good public domain map that includes major roads, hillshading, contour lines and place names. It does have it’s issues, however:

  1. The map is rendered without anti-aliasing which means fonts look jagged. The rest of the render just looks dated, like 90’s jpeg compression was used.
  2. Many of the minor roads are rendered it too low a resolution. This means that many of the “lesser used” roads, i.e the roads we care about in GraniteMaps, are rendered without enough data points. This causes roads to cut across contour lines, have harsh angles, and in general just not appear where they are supposed to.
  3. Not customizable. The map is provided in JPG format which you can use in slippy maps, but what you see is what you get.

For these reasons (especially #2) I concluded that The National Map would not be satisfactory for use in GraniteMaps’ next map.

The solution is to create a custom base layer for use in GraniteMaps. After a few days of getting familiarized with the GIS landscape, I set to work on creating a nice looking map using MapBox’s TileMill. A good starting point was the osm-bright project which pulls openstreetmap data from your local PostGIS database to create a fully featured street map. Elevation data is a must have, so after following this great article by Steve Bennett I loaded some data from the Shuttle Radar Topography Mission into the map to provide contours and hillshading. After that is was a matter of tweaking the CartoCSS rules to get the desired look right. The preliminary result:


The rendering isn’t perfect, but it’s a good start and already superior to The National Map. In case anyone else is interested in creating their own topo map in a similar fashion, the style files are available on github!

Keep enjoying these beautiful winter months out on the trail!