[Talk-de] Relation runterladen?

Werner Hoch werner.ho at gmx.de
Mi Okt 6 16:50:18 UTC 2010


Hallo Rainer,

On Mittwoch, 6. Oktober 2010, Rainer Kluge wrote:
> Am 05.10.2010 19:16, schrieb Carsten Gerlach:
> > Lässt sich das so erweitern, daß man als Quelle eine lokale
> > osm-Datei (z.B. germany.osm) verwenden kann, aus der die Relation
> > extrahiert wird?
> 
> Das wäre machbar aber äußerst ineffizient. Die osm-Dateien sind reine
> Textdateien im XML-Format. Will man die Wege und Knoten einer
> Relation aus einer solchen Datei auslesen, dann muss man die
> komplette Datei lesen.

Nein. Geht man davon aus, dass die Objekte in der osm-Datei sortiert 
sind, dann kann man per binärer Suche die richtigen Objekte raussuchen.
 
> Ein XML-Parser, den ich für die sauberste Lösung halte, stößt da
> schon bei Bundesland-Dateien an Speichergrenzen, von der Rechenzeit
> ganz zu schweigen. Dieses Verfahren habe ich probeweise
> implementiert, und es funktioniert bei kleinen osm-Dateien für ein
> Gebiet mit etwa 20x20 km Seitenlänge gut. Aber schon bei der
> baden-wuerttemberg.osm.bz2 bekomme ich einen out-of-memory-Fehler.

Das ist nur der Fall wenn du versuchst ein ganzes XML-File im Speicher 
zu halten. Mit einem Streaming-Parser muss man nur die nötigsten Infos 
im Speicher halten.
 
> Als Alternative könnten die Daten mit dem Perl-Modul OSM::osm
> ausgelesen werden. Da die Knoten, Wege und Relationen in dieser
> Reihenfolge in der osm-Datei liegen, müsste die Datei dreimal
> durgegangen werden, einmal, um die Relation(en) zu finden, dann die
> zugehörigen Wege und zuletzt die zugehörigen Knoten. Das wäre wohl
> speichermäßig unproblematisch aber ebenfalls sehr zeitaufwendig.
> Ausserdem müsste ich die gesamte Programmlogik ändern.

Hier wäre wie vorher beschrieben ein Programm toll, das einen Stream in 
umgekehrter Reihenfolge erzeugt (Relationen, Ways, Nodes).

Grüße
Werner




Mehr Informationen über die Mailingliste Talk-de