SeruCoach
Start free testContinue
Account

Map data and licences

Our topographical practice map and routes are built from OpenStreetMap. Here is the licence, what we made from it, how we made it, and how to ask for the data.

Map data snapshot: 2 November 2026. Last checked 3 Nov 2026.

Attribution

Map data © OpenStreetMap contributors, available under the Open Database Licence (ODbL 1.0).

What we made

  • A London road graph for each practice route and each map question: roads, one-way streets, turn bans, barriers and access rules.
  • Vector map tiles for 12 London regions, and the map style that draws them.

Both come from one OpenStreetMap snapshot (2 November 2026). Both are derived databases, so both are under the ODbL. Pictures of the map (screens, stills) are produced works: each carries the OpenStreetMap credit.

How we made it

  1. The snapshotThe Geofabrik Greater London extract of OpenStreetMap, 2 November 2026.
  2. Road graphsOur extraction script (extract_graph.py) reads every road a car can use in each region below: its geometry, name, road number, one-way and turn restrictions, barriers, bridges, tunnels and access tags, and the places of interest the map questions use. It then applies the overrides file (next section). For each practice route, we keep only the roads within about 600 metres of it.
  3. Map tilesThe Protomaps basemap build of 2 November 2026, cut to the region boxes below, up to zoom level 15, with the PMTiles tool.
  4. Map styleOur style script starts from the Protomaps basemap style and sets our own colours and layers. No other map's artwork is used.
Region boxes (west, south, east, north; degrees)
RegionBox
Hackney, Shoreditch, Bethnal Green-0.096, 51.516, -0.022, 51.559
Aldgate, Wapping, Limehouse, Poplar, Bow, Rotherhithe-0.092, 51.482, 0.016, 51.540
West End, Mayfair, Marylebone, Bloomsbury, Regent's Park, Westminster, Victoria-0.190, 51.480, -0.112, 51.548
Pimlico, Belgravia, Chelsea, Battersea-0.188, 51.456, -0.112, 51.509
Kentish Town, Holloway, Finsbury Park, Tottenham-0.166, 51.538, -0.056, 51.614
Notting Hill, Bayswater, Kensington, Earls Court, Hammersmith-0.252, 51.473, -0.164, 51.535
Fulham, Putney, Wandsworth-0.230, 51.435, -0.148, 51.503
Harlesden, Neasden, Staples Corner, Brent Cross-0.282, 51.526, -0.198, 51.584
Tulse Hill, Brixton Hill, West Norwood-0.140, 51.428, -0.090, 51.458
Croydon town centre-0.122, 51.356, -0.074, 51.393
Barking0.058, 51.526, 0.102, 51.550
Upminster0.228, 51.544, 0.270, 51.568

The overrides file

Changes we make to OpenStreetMap data when we build our road graphs. A rule applies to every graph edge whose name is listed and whose midpoint lies inside bbox [west, south, east, north], or, with "within", to every drivable edge inside the named OpenStreetMap park. "set" adds flags: busonly and park both add noaccess, so the road is drawn with red stripes and a route on it is marked as not allowed. "clear" removes flags.

7 rules, applied to the 2 November 2026 snapshot
RuleRoadsEffect
oxford-streetbus-only street, drawn as restrictedOxford StreetBox -0.160, 51.513, -0.125, 51.518set busonly and noaccess
tottenham-court-roadbus-only street, drawn as restrictedTottenham Court RoadBox -0.140, 51.515, -0.129, 51.526set busonly and noaccess
royal-parks-insideroyal park road, treated as restrictedEvery road inside Hyde Park, Kensington Gardens, The Green Park, St. James's Park, The Regent's Parkset park and noaccess
hyde-park-roadsroyal park road, treated as restrictedWest Carriage Drive, South Carriage Drive, North Carriage Drive, Serpentine Road, Serpentine Bridge, Edinburgh Gate, Prince of Wales GateBox -0.191, 51.501, -0.150, 51.514set park and noaccess
regents-park-roadsroyal park road, treated as restrictedOuter Circle, Inner Circle, Chester Road, York BridgeBox -0.167, 51.522, -0.144, 51.538set park and noaccess
green-st-james-park-roadsroyal park road, treated as restrictedThe Mall, Constitution Hill, Birdcage Walk, Horse Guards RoadBox -0.152, 51.498, -0.127, 51.508set park and noaccess
rotherhithe-tunnel-opentunnel shown open at all timesRotherhithe TunnelBox -0.060, 51.495, -0.035, 51.515clear conditional and noaccess
Download overrides.json

The script

  • extract_graph.py reads the OpenStreetMap snapshot and builds the road graph of each region: roads, names, road numbers, one-way streets, turn bans, barriers, bridges, tunnels and access rules. Then it applies the overrides file.

Ask for the data

Want the full derived road data? Email support@serucoach.co.uk and we will send it under the ODbL, free of charge.

Software

  • MapLibre GL JS (BSD-3-Clause): draws the map.
  • PMTiles (BSD-3-Clause): reads the map tiles.
  • fflate (MIT): unpacks compressed data.
  • Protomaps basemap style and assets (BSD-3-Clause; fonts SIL Open Font License): the starting point for our map style, icons and fonts.
  • Not affiliated with Transport for London