[Poll] Separately mapped traffic islands and `crossing:island=*`

Question: When a crossing’s traffic island is mapped separately, what should the value of crossing:island=* be?


We’ll use this location (in OSM: Way: 1446078400) as our example.

When the crossing is mapped at a lower level of detail as only a single highway=footway+footway=crossing way and/or highway=crossing nodes on the highway=residential ways, the tag crossing:island=yes is used.

When the traffic island is mapped separately as a highway=footway+footway=traffic_island way, what should the value of crossing:island=* be on the highway=crossing nodes and highway=footway+footway=crossing ways?


Taginfo: crossing:island=*

OSM Wiki: crossing:island=*


What should the value of crossing:island=* be when traffic islands are mapped separately?
  • crossing:island=no
  • crossing:island=yes
  • crossing:island=separate
  • (something else)
0 voters

Note: The poll options assume that the crossing:island=* tag is to be the same for both the highway=footway+footway=crossing ways and the highway=crossing node. If you do not agree with that, vote (something else), and another poll can be created later to narrow that down.


Thank you @citrula for restarting this discussion in a thread on the OSM US Slack!

3 Likes

IMHO, when everything is micromapped by their own objects with their own geometries (including islands with footway=traffic_island), then crossing:island=* should not be tagged at all.

What would be the use case to tag it? (i.e. what extra functionality would it bring that is not provided by footway=traffic_island already?)

6 Likes

I’m going to double up in support of this perspective. First, why crossing:island=* is terrible with a question? What if I have a traffic island only on one side of a crossing like here:

Which crossings get the traffic island? The 110’ wide crossing of 7-lanes? The 70’ crossing of 5 lanes? Just the 25’ on lane crossing without even a stop? If I added to this which of these does the traffic island make “safer” in any significant way? Better yet how much protection does the traffic island offer? Does this tag tell you if a bike can fit in? What type of curbs are on each end of it? Is there a barrier on both ends or is only one end just wide open offering no protection? Better yet… If there wasn’t a crossing:island=* tag and only footway=traffic_island was an option would all this confusion go away? Or at least would short sidewalks between two crosswalks be treated and prompt-able as a “traffic_island” without much effort?

I already mentioned some of the benefits of footway=traffic_island like knowing the length and thus if a bike for instance could fit but also it could capture curbs, traffic signals, tactile surfaces, full or partial separation, and so much more.

1 Like

I’m claiming that soon as the left and right part of the traffic island are mapped separately, there is no crossing:island=yes any more – independently of footway=traffic_island. For me, only this type of mapping would warrant a crossing:island=yes:

6 Likes

If I were to map this at the intermediate level of detail with two roadways and two crossing nodes, but just a single crossing way, I would want to represent the island as a node in the middle like this:

In the above screenshot I tagged the node: traffic_calming=island + crossing:island=yes. That may not be quite right if traffic_calming=island is only supposed to be for islands that aren’t pedestrian refuges, but a plain crossing:island=yes doesn’t seem right either.

2 Likes

we could see crossing:island=yes as property for the highway=crossing nodes to say whether there is an island or not, independently of it being mapped separately or not, or use crossing:island=separate as we do with other situations where explicit and implicit features coexist

2 Likes

I don’t have an idea as to where this distinction is necessary.

I don’t understand where there is logically information missing which the additional tag of crossing:island=* can give, iff the crossing itself is already mapped as a highway=<crossing way type> + <crossing way type>=traffic_island.

I imagine it as two distinct crossings over two separate parallel roadways which just “happen” to be very close to one another.

Is this a sidewalk, or is this a footway=crossing?
For the argument, the park between the two one-way roadways which together form the street (Edelhofdamm) could be seen as a traffic island. It isn’t, just to have an idea of the extremes this argument can lead to.

Sure, tagging the non-existence of an (additional) island with crossing:island=no is possible, but to me that is redundant.

If necessary you could also use the value =separate to distinguish between the non-micromapped state and the one where the island itself exists in some fashion.

What I don’t know is when this distinction is needed.

Isn’t the tag itself a symptom of oversimplification, and if the necessary micro-mapping has been done, it’s no longer necessary?

1 Like

The way I see it, the distinction is useful to prevent someone from being asked, say in streetcomplete, “is there an island for this crossing?” when it’s already been mapped. crossing:island=yes on the crossing is for when there is one in the middle of the node/way, crossing:island=no is when there is not a refuge island, and crossing:island=separate is to show future mappers, “yes, there is a refuge island, but it’s already been micromapped as two separate crossings with a highway=footway + footway=traffic_island, so don’t bother”.

I could also see the distinction being useful for a router that, maybe, would like to favor pedestrian crossings with refuge islands over those that don’t. Tagging each carriageway crossing with crossing:island=no loses the information that an island has been micromapped, but the router could treat separate the same as yes. I suppose you could infer it from geometry, but that seems more complicated (although I Am Not a Routing Engine Maintainer).

3 Likes

I might be misinterpreting, but are you implying that if a crossing crosses a dual carriageway then there’s no need to map crossing:island? Because there are certainly situations where a crossing across a dual carriageway does not imply crossing:island=yes:

Yes, you only need this if the lanes around an island are not separately mapped (or for a dual carriageway for that matter), because even in your example, you are already mapping 2 crossings instead of 1, which is what crossing:island=yes implies.
I’m saying that crossing:island=yes means: I’ve mapped a single crossing, but it’s actually 2 separate ones with an island to stand on between the 2 lanes.

Yeah, it does seem more complicated, that’s the only thing which makes me say it’s redundant. The info is all there, so what I’m saying is; is it necessary to tag it anyway, or is it just plain “nice to have”.

I’m not saying the “nice to have” is not enough of a reason – I’m in favor of saying so directly, if that’s the case.

I guess I’m thinking too much in a kind of axiomatic mindset.
Can the present information also be represented the same way if there is less info? Which parts are actually necessary, and which are “nice too have”?

Sure, (e.g.) streetcomplete could do a whole bunch of geometric and logical inference, and then not ask questions if they’re unnecessary – but at what point do these costs outweigh a simple “yes, there’s a crossing island here somewhere”. Idk.

It’s almost the same with the is_sidepath<:of><:of:name>=* tag family, to a human It’s redundant, so logically it follows that it’s computable, but is that really the case, and how easily?

2 Likes

What I’m saying is that in the location I posted, I would describe it as lacking a pedestrian refuge island, i.e. I would tag this crossing as crossing:island=no, despite the street being a dual carriageway. The reason being that there’s nowhere for the pedestrian to actually stand that’s protected from cars: the crossing is entirely in the intersection, despite a median dividing the road (undoubtedly bad design, but pretty common in areas I’m familiar with unfortunately). So I disagree that a footway=crossing going across a dual carriageway is sufficient to infer crossing:island=yes, or that it’s a reasonable general assumption.

3 Likes

I agree and also the wiki has a good documentation how to deal with this.

2 Likes

Okay, now I get what you were after. Sorry for not understanding it properly first try.
I was only explaining where not to set crossing:island=yes, not where to set it to =no. But given your example, I think yes/no/separate makes far more sense, because I tend to set =no for separately-mapped traffic islands, which – from a consumer perspective – could mean either „there is a separately mapped island“, „there is an island, but I haven’t m apped it separately, because I thought that’s implied by a dual carraigeway“, or „there is absolutely no traffic island“. But that would also mean that all =no-mapped ones must now be re-checked, if they are actually separately mapped :thinking:

If crossing:island=no and crossing:island=separate are each getting the vote of ~40% of respondents to the question of “When a crossing’s traffic island is mapped separately, what should the value of crossing:island=* be?”, this need for re-checking all crossing:island=*-tagged elements is necessary regardless, as that poll outcome clearly indicates that different mappers are using the same crossing:island=* key to answer several different questions, including different sub-questions depending on whether the tag is applied to a highway=crossing node, a footway=crossing way, and/or some specific combination of those (ex. two highway=crossing child middle nodes of a footway=crossing way)…

This suggests to me that the only reasonable conclusion is that crossing:island=* cannot be interpreted usefully. :confused: (though I hope I am wrong about that!)

2 Likes

I think the solution here is for StreetComplete to stop issuing the quest for any nodes matching this query, that is, they’re attached to a traffic_island way:

node["highway"="crossing"]({{bbox}});
way["highway"="footway"]["footway"="crossing"](bn)->.crossings;
.crossings > ->.crossingnodes;
way["highway"="footway"]["footway"="traffic_island"](bn.crossingnodes)->.islands;
.islands > ->.islandnodes;
way["highway"="footway"]["footway"="crossing"](bn.islandnodes)->.crossingswithislands;
node["highway"="crossing"](w.crossingswithislands);

Ping @westnordost (sry, ist das generell so ok?)

If it was easy to do, then SC wouldn’t ask for kerb and tactile paving on the highway=crossing, even though already separately mapped :confused:

hmmm, crossing as node on a road and as a way with separate not road crossing traffic island (TI). How’s the navigator to know if there’s an TI to take account of? My problem being, the node where the crossing way connects to the road way is not telling anything to the motorist, or does it, to all of them?

On the wiki at the wide road diagram where it briefly splits at the TI, there was past discussion here not to do that… simply add a traffic island node onto the road again, so the navigator knows what to take account of.

(We have a wide road at the justice palace which used to be 4 lane. One lane was converted to cycleway in 2024, separated with a serious kerb/curb, so we briefly had a 3 lane road, 1 north. 2 south. Then, they decided to mark the center lane with gore-diagional markings… no physical splitting. so it effectively became 1 north, 1 south lane for cars **. And then in the last phase, they slapped in 2 traffic islands, BEFORE the 2 foot crossings, so tagged 2 nodes where the TI’s are from where the no-go gore-diagonal painted center lane is. The navigator gets the word and the crossings itself I’ve tagged, well seriously, there’s only a TI to one side on each, with crossing:island=yes for lack of something to tell the pedestrian navigator there’s some protection in the middle but not full, lest you’d consider the GD markings a protection.

(And picture this, one of the crossings is from the university footway to the railway station access tunnel, dense foot traffic at times).

So, net, when it comes to crossings for the weaker traffic participant I’m for double redundancy. If Mark-X does not need the info from way or node because it can read the whole ambient, then they can toss whatever they don’t need. But they were told, all of them.

I haven’t been following this discussion and have not formed an opinion on this matter.

In any case, if you are asking for the technical point of view, it is possible to exclude nodes of ways with certain tags set. Currently, for example, the crossing island quest is not asked for crossings on highway=service (amongst others).

Note that oftentimes footway=* subtags are missing on separately mapped sidealks+crossings+…