TransitRadar

How the railway names its own track

Passengers name railway lines after where they go. The industry names them after nothing at all — a four-character code that cannot be decoded, is not unique to a route, and in one notorious case means almost the opposite of what it looks like.

If you have looked at a route on this site you will have seen codes like MLN1, SPC1 or BGK. These are Engineer's Line References, and they are how the railway identifies its own track. Every milepost, every speed restriction, every engineering possession is described against one. Our line directory lists them.

What an ELR actually is

An ELR names a stretch of track, not a passenger route or a service. It exists so that an engineer can say precisely where something is: a defect is not “near Rugby”, it is at a given mileage along a given ELR. Position along the line is given in miles and chains — eighty chains to the mile, a survivor of pre-metric surveying that the industry has never given up, so SPC1 72m 06ch is 72 miles and 6 chains along the code SPC1.

The codes are three or four characters. Beyond that there is no scheme you can rely on.

MLN1 is not the Midland

The single most useful thing to know about ELRs is that you cannot decode one. The letters look like abbreviations and they are, sometimes, but not reliably and not in the way you would guess.

MLN1 is the obvious trap. It reads as “Main Line 1” or, to anyone who knows the network, as the Midland Main Line. It is neither: MLN1 runs from London Paddington to Plymouth. It is the Great Western. The Midland Main Line out of St Pancras is SPC1. Any tool, script or mental model that infers meaning from the letters will be wrong, and wrong confidently.

One name, sixteen codes

The relationship between a line's name and its ELRs is not one to one, and it is not even close. “West Coast Main Line” spans sixteen separate ELRs. A long route is divided into engineering sections that begin and end at junctions, remodellings and historical company boundaries, none of which a passenger has any reason to know about.

This is why our line pages always show the code beside the name. The name tells you roughly where you are; only the code identifies which piece of track is meant.

Nobody publishes the names

Here is something we did not expect. We ingested the industry's own 661 MB track-model export looking for line names, and found that every single name field in it is empty — the code is populated and the description is a blank string, throughout. The official source names none of its own lines.

The names you see here therefore come from OpenStreetMap, by taking railway ways that carry both a line reference and a name and matching them up. That gets us 1,361 of 1,409 codes named, about 96.6%. In 452 cases the contributing ways disagreed with each other about the name, and we take whichever name covers the most track length. Names are therefore a convenience with a known error rate, and the code is always the authority. Where no name could be established the line is shown by its code and endpoints, which is honest rather than tidy.

Two different lengths, and they are both correct

A line page shows two measurements that look like they should match and do not.

  • Track kilometres sums every piece of track carrying that code — the up road, the down road, every loop, siding and crossover.
  • Mileposted extent is the distance from the lowest mileage on the line to the highest: how far it reaches.

On MLN1 those are 1,028 track-kilometres against a 244-mile extent — about two and a half times. Neither is derived from the other and neither is wrong. A four-track main line with generous loops legitimately contains far more rail than it covers ground.

Most mileposted points are not stations

Mileage anchors mark anything an engineer needs to locate: junctions, yards, loops, depot exits, signal boxes. Stations are a minority of them. There are 101 mileposted positions on MLN1, and on SPC1 only 17 of 36 correspond to a station with a public code at all.

That is why our line pages offer a stations-only filter rather than simply listing everything: a passenger looking for Leicester should not have to read past four signal locations to find it, and an engineer looking for the signal locations should not have them hidden.

Why there is no “steepest gradient” figure

We tried three times to publish a headline gradient per line, and threw all three away. It is worth explaining, because the failure is instructive about summary statistics generally.

Taking the steepest single segment made almost every main line about 1 in 29, because one short atypical piece of track dominates. Taking the steepest 500 metres wherever it falls gave the approach to King's Cross 1 in 33, against a real figure of about 1 in 107 — scattered bad elevation samples add up to 500 metres very happily. Taking the steepest continuous 500 metres was right in places and then claimed 1 in 29 across the flat of East Anglia.

The cause is the elevation source: heights match within about eight metres, which is close enough for a flyover or a parallel road to lend its height to the line beneath. Per-leg gradients over a journey are fine, because summing rises and falls washes the errors out. A single extreme statistic over thousands of segments does the opposite — it goes looking for the worst error and reports it as a fact. So the site reports gradient along a route and refuses to reduce a line to one number.

Reading a mileage without being caught out

Mileages here are truncated, not rounded. Rounding chains to the nearest mile produces a table that goes backwards — a position at 71m 79ch rounding up to 72m sits above a genuine 72m 06ch — and a non-monotonic mileage column makes correct data look corrupt. If you are comparing our figures against another source, check which convention it uses before concluding anything disagrees.

Where this comes from

Track geometry and line references are from OpenStreetMap; mileage anchors are from Network Rail's engineering exports. Both are described, with their licences, on where the data comes from. You can browse every code we hold on the line directory, and the same data is available through the API.