Isochrone Maps with OSMnx + Python

Check out the journal article about OSMnx.

How far can you travel on foot in 15 minutes? Urban planners use isochrone maps to show spatial horizons (i.e., isolines) that are equal in time. Isochrones depict areas according to how long it takes to arrive there from some point. These visualizations are particularly useful in transportation planning as they reveal what places are accessible within a set of time horizons.

We can create isochrone maps for anywhere in the world automatically with Python and its OSMnx package:

OSMnx map of isochrone isolines in Berkeley California's street network

This travel time map shows how far we can walk in 5, 10, 15, 20, and 25 minutes from an origin point in downtown Berkeley, given an average walking speed of 4.5 km/hour (about 2.8 miles/hour). We can also visualize this by which points along the network we can reach within 5, 10, 15, 20, and 25 minutes:

OSMnx map of isochrone points in Berkeley California's street network

You can create your own travel time maps for any city in the world by following this example in the new OSMnx examples GitHub repo. OSMnx is a Python package for easily downloading, analyzing, and visualizing OpenStreetMap street networks anywhere in the world. Installation instructions and demonstrations are on GitHub.

3 thoughts on “Isochrone Maps with OSMnx + Python”

  1. This is magnificent… the easiest open-source implementation of isochrones for street networks that I’ve tried.

    I’m trying to figure out if there is a straightforward way of calculating the travel times to each individual node and then exporting these for use in something like Arc?

    1. Yes. You need to put a travel time attribute on each edge, like in the example here. Then run networkx.shortest_path, providing a source node but not a target node (this will calculate shortest paths from the source node to every node in the graph). Finally, sum the travel time attributes of the edges that compose each path.

      1. Thanks – I managed to work this one out in the end and it worked very nicely apart from a couple of locations where the nearest node to my point of interest wasn’t well-connected to the network.

        Only issue I have left is that the walk network definition is quite stringent so it leaves out OSM ways that are not primarily walk, e.g. A cycleway that permits foot access such as this:
        https://www.openstreetmap.org/way/5364004

        I guess that downloading all-private will fix this issue.

        This has really introduced me to the powerful things you can do with Python & GIS – I hadn’t done any GIS with Python before…

Leave a Reply

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