← GPX route planner

How good is our routing? Methods & an open benchmark

results: loading… UK · road & gravel

Abstract. Route planners are usually judged by feel. This page does it with numbers: a metric suite for UK cycling routes — crash exposure, traffic stress, turn burden (right turns cross oncoming traffic in the UK; left turns don't), efficiency and comfort — and a reproducible benchmark of our fused router against BRouter, OSRM and Valhalla over a pinned set of real UK origin–destination pairs. Every engine is measured by the same instrument: routes are map-matched onto one shared road graph, so no engine is scored on its own claims. Results below update as we re-run the benchmark; the methodology and its limitations are stated in full.

1 · Why UK cycling needs its own metrics

In the UK you ride on the left, so a right turn crosses oncoming traffic — often while stationary in the middle of the carriageway — and a left turn does not. Any rider knows this asymmetry; almost no routing metric measures it. Distance, climb, even traffic-stress summaries all treat a route as a bag of road segments, yet much of the real discomfort of a ride concentrates at junctions: the right turn off a fast A-road, the staggered crossroads over a rat-run, the roundabout with a blind entry.

The metrics below therefore treat turn burden as a first-class safety quantity alongside crash exposure and traffic stress — and the benchmark scores every engine on it, ours included. Where our router is weaker than an alternative, the tables will say so.

2 · The planner being measured

GPX is a free cycling route planner for the UK, built for road and gravel riders. Plan a route by tapping the map, generate a round trip that is genuinely a loop, or compare A-to-B alternatives side by side — then export a Wahoo-ready GPX file for your bike computer. No account, no subscription, no adverts.

Routing is surface-aware: choose quiet-lane road riding, fast tarmac, mixed terrain or gravel-priority, and the planner favours the surfaces your bike is happy on. Every candidate route is scored on open data — reported collisions, Department for Transport traffic counts, mapped cycle infrastructure and surface quality — and fused into a single comparison. Our own quiet-roads, safety-first route is labelled “Ours” and shown beside the mainstream alternatives — the final say is always yours.

The map includes OS-style layers for public bridleways, the National Cycle Network, traffic levels and LiDAR-refined gradients (England). Round trips are hard-gated on roundness, and A-to-B planning can account for the day's wind when you set a departure time. Everything runs in your browser against free, open services; routes save locally and export as standard GPX.

3 · The metric suite

Six families. Every tag-dependent number is computed from the shared measurement graph, never from an engine's own metadata — the instrument is identical for all engines. Arrows show the desirable direction.

M1 · Safety exposure

Crash-kernel exposure — length-weighted mean of a severity-weighted Gaussian kernel over five years of STATS19 reported collisions (bandwidth 150 m, exposure-damped by DfT pedal-cycle counts), plus kilometres through high-exposure zones. Traffic stress — mean Level of Traffic Stress (LTS 1–4, Mekuria/Furth/Nixon-style tables over highway class, speed, infrastructure and AADT) and % distance at LTS 3–4. Motor-traffic dose — % distance on roads carrying ≥ 8,000 vehicles/day (DfT AADF; nearest same-class count point within 250 m, else the regional class prior) and A/B-road kilometres.

M2 · Turn burden the UK-specific part

Routes are map-matched onto the shared graph; a turn event exists where the matched path passes through a junction node with ≥ 3 traffic-carrying arms. The signed bearing change δ (measured 20 m either side of the node) classifies it: |δ| ≤ 30° straight · 30–150° left/right · > 150° U-turn.

Right-turn exposure (RTX) — precise definition

For each right turn at an unsignalised junction (no traffic-signal node within 30 m), the conflicting streams are the road being left (its oncoming traffic — the exposure lives on the road you leave) plus every other traffic-carrying arm except the road being joined. The event's weight is clamp(max conflicting AADT / 1000, 0.5, 15); RTX is the sum per 10 matched km. Signalised right turns count as turns but carry zero RTX.

Busy crossings and roundabouts

Busy crossing: straight over an unsignalised junction whose maximum conflicting arm is class A/B or ≥ 4,000 AADT — crossing a priority road at grade. Grade-separated crossings never share a graph node, so they are structurally excluded. Roundabouts are collapsed to one event per traversal (UK clockwise circulation makes per-node left/right classification meaningless inside them) and reported as their own rate — never folded into left/right counts or RTX.

M3 · Efficiency

Directness — route length ÷ straight-line distance. Climbing — metres of filtered ascent from one shared DEM (Open-Meteo elevation on the matched line; engine elevations are stripped so no engine benefits from its own DEM). Estimated time — one hill- and surface-aware model ETA for every engine; native engine times are recorded but never compared.

M4 · Comfort & simplicity

Preferred surface — % distance on the surface the selected mode wants (road: paved; gravel: paved or gravel). Roughness — mean surface-quality score from OSM smoothness/tracktype. Road changes — distinct-road identity changes per 10 km: a proxy for navigation load.

M5 · Fidelity to ridden routes

For each benchmark OD the corpus holds a route a person actually chose to publish and ride. Fidelity is the fraction of the planned route that lies on roads the ridden route used (15 m undirected grid). It is a containment, not a symmetric overlap: loop ODs plan only the outward half, and symmetric overlap would punish that structurally. Caveat: our learned preference model was trained on this corpus — see limitations.

M6 · Deployability

Completion rate (a route returned at all), match coverage, and latency — remote engines report live HTTP wall-clock; ours reports on-device compute, and the two are not directly comparable (stated wherever shown). Ours is the only engine that can run offline once map tiles are cached.

4 · Benchmark methodology

OD set. A pinned, versioned set of real UK origin–destination pairs derived from routes people published and rode (v1: ODs, stratified by mode, distance band and region, capped so no region exceeds ~30%). Selection is deterministic — a hash partition reserved for evaluation, never used to train our model's future versions — and the set is immutable: a changed selection would be v2, and results across versions are never mixed. The committed file contains endpoints and hash provenance only: no route names, no source URLs, no geometries.

Engines. Ours (the in-app fused A* — identical code, wind disabled for reproducibility), BRouter (stock per-mode profiles), OSRM's public bike profile (ignores mode), and Valhalla with per-mode bicycle costing. Identical two-waypoint inputs; no vias, no no-go areas.

The shared instrument. For each OD we fetch one measurement graph from OpenStreetMap — deliberately wider than any engine's rideable network (trunk roads, service roads, footways included), because a road you cannot ride still carries the traffic you must cross. Every engine's polyline is map-matched onto it (10 m sampling, 15 m snap, continuity-preferring nearest edge — not an HMM: engine polylines lie on the network up to rounding, and HMM machinery would add unfalsifiable knobs). All road attributes, LTS, AADT and turn events come from the matched graph. Routes matching below 85% coverage have tag-dependent metrics suppressed and are excluded from those aggregates — exclusion counts are published.

Fairness rules. Same OD set, same data snapshots (content-hashed in the results), same DEM, same model ETA for every engine; engine failures are recorded and reported as partial completion, not silently dropped — reliability is itself a result; response caches are shared across compared runs so a re-run replays identical inputs.

Aggregation. Per-metric medians with 95% seeded-bootstrap confidence intervals and per-engine n. No composite score: a single number would hide exactly the trade-offs the page exists to show.

5 · Results

Loading benchmark results…

6 · Limitations — read before quoting

7 · Where this is going

This benchmark is the planner's optimisation target: router changes ship only when they move these numbers without breaking the others (each cost term can be disabled independently, so every change is measured against a baseline on identical caches). Turn-aware routing — making the search itself avoid expensive right turns, not just count them — is the first candidate.

The longer goal: a routing and scoring stack good enough to generate the site's curated route library — loops and A-to-B rides synthesised for each region and graded by these metrics — so the library no longer depends on licensing routes written by people. When a generated route beats the benchmark's human-ridden baselines on safety and comfort at comparable directness, it earns a place.