[Talk-de] vom Objekt zum changeset?

Matthias talk-de.osm at m-hoffmann.net
Mo Sep 28 16:49:51 UTC 2009


Hallo,

Tobias Wendorff schrieb:
> Wie gesagt könnte man natürlich ein Script schreiben, was die
> Changesets abarbeitet und Informationen rauswirft.
>   
Ich habe dazu vor einem Monat ein Java-Programm geschrieben, das zu
einem Bereich die Changesets ausgibt, die tatsächlich in diesem Bereich
etwas verändert haben.
>>> Problem ist da natürlich, dass Du teilweise riesige Changesets
>>> bekommst, aber das möchtest Du ja.
>>>       
>> eigentlich nicht.

Über die API bekommt man ja alle Changesets, die mit dem gewählten
Bereich eine Schnittmenge bilden, also auch die, in denen ein Bot etwas
in London und in Kairo geändert hat, aber deinen Bereich unberührt lässt
(Das ist der Großteil!).

Das Programm geht folgendermaßen vor:
1. Es liest von http://www.openstreetmap.org/browse?bbox=[Bereich] alle
Changesetnummern zwischen z.B. der Seite 10 und 38 ein und speichert die
Nummern in einer DB
2. Es holt sich von der API das XML des Changesets, speichert alle darin
enthaltenen Knoten in einer DB und holt sich zu jedem Weg alle Knoten,
die je zu dem Weg dazugehört haben.
3. Es lädt sich die History jedes Knotens und prüft, ob der Knoten in
dem Bereich liegt oder lag.

Vorteil: Es markiert nur die Changesets als relevant, die auch wirklich
etwas in dem Gebiet gemacht haben. D.h. es erkennt auch, wenn Knoten
eines Weges verschoben wurden (innerhalb des Bereichs, aus den Bereich
heraus und in den Bereich hinein)

Nachteil: Laufzeit, Belastung der OSM-Server, Laufzeit, achja, Laufzeit
und Belastung des API-Servers war auch noch dabei.

Das Programm ist mehrere Nächte gelaufen und hat in diesen Nächten so
viele Zugriffe auf Port 80 generiert wie sonst tagsüber vorhanden sind
(laut munin).
Problematisch war insbesondere, dass einige Changesets so groß sind,
dass der Server sehr lange (mindestens 10 Minuten, gefühlte 30)
brauchte, um mir das XML zu liefern.
Entweder habe ich den falschen Ansatz gewählt oder einen groben
Programmierfehler gemacht oder - was ich eher glaube - es gibt im Moment
keine praktikable Lösung.

Viele Grüße,

Matthias




Mehr Informationen über die Mailingliste Talk-de