Interactive world isochrone map
An isochrone map groups places by the time it takes to reach them from
a starting point. This interactive world map estimates door-to-door
travel times by air, rail, road and ferry.
Choose a departure city, rotate or zoom the globe, and point to a
destination to read its travel time. The colours show travel-time
bands. Estimates include ground access, airport procedures and
transfers, using a model built from open data.
Times assume you leave when you choose: the first service is not waited
for. A flight connection is charged the minimum connection time or the
expected wait for the next departure, whichever is longer, capped at the
cost of leaving the terminal and re-entering it — which is the
disembark and check-in times for that airport’s size, so about
55 minutes at a small airport and an hour and forty at a large one;
rail legs carry no wait. A ferry does: half the interval between
sailings. That cap is a consequence of the
graph, not a claim about airports: a connection can always be routed
out through the terminal and back in, so no wait can cost more than
that, and where the real wait is longer the figure is an
underestimate.
Door to door, not gate to gate. The time includes the trip to the
airport, check-in and security, border control where one is crossed, and
the trip from the arrival airport into the city. A flight of two hours
commonly makes a journey of five.
Address search and click-to-address send the typed text or the clicked
coordinates to OpenStreetMap’s Nominatim service (no more than one request
a second, and never as you type). Page views are counted
by Google Analytics. Where the page offers it, the map from the exact
point you drag the departure marker to, and the time from that point to
a destination, are computed on demand by this site’s own server.
That map is drawn on the 45 km grid the readings use rather than the
finer one a charted city’s map is painted from. Everything else is
computed in the browser from files on this site. What each of those collects is set out under
Privacy below.
What this does not know
The air model is a regression on 107,366 flight legs. Held out of its
own fit, it is wrong by a mean of about 9 minutes on the flying
part alone, and it runs a few minutes long between 400 and 800 km and
about six minutes long between 3,000 and 6,000 km. Every figure on
this page is printed to the minute; none of them is accurate to the
minute.
That fit is valid between 150 and 6,000 km. Beyond 6,000 km it is
extrapolation — receiver coverage over oceans is too sparse to
measure a transpacific flight end to end — so the intercontinental
readings, the ones a visitor is most likely to look up, are the least
certain on the map. Long-haul flying also varies by about an hour on
winds alone, which a distance-only model cannot represent. Treat
anything over 10,000 km as approximate.
Rail. Running time comes from one of six service tiers, 73 km/h
for a commuter service up to 221 km/h for a high-speed one, with a
separate 22 km/h tier for heritage and tourist lines, all fitted
against journey times recorded in OpenStreetMap. A route’s tier
is read from its own service tag where it carries one;
a route without one is read as high-speed when the track it runs on
is, which is how the Shinkansen are priced. Where the speed limit of
a route’s track is mapped, each stretch between two stops runs
at a share of the limit on that stretch — about 59 to 90% of it on a
160 km/h line, by tier — and each stop costs more the faster the
line, rather than the whole route running at its tier’s one
speed. Where no route is mapped over a high-speed line at all —
most of mainland China’s — the line is built from the track
itself: its stations, the distance along it, and 88% of its speed
limit. That network assumes an express that does not stop on the
way, so it is a few minutes fast on a long journey. Main lines of
160 km/h or more that no route is mapped on are built the same way
and priced as a long-distance train. The largest known errors left
are Korea, fast (Seoul to Busan 120 minutes against 150, the line
beyond Daejeon built from track with no stops), and Japan’s
Sanyo line (Shin-Osaka to Hiroshima 98 against 81), Britain’s
West Coast line (London to Manchester 157 against 128) and
Berlin to Hamburg (131 against 105, on a stopping train), all slow;
and routes mapped with every station call where the fastest train
makes few.
Flight frequency is a gravity model fitted to two anchor routes, not
a timetable. Rail legs carry no waiting time at all. A ferry is
charged half the interval between sailings, taken from the route’s
own OpenStreetMap timetable where it has one, from the operators’
published timetables on the busiest corridors (Hong Kong to Macau,
Helsinki to Tallinn, Dover to Calais, Dar es Salaam to Zanzibar,
Wellington to Picton, Dalian to Yantai) — which also give the
sailing time where the route’s own map data has none — and
otherwise from a
headway fitted to eight published crossings — a wide prior, about a
factor of two out at one sigma against those crossings and a factor
of 3.6 against 326 other timetables in the data. The bias changes
sign at about 150 km: below it the prior claims more frequent service
than reality and under-states the wait (median predicted over
observed 0.21 to 0.58 across 298 of those 326 crossings), and above it,
over-states (2.21 at 150–400 km, 1.68 at 400–1,000 km).
Distance alone cannot tell a remote lifeline route from a busy
short-sea one. A build made before that
model charges no ferry wait at all; the ferry line in the itinerary is
generated by the build itself, so it always describes the one being
served.
Ground speeds describe a road class, not a road. Four of the six
classes are fitted to 2,998 driving journeys sampled from the Google
Routes API — the one commercial service this project uses, and it is
used during calibration only: nothing from it reaches this site, and
no commercial flight data is used anywhere. Roadless
terrain and local roads keep published-figure defaults. For roadless
terrain the fit came back with a negative time per kilometre, as
though crossing it gave time back, so the fit refuses it; local roads
drew 116 km of driving across four journeys, too little to fit. Roadless terrain is the slowest of the six
classes and local roads the third, so between them they set the last
kilometres of many journeys. And the build that is being served may lag
the code: index.json records what was actually
computed.
Long over-water flights. Every flight here is a scheduled
service, already operating under its airline’s extended-range
approval — ETOPS, and its equivalents for three and four engines. So
an ETOPS rule is not a constraint this map could apply on top of the
routes: it is a constraint the routes were already flying under
before they reached the data. That is why there is no setting for it,
and why adding one would be a switch that changed no figure on this
page.
The more useful admission is the second one: this model could not
represent the difference if there were one. A flight’s time here
is a function of the distance between its two airports and nothing
else: the great circle, or, where it crosses airspace closed to every
airline on the route, the shortest way round. Ukraine is closed to
all; Russia and Belarus to the European, North American, Japanese,
Korean and Taiwanese airlines that keep out of them, but not to an
airline that still flies there. The data carries no aircraft type and no engine
count, so there is nothing to apply a rule to; and the page draws the
great circle, which is precisely the track an ETOPS-limited flight
does not fly. The real cost of staying inside a diversion radius is a
longer track, and a longer track is the one thing this model has no
way to express.
Where the number is read. The outlined hexagon under the pointer
is the cell the time is read from: resolution 6, about 6.5 km across
and 36 km². Where the road network is dense the bands are painted one
level finer, at 2.4 km, so in those places the colour under the
pointer distinguishes ground the reading does not: the number is
the value of that cell's centre sub-cell, not an average over the
seven. The
breakdown beneath the number — the arrival airport, the mode of the
last leg — comes from a wider grid still, about 45 km across, and can
name a different airport from the one the time was computed through.
Until that region’s finer readings have loaded, or if your browser is set to save
data, the number itself comes from that wider grid, the outline
widens to that grid's cell, and the line under it says so.
Country borders are the U.S. Department of State’s Large Scale
International Boundaries. A dashed line is not a settled international
boundary but an armistice or ceasefire line, a line of control, a claim,
a boundary in dispute or another line of separation, drawn where the
sources draw one; it takes no side in the dispute.
The map is drawn by four open-source libraries —
MapLibre GL JS and PMTiles under BSD-3-Clause, h3-js under Apache-2.0
and fflate under MIT — set in IBM Plex Sans under the SIL Open Font
License. Their copyright notices and licence texts are served with
them.
Privacy
This site has no accounts, no sign-in and no advertising, and nothing
collected here is sold. The services that process requests are named below.
The link in the address bar. Choosing a destination writes it
into the address bar, to about a metre, so the journey can be shared
or reloaded. That address is part of what the analytics tag below
records as the page location. Two things are deliberately kept out of
it: a street address returned by reverse geocoding is never written
there, so it is never reported as the page location — only a place
name from this site’s own gazetteer is — and a clicked point is
rounded to about 110 m before it is sent to Nominatim. Where the page
offers a map from the exact point you drag the departure marker to,
that point is written there too, to about a metre, beside the city
the map was moved to.
A dragged departure point. Where the page offers it, the map
from the exact point you drop the departure marker on, and the time
from it to a destination, are computed by this site’s own server
rather than in your browser. When you drop the marker away from a
city, or open a link that carries such a point, the point is sent to
it, to about a metre, along with the usual request metadata; once you
choose a destination, the destination is sent too. It computes the
map and that one time from them and keeps no log of either. Picking a city from the
list, or dropping the marker on a city, makes no solver request.
Hosting and DNS. This site is served from a server in Seoul.
The browser compares small test downloads from this server and
Cloudflare, then can use the faster route for public map files.
Cloudflare receives your IP address, request metadata and public file
and byte-range requests when its route is tested or used. Computation
requests with departure and destination coordinates go directly to
this site’s server. The route preference stays in your browser
session. Cloudflare also provides DNS for this domain. See
Cloudflare’s privacy policy.
Google Analytics. Page views are counted by Google Analytics,
which sets cookies and identifiers in your browser and sends Google
your approximate location (derived from your IP address), your
browser and device type, the pages you open and how you arrived. How
Google uses that data is described at
google.com/policies/privacy/partners.
Browser settings, an ad-blocker or Google’s own opt-out add-on
will stop it.
OpenStreetMap Nominatim. Searching an address, or asking for the
name of a place you clicked, sends that text or those coordinates to
Nominatim, run by the OpenStreetMap Foundation, along with the usual
request metadata. It is never sent as you type. Turning off
“Name the place under the cursor” in Settings stops the
second kind entirely.
What stays on your device. “Show my location” asks
the browser for your position. The position itself is used only in the
page, to draw a dot and work out which departure city is nearest, and
is never sent to this site or to anyone else. The city it picks does
leave, though, in the ordinary way: choosing a departure writes its
name into the address bar, and the address bar is what the analytics
tag records as the page location. So the reading is your nearest
listed city, not where you are. Your
colour scheme, your ocean colour, the two Settings switches and the
carry-on choice are kept in this browser’s local storage and go
no further.
Everything else the map does, apart from the dragged departure point
above, is computed in your browser from files
on this site.
For reference only. Every figure is an
estimate from open data and a simplified model. It carries no warranty of
accuracy, is not travel advice, and must not be relied on for any journey,
booking or decision. The author accepts no liability for any use.