As of this post date (November 8, 2025) about 75% of the separated bike lanes (cycleway=track) in Toronto are still mapped as part of the main way for the road:
Mapped separately from the main road: 346 ways (Overpass Turbo Query - counts the number of main road segments with cycleway(:left/:right/:both)=separate)
Imagery available:
I’ve recently finished biking all the protected bike routes identified in the City’s bike lane data with a GoPro Max to get 360 imagery. You should be able to access it via either Panoramax or Mapillary.
A couple notes/tips on separation=*:
Toronto often uses a type of low-height jersey barrier that is 45cm tall which is somewhere in-between separation=kerb and separation=jersey_barrier (product info). They’ve recently been sighted in LA as well.
I asked for some advice in the OSM US tagging channel and it seems like separation(:left/:right)=kerb + separation(:left/:right):height=0.45 might work for these.
Also, for separation=*, any :left\:right suffix should be relative to the direction of the way itself, which means that they’re different for each highway=cycleway on each side. The suffix for the separation between the cycle track and the main road should end up being the same (e.g. either both separation:left= or separation:right=).
What is your plan for Bloor Street? Currently it’s micromapped with the highway=primary shifting from cycleway:<side>=track to cycleway:<side>=lane at intersections where there’s only paint separation. When the Kiwi mapper came in last year and painted it as separate ways, they merged it back into the highway=primary for those intersections, with spectacularly bad results for routing (“turn slight right” / “keep right onto bike track” repeated at every such intersection). cycleway=crossing is an option for where it’s actually crossing the side street, but before the intersection, would you tag cycleway:separation=no, or anything else?
On the stretch of Bloor in the Annex where the westbound lane is only a painted lane for several blocks, do you plan to draw a separate way only for the eastbound lane? Or Simcoe next to Roy Thomson Hall?
Is the city still shifting bike tracks on some streets when CafeTO patios go in and out? How would we deal with that?
Please make sure to transfer lcn relations onto the new separate ways. lcn=yes tags should probably be removed from the main way.
Also, if this is an extensive project, I would encourage you to also tag is_sidepath:of=<primary/secondary/tertiary/etc> on the cycleway way. This avoids some information loss about what kind of street the bike track is on (e.g. consider the difference between Simcoe and University).
Will put some more thought into it and post again on Tuesday or next weekend –
I think what I’m going to do is try to draft up a checklist / procedure synthesizing some of the comments from the various links and share that, so that it’s clear how I’m thinking of approaching some of these edge cases and finer details.
It sounds like it would be helpful to try to minimize the number of changes between separately-mapped bike lanes and bike lanes mapped on the main way. I guess that would mean some segments of separately-mapped bike lanes that are tagged cycleway:separation=no? I’ll try something small like Crescent Town Rd. and post some screenshots of where I would put the transition points and how I would handle changes between protected and unprotected segments. Best to start with the simpler cases and work up to more complex / higher stakes ones like Bloor St.
They do, for sure on the Danforth if I remember correctly. (Example) I think what I would do in these cases is map what the “default” geometry would be without the CafeTO adjustments. This should be pretty easy since the City’s most recent aerial imagery is from the spring or fall. The geometry will be simpler this way, though it might be worth checking if any important attributes (e.g. separation) are materially changed with the cafe adjustments. I can always gather more street-level imagery if needed to compare.
Little addition: If you use the separation schema on separately mapped cycleway geometries, the correct tagging is only separation(:left)=no, i.e. without the cycleway: prefix. But apart from that, I agree with you: if separately mapped ways run on the carriageway without separation for a section, it makes sense to continue the separately mapped ways and tag them with separation(:left)=no. (Of course, ensure routable connections to branching ways.)