<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:PMingLiU;
        panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@PMingLiU";
        panose-1:2 2 5 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-AU link=blue vlink=purple><div class=WordSection1><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Paul Johnson <baloo@ursamundi.org> <br><b>Sent:</b> Thursday, 14 June 2018 08:00<br><b>To:</b> Tag discussion, strategy and related tools <tagging@openstreetmap.org><br><b>Subject:</b> Re: [Tagging] I can't support transit:lanes<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>So how is this different from placement=transition, then? <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p></div></div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>placement=* defines the relation between the position of the way that defines that is used to specify the position of the road to the lanes.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Without a placement tag, the assumption is always that the way is in the exact centre the total width of all lanes.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>with values like left_of:1, right_of:2, middle_of:3 you can specify that the way is at the left, right, or middle of a specific lane (lanes always counted from left to right, and matching the lanes defined in the :lanes suffix tags, not the lanes=x “full-width motorized” lanes.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>You can see the effect of that in this screenshot from JOSM with the “lane and road attributes” mapstyle active:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><a href="https://www.dropbox.com/s/f18xbtvdcjg8syo/1520437709804.jpg?dl=0">https://www.dropbox.com/s/f18xbtvdcjg8syo/1520437709804.jpg?dl=0</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><a href="https://www.dropbox.com/s/o5mgkj7bdmwe6rx/1523175198420.jpg?dl=0">https://www.dropbox.com/s/o5mgkj7bdmwe6rx/1523175198420.jpg?dl=0</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Where possible, I’ve simply kept the ways following a specific on the ground lane, even when lanes are added and removed, by using that appropriate placement=* values. Otherwise, to be absolutely correct, the way would have had to wiggle left and right every time a lane is added or removed for a short section to keep the position of the way in the centre of the total width of all lanes.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>placement=transition indicates that the way is not actually in a fixed position to the lanes for this segment. This is required at places where ways split or merge because we are using lines (the ways) to define the position of areas (the actual road surface).<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>For a concrete example, see (from the 2<sup>nd</sup> screenshot, motorway_link coming up in the bottom right corner): <a href="https://www.openstreetmap.org/way/577734615">https://www.openstreetmap.org/way/577734615</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>At that point, it has 4 lanes, these lanes split into two 2 lane ways. For the short section where the split takes place, it’s impossible to define a correct placement value, as the way for the 4 lane section is in the middle of the 4 lanes, while the way for the later 2 lane sections is also in the middle of each.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>So for the two small sections where the way is not actually correctly positioned, you specify placement=transition, to basically tell the data consumer “you’ll have to figure this out based on how the lanes connect”:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><a href="https://www.openstreetmap.org/way/577672034">https://www.openstreetmap.org/way/577672034</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><a href="https://www.openstreetmap.org/way/577672029">https://www.openstreetmap.org/way/577672029</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>transit:lanes on the other hand defines how the lanes connect from one way to another. While this information can, partially, in some cases, with some guessing, be derived by analysing the placement, and :lanes tags,  it’s much easier if the information is directly defined. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>It essential defines “if you are currently in a specific lane of way A and you go from way A to way B, what lane of way B will you be on without having to change lanes (crossing a lane dividing road marking)”. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Cases where it’s definitely impossible to determine that from placement and other :lanes tags is the difference between a new lane being added (so you have to change lanes to get into it) and a lane forking (the lane gets wide enough to be two lanes, then a new dividing line is starting in the middle, you can essentially arrive at either of the two new lanes without changing lanes). As well as the same in reverse, a lane merging (the lane ends, you have to cross a dividing line to get out of it) or two lanes joining (the lane dividing road marking simply stops, going from two lanes to one double width lane, which then shrinks to normal lane width, in which case from both original lanes you will end up in the new lane without crossing a lane divider).<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Take for a simple general example this way (also from the 2<sup>nd</sup> screenshot): <a href="https://www.openstreetmap.org/way/577734617">https://www.openstreetmap.org/way/577734617</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>A motorway_link splits off: <a href="https://www.openstreetmap.org/way/577671984">https://www.openstreetmap.org/way/577671984</a> while the way itself continues: <a href="https://www.openstreetmap.org/way/577671983">https://www.openstreetmap.org/way/577671983</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>The lane connectivity from that first way to the two splitting ways is defined in two transit relations:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>For the slipway: <a href="https://www.openstreetmap.org/relation/8189793">https://www.openstreetmap.org/relation/8189793</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>transit:lanes=continue|leave|leave<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>because it’s a :lanes suffix key, the number of | separated values must match the number of lanes defined in the other :lanes keys on the from way.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>The value tells you that the left-most lane of the “from” way continues to the left-most (only in this case) lane of the to way. While the two lanes on the right do not connect to the “to” way at all (they go to some other way).<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>And for the through road: <a href="https://www.openstreetmap.org/relation/8189792">https://www.openstreetmap.org/relation/8189792</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>transit:lanes=leave|continue|continue<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>The value tells you that the left-most lane leaves to some other way, while the middle lane connects to the left-most lane of the “to” way and the right-most lane connects to the 2<sup>nd</sup> (and right-most) lane of the “to” way.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Another example (the tag is defined on the way here, which, as we have established, gives the editor authors a hissy fit; the same information could be defined in a transit relation instead, it just takes a lot more work for the mapper to create in the absence of simply point and click editor support) (this is from the first screenshot):<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From <a href="https://www.openstreetmap.org/way/578649804">https://www.openstreetmap.org/way/578649804</a> to <a href="https://www.openstreetmap.org/way/567520097">https://www.openstreetmap.org/way/567520097</a> a new lane is added. As a complicating factor, that lane is added in the middle of the existing lanes, so it’s impossible to just line up the lane positions using the placement and width:lanes keys to figure out which lane connects to which.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>(on the first way = “from” way):<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Arial",sans-serif;color:#222222;background:white'>transit:lanes=continue|new_on_left|continue<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>the “to” way is unambiguous because the from way is a one-way and only a single other way connects at the node where the traffic flows out of the from way.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>The transit tag indicates The following lane connectivity:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>(bike lane) -> continue -> (bike lane)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>--------------------------------- (new lane)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>(left vehicle lane) -> new_on_left -> (continued, now middle, vehicle lane)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>(right vehicle lane) -> continue -> (continued, still right, vehicle lane)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>As you can see, while there is some relation between the placement tag and the transit tag, they define very different things. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Also, tagging on the way, while I agree that it is a problem for editors, when used correctly, is just as easy if not easier for data consumers  to interpret than creating a relation for it. The exact same information could be tagged on a relation instead, the only reason for tagging it on the ways is that it’s much faster and easier for mappers to enter. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>You can also see, because transitions are defined to be always from the end of a way you don’t need an explicit via node in the relation, because the end node of the from way, which must be a shared node with the to way, always gives you your implicit via node.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Cheers,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Thorsten<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'><o:p> </o:p></span></p></div></body></html>