[RFC] Feature Proposal - Deprecate crossing=zebra in favor of crossing:markings

I would like to introduce my proposal to deprecate crossing=zebra and replace the instances with the nowadays more popular alternative of crossing:markings=zebra and crossing=uncontrolled.
Crossing=zebra has issues which have been solved by crossing_ref and crossing:markings and has seen almost no increase in use count for the last six years.

Please see the complete proposal with rationale at Proposal:Deprecate crossing=zebra in favor of crossing:markings - OpenStreetMap Wiki and feel free to leave a comment on the discussion page of the wiki article.


I’m not an expert, but I read the crossing_ref wiki page and apparently crossing_ref=zebra isn’t 1:1 with crossing:markings=zebra? This wiki description seems to indicate that that kind of crossing is crossing_ref=zebra, but crossing:markings=zebra;dots. So maybe is not safe to automatically replace them?

I myself have corrected crossing=zebra to crossing=uncontrolled; crossing:markings=zebra, considering that there are better ways to tag them. I didn’t realise it’s an official (if nowadays rendered superfluous) tag all the time, though.

It is indeed not. Crossing:markings=zebra describes the visible striped pattern on the road that is present for all crossing tagged with crossing=zebra.
Crossing_ref=zebra describes the legal status of a zebra crossing. In most countries that have a zebra crossing by law this implies eg. drivers need to yield to pedestrians. Note how your example focuses on the Belisha Beacons and zig-zag marking, since those are part of a legally correct zebra crossing in the UK.
Crossing_ref=zebra makes only sense to be used in countries that have such a law describing zebra crossings, crosing:markings=zebra can be used on all crossings with a visible zebra pattern, even those that have traffic signals.
Hence my proposal is not to automatically replace crossing=zebra with crossing_ref=zebra, but with crossing:markings=zebra.
Maybe it makes sense to set up a different replacement system for countries that know a thing called zebra crossing, otherwise adding crossing_ref=zebra would stay a manual process.
This differentiation is also one of the main issues I have with the current crossing=zebra.

This proposal makes a good point that crossing=zebra is hopelessly skunked at this point. (What’s black with white stripes and walks on all fours? :stuck_out_tongue:) From my own experience, most of the legacy crossing=zebra usage in my areas of interest were probably other kinds of markings, especially what we’d now tag as crossing:markings=lines. Before crossing:markings=* was approved, most mappers weren’t trying to distinguish one marking pattern from another, so introducing this distinction en masse would probably skunk crossing:markings=zebra just as badly.

I think it would be possible to deprecate crossing=zebra without confidently naming a single tagging combination to replace it in every instance. It can still be a suggestion, subject to the caveat that the likely replacement would differ from region to region.


Crossing_ref=zebra describes the legal status of a zebra crossing.

isn’t this a mere duplication of the crossing=* tag then?

I did not encounter any crossing=zebras en masse yet where there were different markings then zebra markings so I didn’t really have that on my mind.
Having an recommended replacement would be a nice to have, not really a must have. But after having seen that railway thread I didn’t want to go into a deprecation discussion without being able to name an alternative tagging.

Not really, since crossing=* additionally tries to describe the traffic signals (crossing:signals=*) and the road markings (crossing:markings=*) at the crossing in one single value. On which of those three the focus is depends on the value, and sometimes there isn’t even an agreement.
Eg. there are wiki pages that state that crossing=marked does not give any statement about the traffic lights and other pages say it means there are only markings and no lights.
With crossing=zebra being one of the worst examples where it initially only meant the legal status but then shifted over to meaning the markings only depending on the area I want to start the cleanup there. Long term I expect the crossing=* tag to be completely replaced by the individual tags over the next years since there are too many unclear spots.

1 Like

For example, at the time that iD migrated away from the crossing=zebra preset, the area around Cincinnati had more than 7,500 crossing=zebra nodes and ways, about 1% of all crossing=zebra occurrences globally. This is a part of the U.S. where the longitudinal bar pattern remains relatively rare, where “zebra” crossings don’t exist as a formal concept in the real world. Since then, more than 2,000 crossings have been retagged with crossing:markings=*. But in the same time, only 250 new crossings have been positively identified as crossing:markings=zebra, including crossings that were never tagged as crossing=zebra to begin with. Some of the 1,100 crossing:markings=yes occurrences may in fact be marked with longitudinal bars, but this still indicates that a very significant share of crossing=zebra in this region, probably a majority, don’t have that marking pattern.

(Hopefullly I got these queries right; I find it quite difficult to track tag changes over time with the Overpass API.)

As the infobox for crossing=zebra notes, a more reliable replacement would be crossing:markings=yes. This isn’t as specific as crossing:markings=zebra, but it will avoid diluting the meaning of that tag. Similarly, iD has been suggesting crossing:markings=yes whenever it encounters crossing=marked.


The ohsome dashboard shines in that - e.g. ohsome - dashboard

Yes, I linked to Ohsome Dashboard earlier as a crude estimate. However, what I’d like to do is to query for crossing=zebra in 2018, then see how many of those got converted to crossing:markings=zebra versus some other crossing:markings=* value. Ohsome can’t distinguish these cases from crossings that currently have crossing:markings=* but never had crossing=zebra in the first place.

Overpass can get halfway there with its diff mode and compare statement, but I haven’t figured out how to performantly track the replacement of one tag with another on the same set of features. Still, hopefully my estimate demonstrates that crossing=zebra can refer to a variety of marking patterns, requiring us to proceed more carefully.


Perhaps another filter: id:(id list), where the list comes for an overpass query of past state? (How long a list can ohsome handle?)

Some members of the UK community have already stated they don’t like crossing:markings=yes In areas where crossing=zebra was only used for zebra marked crossings. Retagging them all with yes would mean a major loss of infomation, not really any better than skunking the tag by tagging all those that don’t mean a zebra with the zebra crossing tag. Definetly a delicate situation and I really apprechiate your attempt at bringing some data in it.

keep in mind one can add the marking tags to a crossing=zebra as well without touching the crossing=* tag itself. Eg. Rapid suggests that kind of tagging when you encounter a crossing=zebra.

1 Like

Perhaps all the proposal needs to suggest is crossing:markings=*, leaving it up to individual mappers or developers of editors, MapRoulette challenges, or mechanical edits to decide the most relevant value based on context. For example, an editor may be capable of suggesting a different replacement depending on the country.


Can you elaborate on the “major loss of information”? Isn’t this about replacing one tag with another?



1 Like

In late 2022 there were 2240 crossing=zebra in Hamilton County, Ohio overpass turbo

Feeding the list of node ids into ohsome yields this plot of what became of them:

Certainly, a mechanical edit ill advised there. In my local area, there were 32 crossing=zebra then. 31 received crossing:markings=zebra. No idea what happened to the single outlier.


In areas where crossing=zebra was used as intended a data consumer knows he faces something with stripes when he encounters a crossing=zebra and not something with lines. If you replace all crossing=zebra with crossing:markings=yes a crossing with lines and one with stripes would have the exact same tags, the information about the stripes is lost and would need to be recollected.

Yes, I linked to Ohsome Dashboard earlier as a crude estimate. However, what I’d like to do is to query for crossing=zebra in 2018, then see how many of those got converted to crossing:markings=zebra versus some other crossing:markings=* value. Ohsome can’t distinguish these cases from crossings that have crossing:markings=* but never had crossing=zebra.

crossing=zebra is about a pedestrian crossing signed with zebra markings, i.e. pedestrians have the priority in many jurisdictions, but from the presence of zebra markings one cannot infer that it is a zebra crossing, e.g. in Italy, traffic signal controlled crossings also have zebra markings. These get the crossing=traffic_signals tag.


That crossing:markings=yes iD-ism is uselessly spammed onto the map for crossing=marked and crossing=uncontrolled as well. In the first case, telling data consumers that there is a marked crossing which is marked does not seem very helpful.

If users can see the markings from a survey or the available imagery, they should tag a meaningful and country-specific value. If they don’t know what the markings are, they shouldn’t be adding this tag.

1 Like