Or more broadly: is it semantically meaningful to prefix the value of
mi: or other units?
Railways, being linear features, usually describe locations with linear referencing. In other words, railway features like signals, switches and stations have an inherent position, described as a single number (
railway:position=*) indicating the distance, following the path of the railway, to a designated zero benchmark point. This number is not always labeled in real life on the feature itself, though nearly all railway lines worldwide have evenly-spaced milepost signs (
railway=milestone) that are used as intermediate benchmarks to interpolate the position of features in between them.
Since the majority of the world has standardized on metric units, OSM tags default to metric units when unspecified. In the case of
railway:position=*, the default unit is kilometers. However, throughout the North American conventional rail network (yes, including Mexico and Canada), mileposts indicate US customary miles instead of kilometers.
But here’s the kicker: at least in North America, the distance between mileposts is not always one mile. The vast majority of mileposts are one mile apart, but occasionally there are “short miles” and “long miles” that can be anywhere from 0.1 to 1.9 miles long. A variety of circumstances bring these into existence: a construction project to straighten a curve may shorten a railroad mile, or the acquisition of one railroad corporation by another may introduce long miles to make milepost equations easier where the two railroad systems meet. The position of a feature falling along a long or short mile is still interpolated equally between the two nearest mileposts—for example, if mileposts 24 and 25 on a particular railroad are only 0.6 miles apart, a station at “mile 24.5” would actually be 0.3 miles away from both mileposts.
Another quirk of North American railroads is that some operators assign a letter prefix to all their mileposts to uniquely identify which line they’re on. This conflicts with the idea that
railway:position=* must be a numerical value with defined units. As I understand it, this tag is semantically more like a
ref=* than it is a measurable numeric value. Although miles may have been used in the very first survey of these lines, one cannot determine the
railway:position=* of a feature simply by measuring from the zero benchmark. One needs to know where the nearest two mileposts are and interpolate a decimal value in between them, regardless of what units the line was originally surveyed with.
After all, a short mile could end up being exactly a kilometer—should that change the value of
railway:position=*? Is it even meaningful to specify units in the first place? I’m not convinced that there’s any use to retaining unit prefixes in this tag.