User:Hubert87/DoubleRepresentation
Please feel free to add your idea and to correct any typos
On this page, I am trying to formalize my ideas for double representation of road adjacent foot ways and cycle ways. I will do both of them, because the problems are very similar. I am writing down some possibilities, which can be futher discussed and refined.
The Problem
The problem I am trying to solve here is, that a sidewalk can only be tagged as sidewalk=* on the street (e.g highway=residential) or as a separete OSM-way with highway=footway + footway=sidewalk at the moment. The same goes for cycleways. This holds some problems for mappers, renderes and router.
- Mappers, because there is are two contradicting ways for mapping a foot way / cycle way
- Renderes, because depending on the zoom level, it might be better to draw the way in regard to the main road way (lets say up to zoom level 16 ) or as a separed OSM-Way for a better representation of the foot ways position in regard to other object like trees, parking spaces, or on complicated junctions (lets say for zoom level 16 and higher). And in case of both schemes present, too many lines might be rendered.
- Routers, positioning of the routing object on the street or foot way / cycle way might be complicated. In some cases it might be more useful to give routing instructions in a more general form (only directions along the main road way) or in a very detailed way, depending on the positioning accuracy. Also routing across a street might be more complicated, when using highway=footway instead of the main road.
But the use of the OSM data is very wide spread and only entering data for one specific use is problematic. At the moment the only option to resolve the problem, is to enter the information about the foot way / cycle way in both forms. As data suplementing a main road highway=residential) + sidewalk=* and as a seperad OSM-Way in the form of highway=footway + {{tag|footway|sidewalk}. The problem is, that there has to be a posiblity for data consumers to seperate and fiter both types of information so that depending on their need, the data comsumer of use only information of the main road and ingnore the separet OSM-Way or vise versa.
An other problem which could incoporate into this concept is the distiction between road adjecend foot ways that are separeted form the road way only by a kerb and others. This might be interresting for some data consumers , e.g. routing programs.
Options
These are the in my oppionon most destinct Variations. The names of the new tags can be changed
Option A
The tagging scheme
- is mostly symmetrical.
- has tags that are rearanged or often new.
- differtiates between near and far sidepaths on the roadway and sidepath
- can cause double rendered lines on the map
New Tags:
- sidepath=yes. Used to identify where a way has/is a road adjacent osm_way aka a "sidepath".
- transferring sidewalk=right/left/both to footway:right/left/both=sidewalk. This is done to make the tagging more symetrical. eg. footway:right/left/both=yes/sidewalk, cycleway:right/left/both=track/sidetrack.
- AND/OR : Tagging path=* is new but necessary to keep the proposal symetrical between tags on the "roadway" and on the "sidepath". It could also be represented by using a combination of either cycleway=* or footway=* or both of them. However it could be wierd to have highway=path/footway/cycleway + cycleway=* and/or footway=* on the "sidepath".
Option B
This tagging scheme
- uses new values "sidepath","sidetrack","sideway"
- assumes that "sidetrack", "sideway" and "sidewalk" are also to be considered "sidepaths"
- differentiates between near and far sidepaths only with douple representation.
- moves sidewalk=right/left/both (= sidewalk:right/left/both=yes) to footway:right/left/both=yes (= footway=right/left/both) for symetry reasons.
- is safe for renderes. It will only show one line, unless they update thier rules.
- uses the same values on the street and on the sidepath.
- "favors" separate renderd sipdepath indirectly.
Description | Sketch | EITHER highway=* |
OR highway=cycleway/footway/path |
BOTH highway=* |
AND highway=cycleway/footway/path |
---|---|---|---|---|---|
near sidepath | cycleway:right/left/both=track AND/OR footway:right/left/both=yes OR path:right/left/both=yes |
bicycle=designated foot=designated segregated=yes |
footway:right/left/both=sidewalk AND/OR cycleway:right/left/both=sidetrack OR path:right/left/both=sideway |
footway=sidewalk AND/OR cycleway=sidetrack OR path=sideway bicycle=designated foot=designated segregated=yes | |
far sidepath | cycleway:right/left/both=sidepath AND/OR footway:right/left/both=sidepath OR path:right/left/both=sidepath |
footway=sidepath AND/OR cycleway=sidepath OR path=sidepath bicycle=designated foot=designated segregated=yes |
sidewalk=* vs footway=*
Overpass-Querries as of 2015-01-14
Querry | Count |
---|---|
[out:json][timeout:240]; ( way["footway"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; ); out count; |
39,027 |
[out:json][timeout:240]; ( way["footway"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; way["footway:right"]["highway"!="footway"]"highway"!="cycleway"]["highway"!="path"]; way["footway:left"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; way["footway:both"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; ); out count; |
40,245 |
[cout:json][timeout:240]; ( way["sidewalk"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; ); out count; |
491,305, |
[out:json][timeout:240]; ( way["sidewalk"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; way["sidewalk:right"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; way["sidewalk:left"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; way["sidewalk:both"]["highway"!="footway"]["highway"!="cycleway"]["highway"!="path"]; ); out count; |
492,030 |
Variations
Variation 1: Relation
Use a steet-relation to combine the main road with the adjecend foot way. No distictions between only kerb seperated foot ways and other road adjacend foot ways possible. A lot of work to set a relation for every street. A data comsumer can not know, wether a road has an adjacent way by just checking whether a road is a member of a (street-)Relation . It must also check wether that relation also has a adjecent way as a member. This seems really difficult and is therfore not a workable solution to the problem.
How ever it does not mean the such a relation shouldn't be created. This way a "secure" link between the adjacent way and the road way is given.
Variation 2: Sidepath key
Adding a new key sidepath=yes to the OSM-ways using a appropriate namespace. No changes to existing tagging scheme. Does not consider the difference between near and far sidepaths. Simpler Version of the street-relation.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* *:sidepath=yes |
highway=* sidepath=yes | |
far sidepath | highway=* *:sidepath=yes |
highway=* sidepath=yes |
Variation 3: Sidepath or sidewalk subvalues
Highly symetrical. Differentiates between near and far side ways. Uses "footway" instead of "sidewalk" and only one of "footway" or "cycleway" or "path". Uses the value *=sidepath for far sidepaths and *=sidewalk for near sidepaths. Wierd for cycleway=sidewalk
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* footway/cycleway/path=right/left/both footway/cycleway/path:right/left/both=sidewalk |
highway=footway/cycleway/path footway/cycleway/path=sidewalk | |
far sidepath | highway=* footway/cycleway/path=right/left/both footway/cycleway/path:right/left/both=sidepath |
highway=footway/cycleway/path footway/cycleway/path=sidepath |
Variation 4: Differentiated cycleway and footway tagging
Symetrical. Differentiates between near and far side ways. Uses "footway" instead of "sidewalk". Uses the value *=sidepath for far sidepaths and footway=sidewalk / cycleway=track for near sidepaths. Need a new Key for road adjanced far cycle way for example cycleway=track, but the name can be different.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* footway=right/left/both footway:right/left/both=sidewalk cycleway=right/left/both cycleway:right/left/both=track |
highway=footway/cycleway/path footway=sidewalk cycleway=track | |
far sidepath | highway=* footway=right/left/both footway:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidepath cycleway=sidepath |
Variation 5 : footway and sidewalk different
Differentiates between near and far side ways. Uses "sidewalk=*". Uses the value footway=sidewalk and cycleway=track for near sidepaths and *=sidepath for farsidepaths. Need a new Key for road adjanced far cycle way for example cycleway=track, but the name can be different.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidewalk cycleway=right/left/both cycleway:right/left/both=track |
highway=footway/cycleway/path footway=sidewalk cycleway=track | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidepath cycleway=sidepath |
Variation 6 : Additional sidepath=*
Differentiates between near and far side ways. Uses "sidewalk=*". Uses footway=sidewalk and cycleway=track for near sidepaths and cycleway/footway=sidepath for far sidepaths. sidepath=* is added onto the seperate way/main road to denote that the way is also tagged.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidewalk cycleway=right/left/both cycleway:right/left/both=track sidewalk:right/left/both:sidepath=yes |
highway=footway/cycleway/path footway=sidewalk cycleway=track sidepath=yes | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidewalk sidewalk:right/left/both:sidepath=yes cycleway=right/left/both cycleway:right/left/both=track cycleway:right/left/both:sidepath=yes |
highway=footway/cycleway/path footway=sidepath cycleway=sidepath sidepath=yes |
Variation 7 : no *=sidepath for road adjacent far ways
Differentiates between near and far side ways. Uses "sidewalk=*". Uses footway=sidewalk and cycleway=track for near sidepaths. Far sidepath have no subkey. sidepath=* is added onto the seperate way/main road to denote that the way is also tagged.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidewalk cycleway=right/left/both cycleway:right/left/both=track sidewalk:right/left/both:sidepath=yes |
highway=footway/cycleway/path footway=sidewalk cycleway=track sidepath=yes | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidewalk sidewalk:right/left/both:sidepath=yes cycleway=right/left/both cycleway:right/left/both=track cycleway:right/left/both:sidepath=yes |
highway=footway/cycleway/path sidepath=yes |
Variation 8 : Mixes sidepath=* and *=sidepath
Differentiates between near and far side ways on the adjacent way only. Uses "sidewalk=*". Uses footway=sidewalk and cycleway=track for near sidepaths. Far sidepath have no subkey. Uses sidepath=* on the adjacend waay and *:right/left/both=sidepath on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidewalk cycleway=track sidepath=yes | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path sidepath=yes |
Variation 8a : sidetrack instead of track
Differentiates between near and far side ways on the adjacent way only. Uses "sidewalk=*". Uses footway=sidewalk and cycleway=sidetrack for near sidepaths. Far sidepath have no subkey. Uses sidepath=* on the adjacend waay and *:right/left/both=sidepath on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidewalk cycleway=sidetrack sidepath=yes | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path sidepath=yes |
Variation 9 : No sidepath=*
Differentiates between near and far side ways on the adjacent way only. Uses "sidewalk=*". Uses footway=sidewalk and cycleway=track for near sidepaths and footway/cycleway=sidepath for far sidepaths. Uses *:right/left/both=sidepath on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidewalk cycleway=track | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidepath cycleway=sidepath |
Variation 10 : *=sidetrack on street and no sidepath=*
Differentiates between near and far side ways. Uses "footway=*" instead of "sidewalk=*". Uses footway=sidewalk and cycleway=sidetrack for near sidepaths and footway/cycleway=sidepath for far sidepaths. Uses *:right/left/both:sidepath=* on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* footway=right/left/both footway:right/left/both=sidewalk cycleway=right/left/both cycleway:right/left/both=sidetrack |
highway=footway/cycleway/path footway=sidewalk cycleway=sidetrack | |
far sidepath | highway=* footway=right/left/both footway:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidepath cycleway=sidepath |
Variation 10a : track instead of sidetrack on adjacent way
Differentiates between near and far side ways on the adjacent way only. Uses "footway=*" instead of "sidewalk=*". Uses footway=sidewalk and cycleway=track for near sidepaths and footway/cycleway=sidepath for far sidepaths. Uses *:right/left/both=sidepath on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* footway=right/left/both footway:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidewalk cycleway=track | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidepath cycleway=sidepath |
Variation 10b : *=sidepath in both cases
Differentiates between near and far side ways on the adjacent way only. Uses "footway=*" instead of "sidewalk=*". Uses footway=sidewalk and cycleway=sidetrack for near sidepaths and footway/cycleway=sidepath for far sidepaths. Uses *:right/left/both=sidepath on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* footway=right/left/both footway:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidewalk cycleway=sidetrack | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidepath cycleway=sidepath |
Variation 10c : c/f/p=sidepath on far sidepath
Differentiates between near and far side ways on the adjacent way only. Uses "footway=*" instead of "sidewalk=*". Uses footway=sidewalk and cycleway=sidetrack for near sidepaths and footway/cycleway=sidepath for far sidepaths. Uses *:right/left/both=sidepath on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* footway=right/left/both footway:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway=sidewalk cycleway=sidetrack | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway/cycleway/path=sidepath |
Variation 12 : decrepates footway=sidewalk
Also possible but not desirable in my opinion.
Does not differentiate between near and far side ways. Uses "footway=*" instead of "sidewalk=*". Decrepates footway=sidewalk and uses footway/cycleway/path=sidepath on all sidepaths. Uses *:right/left/both=sidepath on the main road to denote that the way is double represented.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=* footway=right/left/both footway:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway/cycleway/path=sidepath | |
far sidepath | highway=* sidewalk=right/left/both sidewalk:right/left/both=sidepath cycleway=right/left/both cycleway:right/left/both=sidepath |
highway=footway/cycleway/path footway/cycleway/path=sidepath |
Comments
Why not use the access tag bicycle=use_sidepath? This key is already more or less established (over 8000 usages), and means there's a separated sidepath mapped that should be used for routing instead of the main way. Direction and side can be included in the tag. F.e.:
- bicycle:forward=use_sidepath: only when going in the forward direction of the way, there's a sidepath that must be used
- bicycle=use_sidepath:right: both direction need to use the sidepath at the right side of the road
- bicycle:forward=use_sidepath:right: when going forward, use the sidepath at the right (though this must be the default in right-hand driving countries).
Currently, bicycle=use_sidepath is only meant for separated cycleways. For adjacent, but separatedly mapped lanes, you could use bicycle=use_sidelane.
As for the tags on the side ways themselves, it's tempting to use cycleway=*, but this tag is already used to mark the presence of a cycleway on the main way, so shouldn't be double used. In that view, I guess sidepath=yes/no and sidelane=yes/no would work the best.
Sidetrack instead of sidepath (in all occurences above) might also be more clear to mappers. As it conforms to the cycleway=track tag. But sidepath is more established already.
Description | sketch | tags on main road | tags on adjacent way |
---|---|---|---|
near sidepath | highway=primary/secondary/... foot=use_sidelane bicycle=use_sidelane |
highway=footway/cycleway/path sidelane=yes | |
far sidepath | highway=primary/secondary/... foot=use_sidepath OR foot=use_sidetrack bicycle=use_sidepath OR bicycle=use_sidetrack |
highway=footway/cycleway/path sidepath=yes OR sidetrack=yes |
I tried to made sure that no keys had colliding meanings, and I tried to follow well-established conventions in the above schema, while trying to keep it simple for the mapper and the data user. I hope this is a valid proposal. --Sanderd17 (talk) 12:51, 20 December 2014 (UTC)
- Thanks for your addition.
- use_sidepath: This would work with foot=use_sidepath, but the problem is with bicycle=use_sidepath. It would conflict with routers, since the tag is only to be used when there is a compulsory cycle way present( and mapped separately). But in Germany, at least, there are also "other, not compulsory" cycleways where you can also ride on the street ff you like.
- cycle lanes: I am not sure this is desirable, since there is no hard separetion (a kerb) and this would conflict with principle only mapping physical seperated way as a seperate way?
- sidetrack: In addition to finding a way to double represention, I want to integrate the distinction between near and far sidepath, which makes it a lot more complicated, then adding a simple (*:)sidepath=yes. But if done right it could offere a very flexible way of tagging.
- sidepath: I my understanding a sidepath is a road adjacent footway/cycleway/path.
- cycleway: If I'm not mistaken, it's ok to tag highway=cycleway + cycleway=crossing [1]. But I understand what you want to say. I personly also like to go back and use footway=* on a street again, since this would be a lot more symetrical. --Hubert87 (talk) 17:51, 21 December 2014 (UTC)