Hallo,

> > will), oder die Datei für jeden Weg immer und immer wieder nach allen
> > Nodes durchsuchen (so dass dann die Plattengeschwindigkeit zum
> > Flaschenhals wird).
> >
> > Soweit meine bisherigen "Forschungsergebnisse".
> 
> Ohne gscheite und wohlüberlegte Datenstruktur wird das nix wie Du grad
> merkst. Ergo: Du brauchst eine Datenbank und sinnvoll aufgebaute
> Suchbäume.

Naja, also mal immer langsam mit den jungen Pferden! Ich mache sowas
doch staendig und benutze dazu nur das Planet File, keine Datenbank.

Wir haben derzeit ziemlich genau 40 Millionen Nodes; die hoechste
verwendete Node-Id ist ungefaehr 60 Millionen. Etwa gleichviele
Segmente, und etwa ein Zehntel dieser Zahl an Ways.

Die Standard-Vorgehensweise fuer einen einfachen Polygon-Ausschnitt
kommt mit einem einzigen Pass durch das Planet-File aus (weil es
nodes/segments/ways sortiert ist)

Schritt 1 - Planet-File einlesen und alle Nodes flaggen und ausgeben,
die im Polygon liegen. Speicherplatzbedarf derzeit 60 Millionen Bits =
unter 10 MB.

Schritt 2 - Planet-File weiter einlesen, nun alle Segmente flaggen und
ausgeben, von denen ein Node geflaggt ist. Speicherbedarf nochmal
gleichviel.

Schritt 3 - Planet-File weiter einlesen, alle Ways ausgeben, von denen
mindestens ein Segment geflaggt ist. Kein zusaetzlicher
Speicherbedarf, da die Ways nicht gemerkt werden muessen.

Mit unter 20 MB RAM (in einer Programmiersprache, die Bitfelder
unterstuetzt, wohlgemerkt!) kommt man also durch das heutige Planet
File, und wenn man, was heute ja normal ist, 1 GB RAM zur Verfuegung
hat, geht das auch noch nach dem TIGER-Import gut.

Wenn man den Anspruch "referenzielle Integritaet" hat, wenn man also
auch noch die Segmente und Nodes ausgeben will, die von den Ways
zusaetzlich gebraucht werden, obwohl sie nicht urspruenglich
selektiert waren, muss man sich waehrend Schritt 3 eine weitere
Segmentliste aufbauen, dann diese Segmente noch rausholen
(idealerweise mit einem "seek" an die vorher in Schritt 2 gemerkte
Position) und danach das gleiche nochmal fuer Nodes machen - das
verdoppelt den Speicherbedarf auf 40 MB und verdoppelt die
Programmlaufzeit. 

Aber das ist alles nichts im Vergleich zu der Zeit, die es kostet, das
Planetfile in eine Datenbank einzulesen und gescheit zu indizieren.
Das mit der Datenbank lohnt sich dann, wenn man sehr viele Exzerpte
machen will; will man (wie ich regelmaessig) z.B. nur Deutschland
extrahieren, dann geht es viel schneller, mit der o.g. Methode einmal
durch das Planet-File durchzurennen.

Bye
Frederik

-- 
Frederik Ramm  ##  eMail [EMAIL PROTECTED]  ##  N49°00.09' E008°23.33'


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

Antwort per Email an