[OSM-Devserver] OdBL Auswertung, Take-One

Peter Körner osm-lists at mazdermind.de
Di Okt 26 14:51:55 CEST 2010


Am 26.10.2010 14:06, schrieb Frederik Ramm:
> Damit nimmst Du einen betraechtlichen Teil der Arbeit vorweg, die Jakob
> Altenstein in seiner Bachelor-Arbeit machen soll. Aber mal sehen,
> vielleicht kommt ihr ja zu unterschiedlichen Ergebnissen - in einer so
> wichtigen Frage kann etwas Redundanz ja nicht schaden ;)
Das war auch eine Befürchtung meinerseits. Leider hat er sich bei mir 
noch nicht gemeldet, sonst hätte ich mit ihm Abgesprochen bevor ich 
diese Informationen veröffentlicht hätte.

Ich habe mein Ziel eigentlich auch schon erreicht, daher folgender 
Kompromiss: Ich kümmer mich mal um die anderen Hundertmillionen Aufgaben 
und lass Jakob mal machen -- mein Source steht ja offen.

> Eine Sache, die er auch machen soll/wird, ist eine Abschaetzung,
> inwiefern eine Aenderung eine Schoepfungshoehe hat - z.B. 1000x
> created_by loeschen hat keine.
Da ich mir eine solche Abschätzung nicht zutraue (weder in persona noch 
via Code), würde ich eine andere Vorgehensweise vorschlagen, die ich in 
der README auch schon umrissen habe: Ein Replay der Änderungen.

Beispiel:

<node id="100" version="1" uid="1111">
    <tag k="highway" v="road" />
    <tag k="name" v="my first road" />
</node>
<node id="100" version="2" uid="2222">
    <tag k="highway" v="residential" />
</node>
<node id="100" version="1" uid="3333">
    <tag k="name" v="Peter's Street" />
</node>

Wenn Nutzer 1111 und 333 zustimmen, 2222 aber nicht, dann könnte ein 
Programm mit folgendem Algorithmus den Zustand der Node ermitteln wie er 
wäre, wenn 2222 nicht mit gewirkt hätte:

1. Neue Tag-Liste zurücksetzen
2. Version lesen
4. wenn Version NICHT von einem OdBL-Zustimmer ist, gehe zu 2.
3. Tags der Version mit den Tags der Vorgängerversion vergleichen (mit
    Leerer Liste wenn Version = 1)
4. Tags die sich von der Vorgängerversion unterscheiden auf die neue
    Tag-Liste anwenden
5. Wenn eine weitere Version vorhanden ist, zu 2. gehen

Im obigen Beispiel würden (unter ignorieren von Benutzer 2222) folgende 
Tags raus kommen:
    <tag k="highway" v="road" />
    <tag k="name" v="Peter's Street" />

Wenn der nicht zustimmende Benutzer also, um bei deinem Beispiel zu 
bleiben, nur created_by-Tags entfernt hat, dann wären die nach dem 
entfernen seiner Änderungen halt wieder drin, sonst hätte sich aber 
nichts geändert.

> Was Dein Tool idealerweise machen sollte, ist, am Ende ein .osc
> ausgeben, das ein Objekt in einen ODbL-Cleanen Zustand versetzt ;)
Oder einen ODbL-Cleanen Planer. Oder einen ODbL-Cleanen 
Full-Experimental-Dump einer der kompletten Historie, so als hätte es 
die Benutzer nie gegeben. All das ist möglich.

Lg