Do we really NEED railway=tram_crossing resp tram_level_crossing?

The legal distinction may be part of it, but I suspect this is essentially fallout from the approved 2019 embedded_rails=* proposal. That proposal legitimized the practice of mapping street-running railway tracks as separate features crisscrossing the roadway, as an exception to the physical separation principle, in order to model track geometry more accurately. In so doing, it created many additional highwayrailway intersections. Around the same time, railway=tram_crossing and railway=tram_level_crossing were informally discussed on the tagging list and on the Russian forum, but you’re right that there wasn’t a formal written proposal on the wiki.

iD’s preexisting validator for road–rail intersections automatically added railway=crossing and railway=level_crossing when connecting the ways, due to the very real risk of collisions with users of mobile navigation systems. However, most of the intersections involving these street-running tracks are merely artifacts of our data modeling approach, not real-world level crossings per se. To keep maps and navigation systems from “crying wolf” about these abstract crossings, iD limited railway=crossing and railway=level_crossing to heavy-rail crossings, distinguishing tram crossings.

Street running is by no means limited to trams. But it seems like both iD and the Russian mappers assumed that only trams would need this special treatment because trams are so much more likely to run on the street. Moreover, trams have different safety characteristics than locomotives, and in many cities, real tram crossings look different than real heavy rail crossings. That said, from the edits in Germany, we can see that the use of the word “tram” is problematic, because it implies to some mappers that any tram–road crossing node would qualify. Conversely, a heavy-rail industrial lead several blocks north of me runs along the street and crosses some intersections and lots of driveways, but no one would call them “tram crossings”.

From some of the discussions surrounding these tags, it sounds to me like the intention was for data consumers to ignore them, or at least deemphasize them. If so, I suppose not:railway=crossing and not:railway=level_crossing would’ve been another approach to solving the problem.[1] Maybe when connecting the railway to the roadway, the validator should give the mapper a choice between marking a bona fide level crossing and marking the absence of one. Similarly, when connecting a sidewalk to a service road, iD now lets the user choose whether to mark the intersection node as a crossing or leave it bare. The challenge with these “tram crossings” would be to clearly but succinctly describe the difference, since there are so many edge cases.


  1. crossing=no would be for places where a pedestrian may not cross. ↩︎

1 Like