Probleme mit Changefiles der Geofabrik

Sorry, war bei einem Kunden. Hier die Auswertung. Ich empfinde das als Fehler:


# Changefiles runterladen
# Geofabrik 142.osc.gz hat die Daten vom 2016-04-28 (plus ein paar Zeiteinheiten)
# Geofabrik 146.osc.gz hat die Daten vom 2016-05-03 (plus ein paar Zeiteinheiten)
wget http://download.geofabrik.de/europe-updates/000/001/14{2..6}.osc.gz
mkdir europe && mv *.osc.gz upd_europe/

# Planet 325 hat die Daten von 2016-04-28 (plus ein paar Zeiteinheiten)
# Planet 329 hat die Daten von 2016-05-03 (plus ein paar Zeiteinheiten)
wget http://planet.openstreetmap.org/replication/day/000/001/32{5..9}.osc.gz
mkdir planet && mv *.osc.gz upd_planet/

# Analyse am Beispiel von Weg 414256828
zgrep 414256828 upd_europe/143.osc.gz
zgrep 414256828 upd_europe/146.osc.gz
zgrep 414256828 upd_planet/325.osc.gz
zgrep 414256828 upd_planet/329.osc.gz

# Ergebnis (von oben nach unten) als CSV
osm_id;timestamp;version;filename
414256828;2016-04-28T20:44:16Z;1;europe/143.osc.gz
414256828;2016-05-03T00:18:16Z;1;europe/146.osc.gz
414256828;2016-04-28T20:44:16Z;1;planet/325.osc.gz
414256828;2016-05-02T08:11:34Z;2;planet/329.osc.gz

Wie deutlich wird, weichen die Timestamps extrem ab - und dabei handelt es sich um die Rohdaten. Ich habe das noch nicht mit einem Tool bearbeitet.

Offenbar schreibt Osmosis, wenn man zum Zeitpunkt X ein Diff aus A und B erzeugt, und etwas in A drin war, was in B nicht mehr drin ist, den Zeitpunkt X in das Objekt statt dem Originalzeitpunkt.

Also ich muss ich da ein bisschen stur stellen. Da sehr viele Leute völlig unproblematisch die Geofabrik-Diffs einsetzen, scheinen es nur Nischen-Anwendungsfälle zu sein, die hier ein Problem haben. Ich setze derzeit Osmosis “von der Stange” ein, um diese Diffs zu erzeugen. Es gibt keine “eindeutig richtige” Lösung, was Osmosis ins Changefile schreiben soll, wenn es feststellt, dass ein Objekt gelöscht wurde. Ich sehe nicht, was ich ändern sollte, und wenn ich es sähe, hätte ich nicht das Programm dazu, um es zu machen. Nur sehr ungern würde ich ein gepatchtes Osmosis einsetzen, das andere Resultate erzeugt, als sie jemand bei sich reproduzieren könnte. Die beste Lösung wäre, ein Original-Tagesdiff von OSM zu nehmen und dieses nach Ländern und Regionen aufzudröseln. Das ist aber aus verschiedenen Gründen eine teure Operation. Augmented Diffs von Overpass wären eine Alternative. Aber es fehlt mir die Zeit, hier zu forschen, was man am besten machen sollte, besonders, wenn es nur für einen Nischen-Anwendungsfall ist.

Also, langer Rede kurzer Sinn, wem das nicht passt, der soll sich dafür einsetzen, dass Osmosis geeignet geändert wird, dann installiere ich bei mir auch gern eine neue Osmosis-Version. In der Zwischenzeit sollte ich vielleicht einfach die Dokumentation zu den Diffs dahingehend verbessern, dass dieses Problem klar erklärt wird.

Bye
Frederik

Wer zwingt dich denn osmosis zu verwenden? Im Vergleich zu allen anderen Lösungen “auf dem Markt” ist osmosis mit Abstand die langsamste Variante.

Nochmal kurz: Ich mache dir keinen Vorwurf, wollte nur den Leuten helfen, die ähnliche Probleme wie ich haben. Mag sein, das Verfolgen von Änderungen eine Nischenanwendung ist, aber OpenStreetMap ist mehr als eine Karte, die man aus osm2pgsql-Daten rechnet.

Mein Tool hat übrigens über 300 Abweichungen in den oben genannten Changefiles gefunden. Ein tolles Beispiel, welches auch auf osm2pgsql Einfluss hat, ist z.B. Way 6525983. Das ist aber augenscheinlich ein osmium-Problem, was in Verbindung mit den Geofabrik-Daten auftritt (da hier die Version nicht erhöht wird).

Mit den Dateien von oben...
# Arrays erstellen (numerisch sortiert)
files_europe=(upd_europe/14{2..6}.osc.gz)
files_planet=(upd_planet/32{5..9}.osc.gz)

# Merge mit osmium v1.3.0 (57715b1)
osmium merge-changes --simplify --output=osmium_europe.osc "${files_europe[@]}"
osmium merge-changes --simplify --output=osmium_planet.osc "${files_planet[@]}"

# Merge mit osmconvert v0.8.5
osmconvert --merge-versions -o=osmconvert_europe.osc "${files_europe[@]}"
osmconvert --merge-versions -o=osmconvert_planet.osc "${files_planet[@]}"

# Analyse der Dateien anhand von Weg 6525983
grep 'way id="6525983"' -B1000 osmium_europe.osc | grep -E 'delete|modify|create' | tail -n 1 # Ergebnis: <modify>
grep 'way id="6525983"' -B1000 osmium_planet.osc | grep -E 'delete|modify|create' | tail -n 1 # Ergebnis: <delete>
grep 'way id="6525983"' -B1000 osmconvert_europe.osc | grep -E 'delete|modify|create' | tail -n 1 # Ergebnis: <delete>
grep 'way id="6525983"' -B1000 osmconvert_planet.osc | grep -E 'delete|modify|create' | tail -n 1 # Ergebnis: <delete>

Jochen hat inzwischen osmium überarbeitet. Ich prüfe die Ergebnisse gleich nochmal mit der neuen Version.
Edit: Das Problem mit den Versionen wurde behoben (in diesem Post genannter Fehler). Die falschen Timestamps bleiben vorhanden, sind aber für das Rendering egal.

Danke an alle Beteiligten.