Georeferencing paper hiking maps to make a map-map
Throughout many years of hiking the alps, my mother has amassed a fairly large collection of hiking maps. Recently, I found myself wanting to somehow make this drawer-filling mountain of paper more easily searchable. As a first step, I georeferenced them to create a map-map which you can see below. As a second step, I put them all back into the cupboard.
Below is an illustration of all the area that is covered by 40 of these hiking maps. As you can see, the nothern Alps are covered very well with a considerable amount of duplication - two spots in Bavaria’s Karwendel mountain range are even covered by five different maps! Other outlying maps seem to be remnants from holiday trips to Italy or France. I especially like the only map of Croatia which has quite an innovative shape to not waste paper on mapping the sea.
You can click on a spot on the web map to show which paper maps cover it and display their georeferenced cover image. Below is a gallery of the covers of all the paper maps that make up the heatmap above. You can also click on the image of a paper map to enlarge it or to zoom to the area it covers.
How I made this
I took a photograph of a map’s cover page and cropped the photograph to the tiny map which on basically all maps indicate their extent (the map on the map). I then georeferenced these tiny maps using QGIS. This requires manually selecting a pixel on the image and finding the corresponding point in a georeferenced layer (such as OSM) in QGIS, repeated a couple of times for each map. Even though QGIS’s georeferencer has a nice UI, it is still tedious manual labour. Please let me know if you have some more efficient way of doing this (some fancy pipeline perhaps, that extracts pieces of texts from the map image, geocodes these texts to find the rough area of correspondence, and then uses some geometric feature matching to establish the exact projection?).
It took me quite a while to figure out how to visualize the area covered by the maps somewhat intuitively. I finally settled on the heatmap above that consists of individual polygons, instead of rasterized pixels. I built the polygon heatmap using the wonderful Shapely, essentially by intersecting all the polygons with each other. If you are interested, you can find the code here. I also used Python for various data processing jobs such as converting between different data formats and file sizes (scripts are here).
I finally display the maps here using Leaflet, the plugin georaster-layer-for-leaflet, and a bunch of very hacky Javascript (don’t judge).