Tagging a staircase is easy. There are plenty of good examples for that. But tagging a circular staircase? You end up with a spaghetti mess of ways, each different for every layer—ugly when rendered and unusable for routers.
This problem isn’t new. Already in 2011, people were searching for a solution. And even today, there’s still no clean way to do it.
So why not have everyone here share how they think this miraculous object should be mapped—what properties it should have (or argue that the current situation is fine). With a bit of imagination, I’m sure we can come up with something.
And if anyone can reference real-world examples, that would be great—I know I’ve seen them, but I can’t pinpoint where.
I’ve mapped some spiral ramps on multistory parking garages and spiral pedestrian footbridges. Some are boxy, but I assume you’re referring to them as well.
Other than QA tools yelling at me to split them and add layer=* tags, I haven’t noticed any routing problems in the major routers.
I’ve also mapped water slides that are fully enclosed and only reachable from inside a building, so they’re indoors, but I have no idea how I’d use repeat_on=* to simplify anything.
How do you get overlapping ways so clean ? What is your trick ? Because 1 layer is generally ok, but more that 3 and it’s just a mess on my side. Here is something I tried to map someday. I didn’t publish because it was just a spaghetti not maintainable and disgusting when looking at.
Going to revisit a square spiral staircase I’ve drawn in my very early mapping days, just a single in and out with 3 loops bolted to an 7-8 meter retaining wall end of a street to get to a lower level square. The top entrance is NW facing, the bottom exit is SE facing so think repeat_on would not work with 3 different shaped sections. GraphHopper shows cars going the 400 meters around a steep up and then an even steeper down. Foot is good and bicycle you have to shoulder, a little shortcut it appears,
That staircase reminds me of one I’ve mapped between two buildings, with a breezeway at each level serving as a landing. It can be tricky to get right, so I understand the desire for reducing the repetition to a tag. However, it’s unclear to me that routers are prepared to correctly analyze the topology of ways connected to repeat_on=*-tagged ways.
To map a spiral staircase without a special tag, start out by mapping it as a single way that crosses over itself multiple times. To prevent routing issues, avoid connecting the way to itself. iD disallows such self-intersections by default, but you can hold down Alt (⌥ Option on macOS) to circumvent this check. For convenience, I temporarily map each “level” of the spiral at an offset so I can see them clearly.
Routers and renderers generally have no problem with self-intersections, as long as nothing else connects to the spiral part of the way up. However, external validators like Osmose yell about self-intersections, because sometimes spirals can overlap in nonobvious ways, as in the water slides I posted earlier. To preempt these warnings, split each level of the spiral at some arbitrary point and assign it a unique layer=* value (or level=* if indoors).
At this point, you can add bridge=* to any way above ground level. You can also map a surrounding man_made=bridge multipolygon that represents the overall footprint of the structure.
Now to clean up the geometries. Select each way and square or circle it as well as you can. Then move each way onto the same location without an offset. For better visual results, select each node of the way and drag and drop it onto the corresponding node of the ways below it. While dragging, allow iD to snap the node to the other node, but prevent the nodes from being merged by holding down Alt or ⌥ Option just before you drop the node.
repeat_on= and level= etc isn’t considered by routers yet. Connecting features together will cause them to be routed directly, ignoring the proper connection in between as if short-circuited or bounced back.