[OSM-talk] Connecting tags using array syntax

Candid Dauth mailinglists at cdauth.de
Tue Mar 31 23:51:15 BST 2009


Hi there,

on http://wiki.openstreetmap.org/wiki/Proposed_features/Value_separator#Comment, we’ve been discussing a bit about how to tag different things that co-exist in one node, way or area. As I’m rather new to the mailing-list, I was wondering if there was already a proposed solution for this, at least I haven’t found anything on the Wiki so far.

The problem I am seeing is that there seems to be no way to define a relationship between single tags of a way or a node. Here are some examples that I have recently experienced problems with:

1. Different things in one node or area have different opening hours. For example, there are multiple shops with different opening hours on different floors of a building. Or an ATM in the entrance hall of a bank, the ATM being opened at different hours than the bank itself. Or a recycling container where you are allowed to put in paper and glass, but glass only at certain hours to avoid being too loud. At the moment, you have to create two different nodes next to each other, which does not always represent the real situation.

2. A restriction only applies for a specified class of vehicles. At the moment, only access restrictions are taggable, but there are also streets where speed limits apply only to HGVs for example, or agricultural vehicles are excepted from a weight limit.

3. A restriction only applies in one direction of the way. At the moment, only access restrictions (one-way road) and the exception of bicycles are taggable. Very often though, a speed limit applies for only one direction. Or a way is only a designated cyclepath in one direction. Or a weight limit only applies when entering a road from one direction, on the other side the sign is missing.

4. A combination of the above. For example a speed limit that is different depending on the vehicle and on the time. On the Autobahn 8, there is a segment with a speed limit of 120 km/h from 6 o’clock until 20 o’clock. From 22 o’clock to 6 o’clock though, there is a limit of 100 km/h for all vehicles and a limit of 60 km/h for HGVs. Currently, the hour_on and hour_off tags are very inflexible, so this complicated speed-limit is untaggable at the moment.

5. A road has a pavement on both sides, but the pavements have different surfaces. Although I think in this case relations for the sidewalks would be an even better solution, connecting tags could at least avoid weird tag-namespace combinations such as “footway:left:surface” where nobody can be sure in which order these colon-separated tags should be used.

My suggestion to solve these problems would include three main changes:

1. Use “tag arrays”. Tags with the same index are connected to each other, for example an ATM with different opening hours than the bank:
* amenity[0]=bank
* opening_hours[0]=Mo-Fr 09:00-16:00
* amenity[1]=atm
* opening_hours[1]=Mo-Su 06:00-22:00
* name=Deutsche Bank
It could either be defined that tags with no index are connected to all array indexes (so both the ATM and the bank are called “Deutsche Bank”) or they get the index 0 automatically (so in this case only the bank would be called “Deutsche Bank”). Both would not influence the current tagging practice.
Of course the syntax could look different, for example “amenity:0” instead of “amenity[0]” or something else.

2. Introduce a new tag called “for” or different. It defines to which types of vehicles the other tags of the array index apply. The example from the Autobahn 8 from above:
* maxspeed[0]=120
* hour_on[0]=6
* hour_off[0]=20
* maxspeed[1]=100
* hour_on[1]=22
* hour_off[1]=6
* maxspeed[2]=60
* hour_on[2]=22
* hour_off[2]=6
* for[2]=hgv
This would (could) deprecate the whole set of access restriction tags that exist at the moment, a road that is not to be accessed by HGVs would be tagged as:
* access[0]=no
* for[0]=hgv
Or a cyclepath could be:
* access[0]=designated
* for[0]=bicycle
* access[1]=yes
* for[1]=foot
* access[2]=no
* for[2]=motor_vehicle

3. Introduce a tag called “direction” or similar. The direction tag should define that the tags with its array index should apply only in one direction. Different speed limits in different directions could look this way:
* maxspeed[0]=100
* direction[0]=1
* maxspeed[1]=70
* direction[1]=-1
A one-way road with both-way access to cyclists would be tagged this way (which could make the oneway tag and any additional bicycle exception tags obsolete):
* vehicle[0]=no
* for[0]=motor_vehicle
* direction[0]=1
This could possibly also be used for roads that have different names in different directions, but in that case I would suggest using relations, as things can get complicated when you combine different names of a road with different restrictions.
As “vehicle=no,direction=1” tagging could confuse users, I would suggest keeping the oneway tag as a more readable alternative for simple one-way roads.


I think this could solve a whole bunch of problems, in fact it is the only way I can think of that can solve some of the cases I mentioned above. Has anything like this already been discussed anywhere? Can anyone think of a case where my proposal could not be used to tag the relation between tags?


-- 
Candid Dauth
Rotbachstr. 9
88433 Schemmerhofen-Ingerkingen
Germany

http://cdauth.de/
mailto:mailinglists at cdauth.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.openstreetmap.org/pipermail/talk/attachments/20090331/b6fb33a0/attachment.pgp>


More information about the talk mailing list