osm2pgsql: Relationen ausserhalb des importierten Ausschnitts

Nabend zusammen,

ich aktualisiere eine Datenbank mit osm2pgsql mit einer kleinen bounding box aus den hourly-diffs. Dabei sammelt sich eine ganze Menge Daten an, dte ausserhalb dieses Ausschnitts liegen. Vor allem werden alle Relationen des ganzen Planeten mit importiert, obwohl sämtliche Elemente dieser Relation ausserhalb liegen und nicht in die DB kommen.

Als ich das mal eingerichtet habe, habe ich irgendwo gelesen, das müsste so sein. Ich hoffe aber, mein Wissensstand ist veraltet…

Stimmt das noch? Oder gibt es inzwischen einfach einen Schalter, der diese Relationen beim Importieren beseitigt. Derzeit importiere ich mit

osmosis --read-replication-interval --simplify-change --write-xml-change ...
...
osm2pgsql --bbox 9.9,47.0,14.0,49.1 --append --slim ...

Falls es kein Mittel dagegen gibt, räumt jemand von Euch seine Daten nachträglich auf und hat ein halbwegs performantes Rezept dafür? Ich putze gelegentlich mit “lösche alle Relationen, die keine Nodes oder Ways in meiner DB als Mitglied haben”, aber das ist kein sehr effektives Verfahren.

viele Grüße, Max

Ich selbst importiere nur gelegentlich komplett neu, aber es gab neulich eine Diskussion auf der talk ML und danach scheint das Problem immer noch zu bestehen. Hab jetzt nicht alles gelesen, aber folgende Vorschläge nochmal rausgesucht:

Vorschlag 1: Regionale Diffs (Europa) - ist recht neu, reduziert das Problem aber nur etwas
Vorschlag 2: regelmäßig per SQL löschen - machst Du ja wohl schon

Eine Lösung könnten die Augmented Diffs sein, die enthalten auch alle referenzierten Objekte, damit würde ein BBox-Filter funktionieren. Zur Unterstützung in Tools hab ich bisher nur von osmconvert gelesen, das kann wohl Augmented Diffs lesen und in ein normales osc konvertieren. Wenn dabei das Clipping funktionieren würde, wäre das doch schon mal was. Nachteil ist, dass es die Diffs momentan nur minütlich gibt und die Dateien deutlich größer sind als die normalen.

Gruß,
Norbert

Danke. Jetzt weiss ich auch wieder, warum es so sein muss: Nur Nodes tragen Koordinaten. Im diff stehen auch Änderungen an Ways und Relationen. Wo diese Dinge liegen weiss man aber erst, wenn man das diff eingespielt und die Knoten dazu hat (oder eben nicht, das sind dann die Kandidaten zum anschliessenden wegwerfen).

Mal die augmented diffs beobachten und bis dahin gibts weiterhin 2x die Woche ein paar Stunden fürs Kehren und Staubsaugen in der Datenbank.

Grüße, Max

Hallo maxbe,

ich hatte vor langer Zeit ein ähnliches Problem und hab es anders gelöst: Ich halte mir ein eigenes Planetfile (gesamter Planet) aktuell und extrahiere daraus regelmäßig eine regionale Datei. Anschließend vergleiche ich die neue regionale Datei mit der vorherigen regionalen Datei und erhalte als Differenz eine .osc-Datei (in meinem Fall .o5c, weils schneller geht). Diese Differenz-Datei kann ich dann verwenden, um eine Datenbank upzudaten. “Datenmüll” außerhalb der Grenzen gibt es dann keinen.

Leider hab ich keine schematische Übersicht da, aber bei der openptmap läuft es ähnlich. Zwar filtere ich da nicht Regionen, sondern nur bestimmte Informationen (nämlich ÖV-Daten) aus dem Planet, aber das Prinzip ist dasselbe:
https://wiki.openstreetmap.org/wiki/Openptmap/Installation#Schematic_Diagram

Ein bisschen dazu steht auch hier im Blog:
http://blog.openstreetmap.de/2011/09/ov-layer-karte-openptmap-org/

Es gibt auch die Möglichkeit, die Augmented Diffs gleich auf dem Server vorzufiltern, z.B.
http://overpass-api.de/api/augmented_diff?id=70000&bbox=6.0,48.0,15.0,55.0
Das reduziert dann die Datenmenge bereits vor dem Herunterladen. Achtung: Die Reihenfolge in der Bounding Box ist Lon-Lat.