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