planet.osm aktuell halten

Hallo,

meine DB hält einen Planetfile vom April inne. Nun möchte ich, ohne einen kompletten Import des gesamten Planetfiles zu starten, die Änderungen seit diesem Zeitpunkt einfügen.
Kann ich dazu die auf planet.openstreetmap.org angebotenen changesets nutzen? Wenn ja, wie?

Grüße

so kannst du dein planet-file updaten

ich mache sowas mit osmosis. dauerte aber einige tage, bis ich es kapiert hatte. schau mal ins wiki und meld dich bei unklarheiten. bin nicht @home und kann derzeit nicht nachsehen.

schritt1: java installieren
schritt 2: osmosis installieren und testweise aufs lokales osm-file ansetzen
schritt 3: change-file besorgen
schritt 4: mit osmosis mergen
schritt 5: mit poly-file interessanten bereich rausschneiden, da die diff-files weltweit sind und daher immer mehr “ballast” dazu kommt
.
schritt n: eventuell automatisieren (day/hour/minute)


wenn du aber deine db direkt updaten willst, ohne ein neues osm-file zu erstellen, geht das angeblich auch mit osmosis und den change-files.
den weg bin ich aber noch nicht gegangen (soll tracktype=grade4 sein :wink:

gruss

wambacher

hallo wambacher,

1-3 ist verständlich.

ich habe jetzt z.B. das changefile vom 100505.osm.bz2. Mein Planetfile in der DB ist vom 100428.

Wie kann ich jetzt die Veränderungen einfügen? Ein konkreter aufruf von osmosis mit den benötigten Parametern würde mir sehr helfen.

Zu 5: Poly Files werden nicht benötigt da die ganze Welt interessant ist :wink:

Viele Grüße
p3pp3

dann brauchst du ALLE changefiles ab dem 28.4. macht osmosis aber automatisch, wenn ihm das gesagt wird.

muttu halt warten - oder mal probieren - bringt sowieso mehr

rennt osmosis bei dir schon?

automatisch wird nicht gehen da der osm server keine direkte verbindung zum internet hat. per hand alle files zu beziehen ist ja auch kein problem.

osmosis läuft, schmeißt aber exceptions ala

“Caused by: org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.”

wenn ich versuche ein diff zu erstellen. das diff sollte doch aus dem aktuellen planetfile und den changesets erstellt werden oder?

z.B.

osmosis --read-xml file="changeset-xyz.osm.bz2" --read-xml file="planet-latest.osm.bz2" --derive-change --write-xml-change file="changeset1.osc"

grüße

das diff IST ein change-file. du must merge machen (old.osm + diff/change.osc → new.osm)

btw: es gibt wirklich noch rechner ohne netzanbindung?

ja die soll es noch geben :wink:

ich habe mir mal so ein changeset file angeschaut, da sind information wie

    <changeset id="4640837" created_at="2010-05-08T16:53:37Z" num_changes="330" closed_at="2010-05-08T16:53:57Z" open="false" min_lon="23.0436108" min_lat="53.0657529" max_lon="23.1370541" max_lat="53.1123231"  user="langus" uid="182212">
    <tag k="comment" v="kleosin" />
    <tag k="created_by" v="Langus" />
  </changeset>

enthalten, was doch keinerlei neue informationen sind, sonder lediglich eine beschreibung irgendwelcher änderungen (aber nichtmal neue bzw editierte werte).
darum dachte ich das die changesets sich auf den neueren planetfile beziehen und er die neuen informationen aus diesem dann bezieht.

wäre es nicht auch sinnvoller einen diff file zwischen dem aktuellen planetfile und dem planetfile welcher in der db gespeichert wurde, zu bilden und diesen dann in die datenbank einzuspielen?

hi,

ich hab gleich am anfang darauf hingewiesen, dass du einen etwas anderen weg gehen musst, wenn du direkt die datenbank abgleichen willst.
alle meine aussagen betreffen den update des osm-files.

und so mach ich das:

/opt/programme/osmosis-latest/bin/osmosis
–read-xml-change file=“change.osc”
–simc
–read-xml file=“…/$STADT/$STADT.osm”
–apply-change
–bounding-polygon file=“…/$STADT.poly”
–write-xml file=“new.osm”

ersetze “…$STADT…” z.b. durch …dortmund… und das ist dann ein teil meiner auswertung für dortmund.

lass die poly-zeile weg und damit ist deine ursprüngliche frage beantwortet.

ACHTUNG: die reihenfolge der osmosis-optionen ist äußerst kritisch - nur so geht es!
gruss

wambacher

p.s. den direkten db-update halte ich auch für sinnvoll - wenn ich in 2-3 monaten damit durch bin, melde ich mich wieder :wink:

wambacher

nachschlag:

hab ich bei der heutigen hitze übersehen:

du brauchts die files aus den daily, hour-replicate oder minute-replicate -verzeichnissen; ja nach dem, wie aktuell die daten sein sollen.

und die sehen etwa so aus:

<?xml version='1.0' encoding='UTF-8'?> ....

da sind alle aenderungen drin.

gilt für beide verfahren: osm+osc->osm und db+osc->db

hab erstmal vielen dank.

ich ziehe mir jetzt per Hand die Daily Diffs über planet.openstreetmap.org (im History Ordner sind zum Glück alle vorhanden).
Problematisch ist das osmosis bei read-xml nen Fehler schmeißt (s.o.) und ich eigentlich weniger Lust habe 2 planet Files zu entpacken :wink:

die Daily Diffs kann ich doch dann auch direkt per osm2pgsql --append --slim update.osc.gz einladen, oder?

Hallo Leute,

ich wäre auch an dieser dif-Variante interessiert und hoffe, dass ihr nichts dagegen habt, wenn ich mich auch noch mit meinem Problem hier rein zwänge.
Wie schon geschrieben wurde, ist es immerhin ein riesiger Unterschied, ob man “europe.osm.bz2” mit 4GB oder lediglich die nahezu wöchentlichen changesets mit nur ca. 170MB von hier herunterlädt.

Nun wollte ich die Datei “changesets-100707.osm.bz2” mit osmosis auf den gleichen Bereich zuschneiden, wie ich es schon zuvor mit der “europe.osm.bz2” getan habe, um anschließend beides zusammenzufügen (merge). Leider hagelt es bereits beim Zuschneiden Fehlermeldungen oder es kommt lediglich eine 1kb große Datei heraus. Das Zuschneiden der “europe.osm.bz2” klappt wunderbar. Warum geht dies nicht mit der changeset-Datei, oder muss man erst “mergen” und dann wieder zuschneiden? Für einen Tipp wäre ich sehr dankbar.

Hier noch ein paar Hintergrundinfo’s zu meiner Vorgehensweise:
Prinzipiell benötige ich den Kartenausschnitt für GpsMid und ging bislang so vor. Nur die Punkte 1-5 sind dort für diese Frage wohl eventuell von Belang.

Verwende ich den folgenden Befehl zum Ausschneiden, dann erhalte ich nach 43172 Millisekunden eine 1kb große Datei namens “changesets-100707_Ausschnitt.osm”:
osmosis --rx file=D:\changesets-100707.osm --tee 1 --bounding-box top=“50.00” bottom=“49.00” left=“9.00” right=“12.00”
–wx file=D:\changesets-100707_Ausschnitt.osm

oder:
osmosis --fast-read-xml-0.6 file=D:\changesets-100707.osm --tee 1 --bounding-box top=“50.00” bottom=“49.00” left=“9.00” right=“12.00”
–write-xml file=D:\changesets-100707_Ausschnitt.osm

Dies wiederum veranlaßt Osmosis tausendmal die folgende Fehlermeldung auszugeben:
org.openstreetmap.osmosis.core.xml.v0_6.impl.FastXmlParser readUnknownElement
WARNUNG: Unknown xml element changeset. publicId=(null), systemId=(null), lineNumber=10416, columnNumber=234

Wenn man mehrere Monate per diff aufholen muss, ist man wahrscheinlich besser dran einfach ein komplett neuen planet zu importieren, denn ein komplett import ist meist deutlich effektiver, so das sich der diff import irgendwann nicht mehr lohnt. Genau wo dieser Punkt liegt haengt von den verwendeten tools (z.B. osmosis vs osm2pgsql) und hardware ab, aber bei Monaten auf zu holen ist es auf jedenfall eine Ueberlegung wert.

genau das problem hatte ich auch mal: ich wollte erst das changefile, das ja immer worldwide ist, zurechtschneiden und DANACH mit dortmund mergen. erschien mir sinnvoll, da es ja schneller sein sollte,

geht aber nicht.

schau dir mein beispiel von oben nochmal an; so geht es.

gruss

wambacher

hast schon recht, ist halt ne frage des zeitaufwandes.

es gibt aber einen osmosis-option, wo er dann alles automatisch macht (change file holen, mergen, naechstes osc …) ist aber halt nur “seine” arbeit. das hat den vorteil, dass es kein problem gibt, wenn man mal ein osc-file verpasst hat. geht dann alles automatisch.

mein obiges beispiel macht das aber gerade nicht, da ich für zeitabhängige auswertungen lokale kopien der osc-files brauche

wambacher

@amm:Vermutlich liegt ein Mißverständnis vor, der Link sollte lediglich aufzeigen, für was ich die changesets brauche und sollte nicht heißen, dass ich eine Karte aus dem Jahre 2009 per diff aktualisieren wollte. Vielleicht habe ich mich etwas unklar ausgedrückt.

@wambacher: Danke, mit Deiner Befehlszeile funktionierts. Wer lesen kann ist klar im Vorteil. :wink:
osmosis.jar --read-xml-change file=D:\20100709-20100710.osc --simc --read-xml file=D:\Karte.osm --apply-change --bounding-box top=“50.00” bottom=“49.00” left=“9.00” right=“12.00” --write-xml file=D:\Karte_neu.osm
Außerdem, hatte ich scheinbar die falsche Datei heruntergeladen, denn mit der Datei “changesets-100707.osm.bz2” kann Osmosis nichts anfangen. Es sind OSC-Dateien erforderlich. Und wie Kollege wambacher schon sagte, scheint es von OSC-Dateien keine wöchentlichen Updates zu geben (max. täglich).

Noch eine Frage:
Meine “europe.osm.bz2” von der geofabrik ist vom “09.07.2010 07:52”. Mit welchem täglichen diff von hier würdet ihr jetzt beginnen aufzuholen? Ist es z.B. schlimm, wenn man ein changeset zu früh und damit doppelt einspielt? Sind dann die Wege doppelt drin oder erkennt Osmosis, dass dieses changeset bereits enthalten ist?

für was werden denn dann die wöchentlichen changesets überhaupt benötigt?!? bin jetzt etwas verwirrt :wink:

ich hab damit keine negativen erfahrungen gemacht; irgendwie kriegt er das hin.

Die Frage kann ich auch nicht richtig beantworten, hier ein Versuch:
Ich nehme an, dass es sich bei diesen Dateien um alle changeset’s handelt, welche in dieser Zeitspanne (Woche) von den OSM-Mappern erzeugt wurden. Deins hier ist z.B. auch mit drin. Diese Datei ist wohl OSM-spezifisch und könnte vermutlich direkt in JOSM verwendet werden, zu welchem Grund auch immer. Daher dachte ich auch, dass ein einfaches “mergen” mit Osmosis möglich sei. Die OSC-Datei wiederum ist vermutlich von Osmosis für Osmosis erzeugt worden. Dies erkennt man auch an den unterschiedlichen Dateiköpfen.

OMC:

<?xml version='1.0' encoding='UTF-8'?>
<osmChange version="0.6" generator="Osmosis 0.35">
  <delete>...

changeset-Datei:


<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="OpenStreetMap planet.c" timestamp="2010-07-07T23:45:31Z">
  <bound box="-90,-180,90,180" origin="http://www.openstreetmap.org/api/0.6" />
  <changeset id="1" created_at="2005-04-09T19:54:13Z" num_changes="2" closed_at="2005-04-09T20:54:39Z" open="false" min_lon="-0.1465242" min_lat="51.5288506" max_lon="-0.1464925" max_lat="51.5288620" />
...

Was spricht eigentlich für oder gegen die Verwendung des Osmosis-Schalters von –simplify-change (–simc)?
Ich habe mal mit beiden Schaltern ein dif in meine Karte integriert und keine Veränderung der Dateigröße festgestellt. Ich dachte der Schalter vereinfacht die Historie der einzelnen nodes/ways/realtions und daraus resultiert eine kleinere Dateigröße, aber scheinbar verstehe ich die Funktion des Schalters nicht richtig. Ich würde mich freuen, wenn mich diesbezüglich jemand erleuchten könnte. Danke.

Ich glaube hier liegt moeglicherweise ein missverstaendniss bezueglich der Namengebung vor. Die “changeset” dateien im root Verzeichniss von planet.openstreetmap.org sind keine diff files. Sie enthalten also nicht die noetigen Daten um eine DB oder einen plate file aktuell zu halten. Um genau zu sein, sie enthalten ueberhaupt keine “OSM daten” sondern nur die Metadaten der changesets. Das heist den changeset Kommentar und die created_by information der changesets. Diese sind also als ergaenzung zum planet.osm gedacht wenn man diese meta daten auswerten will (was in den allermeisten faellen nicht der fall ist).
Es gibt glaube ich keine woechentlichen diffs mehr, und man muss sich diese selbst aus den daily diffs erzeugen, oder eben die daily direct verwenden.