Creating OpenStreetMap History Visualisations

I created a couple of OSM visualisations for my talk at the OSGeo Ireland conference.

See: History of OpenStreetMap in Ireland

These are pretty easy to make, but take a fair bit of time. I did mine for Ireland, but should work with any part of the world.

Required software:

  • PostgreSQL with PostGIS
  • Python
  • QGIS
  • osmium-tools

This is the trickiest part, installing osmium-tools: here.


An OSM full history export. The best source for these is GEOFABRIK.

For Ireland:

Due to GDPR, you will have to log in with an OSM id to download the full history extracts. User ID’s are personal data.


The workflow is pretty simple. Osmium-tools provides pretty easy API access to the history files, where you can provide a data, and it will extract what OSM was like at that date. We simply need to loop through the desired dates we want to extract, and pipe the results into a workflow that loads the data into PostgreSQL. The final step is simply rendering in QGIS using the time manager plugin.

Python Script:

Github GIST:

The tables in the database will be:

  • lines
  • multilinestrings
  • multipolygons
  • other_relations
  • points

Each feature will be tagged with the date it is associated with.


To visualise the data in QGIS we use simply use the excellent time manager plugin, filtering on the load_date field and with a monthly interval.


4 thoughts on “Creating OpenStreetMap History Visualisations

  1. jonah sullivan

    I’m getting an error:

    psycopg2.ProgrammingError: column “load_date” does not exist
    LINE 1: …e public.lines set load_date = ‘2006-12-01’ where load_date …

    I think that you skipped a step where you created a load_date column for each table.

    1. Heikki Vesanto Post author

      Hi Jonah, thanks!

      You are correct, I was missing that step. I have updated the GIST now with the step. You should drop the tables from the database before running it again, but should work now.

        1. Heikki Vesanto Post author

          Looks good. A bit quick for my liking but a great start. Rendering is tricky because it has to look good with almost no data at the start, and a lot of data at the end.


Leave a Reply

Your email address will not be published. Required fields are marked *