Skip to content

Repository files navigation

Isochrone

An isochrone map shows how far one can travel in a given time. This web app computes that reachable area across an entire road, foot, cycle, and public transport network, in the browser, from wherever you choose in a map. It is designed with performance in mind, so will recompute this in milliseconds even on a normal laptop.

Open the web app

Sixteen regions are available, across five continents. Routing is as exact as possible given the source data, not approximate, however this does mean that where the OpenStreetMap fails to join two roads or footpaths etc, this can look like an entire cul-de-sac is unable to reach anywhere else.

The app runs entirely client side: There is no account, no tracking, and no analytics.

Where it is available under an Open Source licence, public transit data has been included. At time of writing, this means just Berlin and Adelaide; as public transit is time-specific, it is possible to choose your date and time of departure.

The result may be exported as vector artwork, or printed as a poster, with the map, legend, scale bar and data attributions laid out for the page.

Contents

Capabilities

Transport modes. Walking, cycling, driving, ferry and public transport, selectable in combination. Walking and cycling speeds are adjustable. A ferry requires both the ferry mode and a mode in which its vessel may be boarded, so a foot-passenger service is available to a pedestrian and a vehicle service is not.

Public transport. Where a region carries a GTFS feed, the isochrone accounts for scheduled services from a chosen departure date and time, including changes of vehicle, subject to a configurable limit on how far the rider will walk on any one leg — to the first stop, between stops when changing, and away from the last one.

Presentation. Light and dark themes; metric and imperial units, defaulting to the reader's own locale rather than the region displayed; an adjustable colour period, the interval after which the isochrone's colour bands repeat.

Localisation. English, German and French.

Export. Vector SVG and print output, both laid out as a poster rather than as a screen capture: title, colour legend, scale bar and the required data attributions are composed for the page, and the map is drawn as vector geometry throughout.

Using the map

Action Desktop Touch
Choose an origin Primary click Single tap
Pan Primary drag Two-finger drag
Zoom Mouse wheel Two-finger pinch
Move the origin Secondary drag —

Panning and zooming redraw the existing result; neither begins a new calculation.

The two mouse buttons may be exchanged, under Primary mouse button in the options, so that the primary button moves the origin and the secondary one pans. The setting governs mouse input alone; touch gestures are unaffected by it, and the control is therefore not offered on a device having no pointing device other than the screen.

The region, origin node, transport modes, speeds, departure time, colour period and interface language are all held in the URL, so that any particular view may be bookmarked or shared. For example, ?region=berlin&modes=walk,transit&cycle=60&lang=de.

The remaining controls are found under Options in the header, arranged in titled groups: transport modes, speed settings, theme, units and the mouse button assignment described above.

How it works

The application is built around the observation that an isochrone is a shortest-path problem over a graph (the travel network), not an image-processing problem over a grid. Travel times are therefore computed on the travel graph itself and rendered from it directly.

Preprocessing. A Python pipeline retrieves OpenStreetMap extracts through the Overpass API, projects them into an appropriate metric coordinate system, simplifies degree-two chains, and emits a compact binary graph to minimise what the user has to download. Where a region carries timetable data, GTFS stops and connections are folded into the same file. The binary format is documented in Graph Binary Schema v3.

Routing. A Rust kernel compiled to WebAssembly performs the search. For a region with public transport this runs in three stages: a pedestrian search from the origin, a Connection Scan over the timetable seeded from the stops that search reached within the walking budget, and a second multi-source search reseeded at every stop the timetable improved. The result is the quicker of that and walking the whole way. The kernel is required; there is no JavaScript fallback for routing.

A timetable names each platform and each direction of travel as a separate stop, so the scan also needs to know which stops are walkable from one another; without that a rider can never change vehicle, and the timetable collapses to whichever single service happens to pass the origin. Those connections are computed when the region is built, by routing over the pedestrian network rather than by measuring straight-line distance between stop coordinates — two stops facing each other across a river are metres apart and a long walk from one another. Routing has the opposite failure, in that an interchange OpenStreetMap has not joined up simply disappears, so the routed connections are combined with the operator's own transfers.txt, which declares which changes exist, how long they take, and which are impossible.

Rendering. Edges are drawn by the GPU, with each endpoint's travel time interpolated along the edge, so a road crossed midway is shaded accordingly. A 2D canvas path exists for browsers without WebGL.

Edge traversal costs are derived at query time from a single stored length per edge, which is why changing a walking speed or a transport mode re-renders without returning to the network.

Regions and data

Sixteen regions are configured: Adelaide, Athens, Berlin, Canton of Zurich, Cologne, Cyprus, London, Luxembourg, Mexico City, Nairobi, Ottawa, Paris, Portsmouth, Rhode Island, Rome and Singapore.

Berlin and Adelaide additionally carry public transport timetables. Further regions may be added; the procedure, and a survey of candidate timetable feeds together with their licensing, are set out in Setup and Region Onboarding and the Transit Feed Registry.

Development

Installation, routine commands, the data pipeline, benchmarking, deployment and the procedure for adding a region are documented separately in Setup and Region Onboarding.

In brief:

make bootstrap
make check
python -m http.server 8000

Further reading:

This repository is configured for autonomous-agent workflows: a single quality gate (make check) covering Python, JavaScript and Rust; explicit agent rules in AGENTS.md; continuous integration on pull requests; and pre-commit hooks for local feedback.

Repository structure

Path Contents
data_pipeline/ Preprocessing pipeline, region configuration, and generated artifacts
wasm/routing-kernel/ Rust routing kernel
web/ Browser application (vanilla JavaScript modules, no bundler)
docs/ Design and process documentation
PLAN.md Delivery plan and architecture roadmap
THIRD_PARTY_NOTICES.md Licences for redistributed assets and data

Third-party licences

  • Map data © OpenStreetMap contributors, available under the Open Database License (ODbL).
  • Berlin public transport data © VBB (Verkehrsverbund Berlin-Brandenburg), available under CC BY 4.0.
  • Adelaide public transport data © Adelaide Metro — Department for Infrastructure and Transport, South Australia, available under CC BY 4.0.
  • Transport-mode icons from Google's Material Symbols, available under the Apache License 2.0, subset and self-hosted.

Full notices, including the obligations each licence imposes, are recorded in THIRD_PARTY_NOTICES.md. Attribution is carried in the application footer and in every exported and printed document, and is drawn from the region's own configuration rather than being fixed in the interface.

Project licence

No licence has yet been declared for the source code in this repository. In the absence of one, default copyright applies and no permission to use, modify or redistribute the code is granted. This is distinct from the third-party data and assets above, which carry their own licences and obligations.

About

A web-based isochrone map for custom points of origin and region

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages