[Talk-de] Dictonaries in OSM

Andreas Hubel andi at saerdnaer.de
So Nov 20 02:59:34 UTC 2011


Hallo,

Zuerst mal ein paar kurze Definitionen. 

Für mich sind in dieser Mail
* ein Wert ein einfacher String key = "bla", 
* eine Liste mehrere Werte key =  ["bla", "blub"] und 
* ein Dictionary eine Liste, bei der die einzelnen Werte benannt sind: key = {subkey1: "bla", subkey2: "blub"}

In OSM gibt es öfter den Fall, das man für einen Tag mehrere Werte angeben muss, z.B. bei Packstationen an denen man sowohl Pakete aufgeben als auch abholen kann:

vending=parcel_pickup;parcel_mail_in

Um nun in OSM also Liste abzubilden verwenden wir den Strichpunkt.
Aus key =  ["bla", "blub"]  wird key=bla;blub 

Wie sieht es nun aber mit Dictonaries aus?
Leider ist man sich da wohl nicht so einig. 
Mir sind im ersten Moment nur die TMC und die parking Tags eingefallen:

parking:lane:right=perpendicular
parking:condition:right=disc
parking:condition:right:maxstay=1 h
parking:condition:right:time_interval=Mo-Fr 09:00-18:00;Sa 09:00-14:00

parking = {
	lane: {
		right: "perpendicular"
	},
	condition: {
		right: {
			value: "disc",
			maxstay: "1 h",
			time_interval: ["Mo-Fr 09:00-18:00", "Sa 09:00-14:00"]
		}
	}
}


TMC:cid_58:tabcd_1:Class = Point
TMC:cid_58:tabcd_1:LCLversion = 9.00
TMC:cid_58:tabcd_1:LocationCode = 24518
TMC:cid_58:tabcd_1:NextLocationCode = 24519
TMC:cid_58:tabcd_1:PrevLocationCode = 24517

Okay, hier ist es schwierig nen endeutiges mapping zu finden, ich nehme mal eines, das für mich am sinnvollsten scheint.
(Diskussion wie sinnvoll die Tags sind bitte im entsprechenden Thread nebenan.)

TMC = [
	{
		cid: "58",
		tabcd: 1,
		Class: "Point",
		LCLversion: "9.00",
		LocationCode: "24518",
		NextLocationCode: "24519",
		PrevLocationCode: "24517"
	}
]

Wenn man sich mal bei Taginfo mal den Key-Längen Report absteigend nach länge sortiert kommt man noch auf viel mehr Verwendungen…. http://taginfo.openstreetmap.org/reports/key_lengths#keys

education:male_student_pupil_dropout_2010_2011=x
education:male_student_pupil_dropout_2009_2010=x
education:male_student_pupil_dropout_2008_2009=x

-----

http://wiki.openstreetmap.org/wiki/Key:traffic:hourly
Dabei geht es wohl um Verkerszählungen, warum auch immer wir das in der DB haben...
http://www.openstreetmap.org/browse/node/391836581
Der Node hat knapp 50 Tags, hier mal nen Auszug:

traffic:hourly:00:Sa:fall = <10/6:00
traffic:hourly:07:We:fall:backward = <4/14:00
traffic:hourly:07:We:fall:forward = 8/14:00
traffic:hourly:08:Fr:fall:backward = 7/16:00
traffic:hourly:08:Fr:fall:forward = 7/16:00
traffic:hourly:08:Fr:fall:wet:backward = 5/11:00
traffic:hourly:08:Fr:fall:wet:forward = <5/11:00

Wenn man die Daten tatsächlich in der DB haben will sollte man das das als 
traffic_hourly:fall=Sa 00 <10/6;We 07 8,<4/14;Fr 08 7,7/16; Fr 08 wet 5,<5/11
taggen.

----

http://www.openstreetmap.org/browse/way/45855121
http://www.yucaipavalleygolf.com/Yucaipa-Valley-Golf-Course.html
WTF

----

http://wiki.openstreetmap.org/wiki/Proposed_features/Extended_conditions_for_access_tags#Examples

bicycle = yes
bicycle:(10:00-18:00) = no	Bicycles are permitted to use this street outside 10AM-6PM.

maxspeed:hgv = 120
maxspeed:hgv:Sa,Su = 80	Maxspeed for hgv is limited to 80 on weekends, but 120 otherwise.

maxspeed = 50
maxspeed:(Mo-Fr 07:00-17:00) = 30

----

Ich wäre grundsätzlich dafür beim Taggen drauf zu achten, das möglichst wenig verschiedene Keys entstehen.
Das heißt ich würde dynamische Dinge wie Zahlen oder Wochentage gerne aus dem Key rauslassen.

In http://wiki.openstreetmap.org/wiki/Talk:Proposed_features/Extended_conditions_for_access_tags#Move_parameters_from_key_to_value kam das such schon zur Sprache.
Dort kam als Argument das man so lange Zeilen nicht mehr so einfach bearbeiten kann.
Der Editor (oder die API) sollte aus meiner Sicht dafür sorgen das bei jedem ; ne neue Zeile anfängt, also z.B.

vending=parcel_pickup;parcel_mail_in
zu
vending=parcel_pickup
vending=parcel_mail_in

wird.

Ggf. sollte man dann auch noch ein einheitliches Trennzeichen für subkey und subvalue einführen, z.B. den Doppelpunkt.

level_names=U:basement;G:ground floor;3:roof
level_names:de=U:Untergeschoss;G:Erdgeschoss;3:Dach

anstatt 

level_names:U=basement
level_names:G=ground floor
level_names:3=roof


Oder sollte man doch einfach JSON in den Value stecken?

level_names={"U": "basement", "G": "ground floor", "3": "roof"}


Wie sieht ihr das?
Macht es Überhaupt sinn da ne einigermaßen einheitliche Regel zu erarbeiten?


Danke im voraus,
Andi




Mehr Informationen über die Mailingliste Talk-de