Run315

Route planner · BRouter & OpenStreetMap

Route

0.00km
Distance
0m
Climb

Waypoints

Click the map to drop your first waypoint. Drag a pin to nudge it; the route re-snaps to roads and paths.

Layers

Loading layers…

Found along the drawn route and updated as you edit it. Beaches, pools and parks are picked up from further out than a tap or a toilet, because they are worth a longer detour.

Saved routes

Elevation

Two waypoints or more and the profile appears here, read straight off the routed line.

, so the check has to wait for the parsed document. addEventListener('DOMContentLoaded', function () { try { var dm = ['standalone', 'minimal-ui', 'fullscreen', 'window-controls-overlay']; if (!document.getElementById('frozen-note') && (navigator.standalone || dm.some(function (m) { return matchMedia('(display-mode: ' + m + ')').matches; }))) { var pk = 'portal-installed', reg = JSON.parse(localStorage.getItem(pk) || '{}'); reg.Run315 = Date.now(); localStorage.setItem(pk, JSON.stringify(reg)); } } catch (e) { /* private mode - ignore */ } }); // Installable, and readable on the train. See templates/sw.js. if ('serviceWorker' in navigator) { addEventListener('load', function () { navigator.serviceWorker.register('/Run315/sw.js'); }); }
Static demo. A synthetic athlete, frozen to files — every page here is the real app rendering real analysis, but anything that writes (Garmin sync, adding a race, the coach review) is switched off, because a file server has nothing to write to. Source & how to run it for real.