Proximity
Copy link

How close everyday life is, in real walking and driving time, not metres: a walk, transit and drive rating for every hexagon, the time to the nearest supermarket, school, station or brand, and how much is within 5, 10 and 15 minutes' walk.

Questions this page answers

  • How walkable is this spot, and does it need a car?
  • Which areas are within 5 minutes' walk of a supermarket?
  • How many cafés are within a 10-minute walk?

Walk and drive times are TravelTime's, precomputed from every hexagon people live in, up to 15 minutes (traveltime in source_ids on /v1/catalog/gb, with updated_at, the date they were last loaded); in a country with no times built, every request returns no rows. The Data API never calls TravelTime live: for a longer journey, send a TravelTime catchment's hexagons as cells (Use with the TravelTime API).

Request headers
Copy link

Required authentication header. The same application id as the TravelTime API.

string

Required authentication header.

Ratings and time to the nearest thing, per hexagon
Copy link

GET /v1/proximity/cells

One row per hexagon, or totals over what you send: one row per boundary with group_by=borough, one row for everything with group_by=all. Resolution 9 only; a group_by=all total also takes coarser ids. In the order sent with cells, otherwise by cell id. POST /v1/proximity/cells takes the same fields as JSON, for long cell lists (Long requests).

How good each hexagon is on foot, by public transport and by car, 0 to 100 each, with the walking and driving time in seconds to the 8 essentials behind the walk rating. King's Cross 96 / 100 / 90; Croydon centre 95 / 100 / 90; Bourton-on-the-Water 77 / 32 / 67; a Milton Keynes estate 52 / 21 / 100. Nobody lives on the Cotswolds farmland, so it has no rating.

Request

curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
  "https://data.traveltimeapp.com/v1/proximity/cells?cells=89195da4d8fffff,89194ac2677ffff,89195d48563ffff,89195d88a97ffff,89195d49b53ffff"
200 · 5 hexagons, one page

Shade = ratings.walk52965 hexagons; a hexagon opens its row.

The 22 hexagons around King's Cross with a supermarket within a 5-minute walk.

Every condition must hold: a supermarket within 10 minutes' walk, a train station within 5 and a Lidl within 15 minutes' drive. country=gb searches the whole country: 1,257 hexagons, where 572,651 people live (group_by=all gives that total).

From one hexagon at Euston: 5 supermarkets within 5 minutes' walk, 12 within 10 and 59 within 15; gyms 0, 12 and 46; cafés 10, 73 and 273.

Not a hundred pocket gardens but the big ones: "two parks of 5 ha within 15 minutes" is one check, over_5ha_count of 2 or more. include=open_spaces names them. Euston reaches The Regent's Park (117.6 ha) in 15 minutes; the Milton Keynes estate two over 20 ha, Teardrop Lakes (25.6 ha) in 8; Woodgreen, Godshill Inclosure (140.6 ha) in 7.

Send the hexagons of a TravelTime catchment and keep those with a supermarket within a 5-minute walk. Of the 8,526 hexagons within 45 minutes of King's Cross by public transport, 1,912 pass; seven of them here, and 4 pass.

Of the people in each borough of your hexagons, how many live within 15 minutes' walk of a train station. covered_by reports it on totals rows without dropping any hexagon; within would be a sieve. Over the whole 45-minute catchment: 4,413,538 of 6,075,764 people (73%). Here seven of its hexagons, in Barnet and Brent.

Hexagons within a 15-minute walk of any transit stop: rail, Underground, tram or bus. beyond=walk.transit_stop:900 gives the hexagons further away.

Parameters
Copy link

ParameterTypeDefaultWhat it doesExample
withintravel.target:seconds, comma-separated—A sieve: only hexagons that meet every condition, up to 10. travel is walk or drive; target is a category or group id, train_station, metro_station (Underground and tram), bus_stop, transit_stop (any of those), beach or brand:<slug>, every one listed in the proximity entry's targets on /v1/catalog/{country}; seconds 1 to 900. With country=gb, the whole country.within=walk.supermarket:600,drive.brand:lidl:900
beyondas within—The opposite sieve: hexagons people live in where the nearest one is further than that, out of reach, or with no times.beyond=walk.transit_stop:900
covered_byas within—Needs group_by. Adds covered_population and covered_share to each totals row: the people within that time, without dropping any hexagon.covered_by=walk.train_station:900
includebands, open_spaces—bands: what is within 5, 10 and 15 minutes' walk. open_spaces: the biggest public spaces within 15 minutes' walk. Per-hexagon rows only, up to 100 a page.include=bands,open_spaces

Also takes Where: near, radius_m, bbox, cells, at, and country with within or beyond · Per-hexagon routes: group_by · Paging: limit, cursor · Output: format · Long requests: the POST body.

Each row: cell, ratings (walk, transit, drive, each 0–100), and walk_s and drive_s: seconds to the nearest of the 8 essentials (supermarket, school, doctor, pharmacy, post_office, park, cafe, restaurant) plus every within and beyond target. A time past 900 s is null and missing lists it, reason over_900_s; where nobody lives, ratings, walk_s and drive_s are null, reason no_residents (no_times where people live but the build has no times for them).

  • bands.walk.300, .600 and .900, with include=bands: category_counts (supermarket, cafe, pharmacy, doctor, school, gym, pub), open_space_m2 (public open space in reach, m²), largest_area_m2 (whole size of the biggest public space in reach), over_1ha_count, over_5ha_count and over_20ha_count (by whole size), green_m2 and green_share (green cover in reach).
  • open_spaces, with include=open_spaces: each with id, name, class, access, area_m2 (its whole size, m²), reachable_m2 (the part inside the walk, m²) and walk_s_from_cell.
  • A band field other than category_counts, or open_spaces, that the build lacks is null, reason not_in_build (a band field is outside_source_coverage where its source does not reach). Hexagons with no walk times get neither bands nor open_spaces.
  • Totals rows: boundary (with a boundary type), cell_count, population, the ratings and times, and covered_population and covered_share with covered_by. Rollup: sum for counts and people, population_weighted_mean for ratings and times (over the hexagons that have them), ratio_of_sums for covered_share.

Errors

CodeHTTPWhen
invalid_within · invalid_beyond · invalid_covered_by400Not travel.target:seconds, seconds outside 1–900 (allowed_max 900), more than 10 conditions, or a target the country has no times for (the message lists them).
covered_by_needs_group_by400covered_by with group_by=cell.
too_many_cells400country without within or beyond; a search matching more than 100,000 hexagons, country included (use group_by); more than 100,000 cells sent, unless group_by=all; cells covering more than 200,000 res-9 hexagons, with group_by=all.
invalid_include400Not bands or open_spaces, or with a group_by other than cell.
invalid_format400Not json or geojson, or geojson with a group_by other than cell.
invalid_limit400Below 1 or over 10,000, or over 100 with include.

… and every Where, Per-hexagon routes and Paging code.

Request

curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
  "https://data.traveltimeapp.com/v1/proximity/cells?cells=89195da4d8fffff,89194ac2677ffff,89195d48563ffff,89195d88a97ffff,89195d49b53ffff"
200 · 5 hexagons, one page

Shade = ratings.walk52965 hexagons; a hexagon opens its row.