Am 07.10.2010 13:28, schrieb Rainer Kluge:
Hallo Werner,

Am 06.10.2010 18:50, schrieb Werner Hoch:
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.

Das funktioniert leider nicht bei bz2-komprimierten osm-Dateien.
Doch das geht schon, ich hab sogar mal einen Algorithmus hier auf der Liste gesehen. bz2 ist Blockweise strukturiert. Man kann ungefähr so vorgehen:

1. setze $anfang = 0 and $ende länge der Datei

2. fseek zur mitte zwischen $anfang und $ende
3. lesen bis zum nächsten block-header
4. lesen & entpacken des nächsten blocks
5. gucken ob <node, <way oder <rel vorkommt, abhängig davon weiß man
   in welchem Bereich der Datei man gelandet ist. Wenn man z.B. einen
   <way tag sieht aber eine node sucht, muss man weiter nach vorne. Hat
   man schon den richtigen Entitäten-Typ gefunden, muss man noch nach
   der ID schauen
6a. wenn man weiter nach vorne will setzt man $ende = $mitte
6b. wenn man weiter nach hinten will setzt man $anfang = $mitte
7. springe zu 2.

Lg

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

Antwort per Email an