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

_______________________________________________
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-de

Antwort per Email an