DEV Community

A Route API Is Not an Itinerary: Turning OSRM Output Into Honest Iceland Day Budgets

A routing API can tell you that a loop takes about four hours to drive. That does not mean it is a four-hour day.

This distinction matters in Iceland. A visitor sees a route estimate, adds three pins, and assumes the rest will take care of itself. The missing time is usually not hidden in the routing engine. It is at the viewpoints, in the car park, over lunch, and in the margin needed when the day does not go exactly to plan.

I wanted a small dataset that made those assumptions visible rather than disguising them as one authoritative duration. The result compares four Golden Circle route shapes at three stop paces: twelve scenarios generated from the same inputs.

The measurement is only the baseline

The routes start and end in central Reykjavík. Each complete waypoint sequence was sent to the public OSRM driving service using OpenStreetMap data.

Route shape Distance OSRM driving time
Þingvellir, Geysir and Gullfoss 240.9 km 230 min
Classic route plus Kerið 241.2 km 232 min
Classic route plus Secret Lagoon 256.9 km 250 min
Classic route plus both add-ons 259.8 km 254 min

These figures were measured on 24 July 2026. They are routing estimates, not live traffic predictions.

The small difference between the first two rows is a useful example. Kerið barely changes the driving total, but it still changes the day. You need time to park, walk around the crater, and get back on the road. A route comparison that considers only kilometres will miss that.

Keep assumptions in data, not in prose

For each route, I calculated quick, comfortable and unhurried versions. The stop times are explicit inputs:

STOP_MINUTES = {
    "quick": {
        "Thingvellir Visitor Centre": 60,
        "Geysir": 45,
        "Gullfoss": 45,
        "Kerid": 30,
        "Secret Lagoon": 105,
    },
    "comfortable": {
        "Thingvellir Visitor Centre": 90,
        "Geysir": 60,
        "Gullfoss": 60,
        "Kerid": 45,
        "Secret Lagoon": 120,
    },
    "unhurried": {
        "Thingvellir Visitor Centre": 120,
        "Geysir": 75,
        "Gullfoss": 75,
        "Kerid": 60,
        "Secret Lagoon": 150,
    },
}
Enter fullscreen mode Exit fullscreen mode

Every scenario also includes a 45-minute food break and a 60-minute contingency allowance. The calculation is intentionally boring:

total_minutes = (
    driving_minutes
    + stop_minutes
    + food_break_minutes
    + contingency_minutes
)
Enter fullscreen mode Exit fullscreen mode

That is a feature. Anyone can inspect the inputs, disagree with them, and replace them. A single label such as “full-day tour” is much harder to audit.

What the twelve rows reveal

The classic three-stop loop ranges from about 8.1 hours at the quick pace to 10.1 hours at the unhurried pace. Adding both Kerið and the Secret Lagoon pushes the same range to roughly 10.7–14.0 hours.

The practical conclusion is not that one pace is correct. It is that add-ons consume stop time more quickly than the route line suggests. If road or weather conditions take an hour away from the day, removing an add-on is usually more honest than removing the contingency allowance.

For the actual stop order and the choices that matter on the road, I paired the dataset with this Golden Circle road trip planner. The planner explains the trip; the dataset keeps the measurements and assumptions reproducible.

A dependency-free generator

The generator uses Python’s standard library. Its route request is built from an ordered tuple of waypoint names:

def route_request_url(waypoints):
    coordinates = ";".join(
        f"{PLACES[name]['lon']:.7f},{PLACES[name]['lat']:.7f}"
        for name in waypoints
    )
    query = urllib.parse.urlencode({
        "overview": "false",
        "steps": "false",
        "annotations": "false",
    })
    return f"{OSRM_BASE}/{coordinates}?{query}"
Enter fullscreen mode Exit fullscreen mode

The repository-sized dataset includes the exact waypoint coordinates and OpenStreetMap object IDs, route totals, leg-level measurements, the twelve time budgets, and the generator itself. It is archived with a DOI at Zenodo under CC BY 4.0.

Limits that should stay visible

This model does not know about current weather, daylight, road closures, parking queues, walking conditions, seasonal access, or live traffic. It uses central Reykjavík as the start and end point. Accommodation location will change the route.

It also does not claim that a longer stop is automatically a better visit. The three pace labels are planning choices, not quality scores.

Before using any row as a real itinerary, check the current Icelandic road and weather services. Re-running the generator later can also produce different route values if OpenStreetMap or the OSRM routing graph changes.


Disclosure: AI assistance was used to organize and edit this article. The route measurements, scenario design, source files, assumptions, and factual checks were reviewed before publication.

Top comments (0)