The co-driver's notebook

Why your recording is the route

Hand a maps app a start and an end and it will find you a road, though not the one you drove. What corridor matching is, and what happens where no road will follow your line.

A schematic map from above: a winding red route through fields and woods separating from a straight dark road that cuts across country.
The same two points, and not the same drive.

Here is the experiment that started this app. Take a drive you love, a hundred and fifty kilometres of small roads that took you all afternoon, and note down where it started and where it ended. Type those two things into any maps app. Look at what comes back.

You will get a road, and it will be a perfectly good road. It will be forty minutes shorter than the drive you actually did and it will miss every reason you did it. The maps app is not failing. It is doing the job it was given, which was to connect two points efficiently. The drive was never about the two points.

The gap between a route and a drive

A routing engine takes a start, an end, and a cost function, and returns the cheapest path. Cost is usually time. It will happily put you on a dual carriageway for twenty kilometres because that is cheap, and it will avoid the ridge road with the view because that is expensive.

None of the things that made your drive good are inputs. Not the surface, not the camber, not the fact that the road follows a river for eleven kilometres, not that there is a bakery at the halfway point. There is no field in the query for "the good way".

And if the drive was a loop, the problem stops being about preferences and becomes structural. A loop's start and end are the same point. Ask for a route from there to there and the honest answer is a route of zero length. Every "avoid motorways" and "scenic route" toggle in the world will not help, because the question itself has thrown away the middle, which was everything that mattered.

Meanwhile a GPX viewer has the opposite problem. It has the exact drive, every metre of it, and it will draw the line beautifully. It just cannot tell you anything. There is no "in three hundred metres, turn left", because a GPX is a list of coordinates and nothing in it knows that a road has a name or that a corner is a junction.

One of them knows the roads but not your drive. The other knows your drive but not the roads. The trick is to ask each one only for what it has.

Asking each one only what it knows

Roadbook '71 puts the two together, with a strict division of labour. Your recording decides where the route goes. The road network is only asked what to call it.

The mechanism is to stop asking for a route at all and start asking for a great many very short ones. The app walks along your track dropping waypoints, then requests a route from each waypoint to the next and stitches the answers together. Between two waypoints two hundred metres apart on the same lane there is usually exactly one sensible answer, and the router gives it, along with the road's name and the turn instructions, which is what you wanted from it.

Where you put those waypoints turns out to be most of the craft.

Spacing by how much the road is turning

Evenly-spaced waypoints are the obvious approach and the wrong one. On a straight, a waypoint every two hundred metres is a waste: the router was never going to invent a detour across a field. Through a hairpin, two hundred metres is a catastrophe: put one waypoint before the corner and one after and the router will quite reasonably connect them by the road that goes round the other side of the hill, because that road is shorter and it has no idea you care.

So the sampler spaces waypoints by curvature. Sparse down a straight, dense through a bend, densest through a hairpin. Corners get the attention because corners are where a router can go wrong, and straights are where it cannot.

Checking the answer against the recording

Even with good waypoints, a returned leg is only a claim until it is checked, so every leg is measured against the original track. If the road route stays within a corridor around your recorded line, it is accepted. If it wanders outside (because there was a one-way system, or a barrier, or the router simply preferred a parallel road) the leg is thrown away and requested again with more waypoints packed into it.

This is why building a route takes minutes rather than seconds. A 100 km loop is a few hundred chained requests, paced so that Apple's servers do not start refusing them, and some of those requests are made twice. The result is cached against the file's contents, so you only pay for it once; open the same track next week and the route is there immediately. And a build you interrupt leaves a resume point, so the requests already made are not thrown away.

Where no road route will follow you

Sometimes the retry does not help. The road you drove is a forest track that the map has as a footpath, or a farm lane that is not in the data at all, or a road that was there and has since been reclassified. No amount of packing waypoints in will produce a road route down a road the map does not have.

There are two things an app can do here, and only one of them is honest.

It can snap you to the nearest road it does know, which on the test loop I use would have meant a road seven hundred and twenty-six metres away, in a genuinely different valley. Or it can admit the limit.

Roadbook '71 admits it. Along those stretches the route is your recorded line. The map still leads you, the line is still drawn, and you are still in the right place. What you do not get is spoken instructions, because the app cannot invent a turn onto a road that does not exist in the data.

The important part is that this is not a silent failure. Those stretches are counted, measured, listed and drawn in their own colour on the route screen before you set off. You know there are three hundred and twenty-six metres of quiet coming, and roughly where, so the silence is something you have planned for rather than something that happens to you.

And you have two ways to argue with it. Any single warned stretch can be retried on its own, which asks again with a denser set of waypoints, and sometimes that is enough. Or you can drop a waypoint pin directly on the track, which forces the route through that exact spot when it rebuilds. Pinning is the tool for "I know this road exists, go there".

Why bother

Because the alternative is a drive that is only nearly yours, and a route that is 95% right is not 95% as good. The missing 5% is the bit where you end up on a main road you were specifically avoiding, wondering where it went wrong, with the app confidently telling you to carry straight on.

Starting from the recording means the failure mode is different. When the app cannot do something it stops talking and shows you the line you drove. That is a much better thing to have happen at 70 km/h than a confident instruction onto the wrong road.