CoursesGIS Basics — A Complete Introduction13.3 Service Areas and Isochrones
Module 13: Network Analysis

13.3 Service Areas and Isochrones

Areas reachable within a time or distance budget — the staple of access analysis.

Lesson 66 of 100·15 min read

Key takeaways

  • An isochrone is the set of locations reachable within a time budget (e.g., "within 15 minutes").
  • Generated by running routing outward from a source until the budget is exhausted.
  • Crucial for accessibility, site selection, and service-area planning.

Introduction

"What's within 10 minutes' walk of this clinic?" "Which restaurants can be delivered in 30 minutes?" These are isochrone questions — defining areas by time rather than geometric distance. This lesson covers how they're generated and how to use them.

What an isochrone is

An isochrone (Greek isos + chronos = "equal time") is a contour of constant travel time from a source. Modern isochrones are typically polygons showing everywhere reachable within a specified time budget.

Also called:

  • Service areas — the area served by a facility within a time budget.
  • Travel-time polygons — generic term.

How they're generated

Outward routing from a source:

  1. Start at source with cost 0.
  2. Explore neighbouring edges Dijkstra-style.
  3. Stop expanding when cumulative cost exceeds budget.
  4. Gather the set of reachable nodes and edges.
  5. Compute a concave hull or alpha shape around them → polygon.

Some engines also return the raw edge geometry, allowing richer visualisation.

Multiple bands

Isochrones usually come in nested bands: 5, 10, 15, 20 minutes, each a separate polygon. Maps symbolise them with a gradient for visual impact.

Mode and time

Parameters:

  • Mode: walking, cycling, driving, public transit.
  • Departure time: affects traffic-aware isochrones dramatically.
  • Speed profile: free-flow vs historical vs real-time.

A 15-minute driving isochrone at 3 AM is much bigger than at 5 PM in most cities.

Tools

  • Mapbox Isochrone API — managed, easy.
  • Valhalla — open-source, self-hosted.
  • OpenRouteService — open, global.
  • OSRM + post-processing — build your own.
  • pgRouting pgr_drivingDistance + concave hull.

Python:

Python
1import requests
2url = 'https://api.openrouteservice.org/v2/isochrones/driving-car'
3r = requests.post(url, json={
4    'locations': [[-73.96, 40.78]],
5    'range': [300, 600, 900],  # seconds: 5, 10, 15 min
6    'range_type': 'time'
7}, headers={'Authorization': API_KEY})
8iso = r.json()  # GeoJSON

Use cases

Accessibility / service planning

"What fraction of the population lives within a 15-minute walk of a park?" Combine isochrones with population rasters (WorldPop) or census blocks for quantitative estimates.

Site selection

"Where to place a new clinic so everyone is within 10 minutes?" Combine isochrones around candidate sites with existing facility gaps.

Logistics / delivery

"Which addresses can we serve in 30 minutes from each depot?" Critical for food delivery, emergency response, urgent courier.

Real estate

"Commute time to major employment centres" — isochrones from employment nodes overlaid on housing data.

Population within an isochrone

Classic follow-up question — how many people live inside? Area-weighted sum against a population raster or polygon layer:

SQL
1SELECT SUM(p.population * ST_Area(ST_Intersection(p.geom, i.geom)) / ST_Area(p.geom))
2FROM population_blocks p
3JOIN isochrone i ON ST_Intersects(p.geom, i.geom);

Visualisation

Common styling:

  • Gradient colour ramp for nested bands.
  • 60–80% opacity so base map reads through.
  • Explicit time labels on each band.
  • Add the source point as a contrasting symbol.

Quality caveats

  • Graph quality drives isochrone quality. Bad OSM data → bad isochrones.
  • Terrain affects walking / cycling time — flat-land speeds don't apply in hills.
  • Intermodal transfers — walking to transit adds complexity.
  • Real-time traffic — not all APIs respect it.

Self-check exercises

1. Why is a 15-minute driving isochrone much smaller in New York than in rural Iowa?

NYC roads are slow (traffic, lights, congestion). Rural Iowa has fewer roads but faster speeds. A 15-minute window covers 4–8 km in Manhattan but 25 km or more in rural areas. Isochrones reflect real travel conditions, not just geometric distance — which is why they're more useful than circles.

2. What's the difference between a Euclidean buffer and an isochrone?

A Euclidean buffer is a circle — every point within X metres regardless of obstacles. An isochrone is the set of points reachable within a time budget on an actual network. Isochrones respect roads, one-ways, speed limits, and sometimes traffic. For real-world accessibility, isochrones are far more realistic — a 1 km buffer often spans time budgets from 5 to 15 minutes depending on terrain.

3. Your 20-minute walking isochrone looks disconnected — two islands of reachable area. What's happening?

Usually a graph gap: a bridge, pedestrian crossing, or path is missing from OSM data, splitting the network into disconnected components. Investigate the gap; add the missing edge or mark the data issue for contribution back to OSM. Isochrone engines expose nodes visited — compare to expected count.

Summary

  • Isochrones = polygons of time-to-reach.
  • Generated by outward graph traversal from a source.
  • Mode, time-of-day, and graph quality all shape the result.
  • Combine with population or demographic data for accessibility metrics.

Further reading

  • Mapbox / OpenRouteService isochrone API documentation.
  • Biba, S. et al. — GIS analysis of accessibility to primary care.
  • Valhalla open-source routing project.
  • Urban Access research at the LSE Cities observatory.