[Talk-de] Relation runterladen?
Peter Körner
osm-lists at mazdermind.de
Do Okt 7 12:49:26 UTC 2010
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
Mehr Informationen über die Mailingliste Talk-de