Mailingliste OpenGeoDB <opengeodb-r1mDYR0DdAyzQB+pC5nmwQ@xxxxxxxxxxxxxxxx>
schrieb am 03.11.03 10:49:05:
> Interessant ist natürlich, wieviel Zeit die Abfrage kostet, immerhin muss für
> die Sortierung der ganze Datenbestand relativ aufwendig (Interpretation einer
> komplexen Formel) berechnet werden.
> Wahrscheinlich ist eine Eingrenzung der Daten auf ein Rechteck sinnvoll
> Bsp: where breite >= b1 and breite <= b2 and laenge >= l1 and laenge <= l2
Hallo Leute
Bin hier neu und will mich erstmal ganz kurz vorstellen. Mein Name ist Patrick
Assion, ich arbeite als Programmierer bei einer Medienfirma, habe mal einen PPL
Beiblatt C (Segelflugschein) gemacht und beschäftige mich seit ca. 1 Jahr mit
dem Thema Koordinaten. Eine genauere Vorstellung folgt später, wenn ich etwas
mehr Zeit habe.
Ich für meinen Fall habe obiges Problem sehr ähnlich gelöst. In der Datenbank
speichere ich nicht nur die "echten" Koordinatenpaare, sondern auch gleich die
PHI- und LAMBDA-Werte (Bogenmaße) in zwei indizierten Feldern.
Beim Ermitteln der - sagen wir mal - 20 nächstgelegenen Orte suche ich alle
Datensätze mit PHI +/- 0.002 und LAMBDA +/- 0.003 (entspricht in Deutschland
einer Entfernung von ca. 12 km in O-, W-, N- und S-Richtung). Sollten damit
nicht mindestens 40 Orte gefunden werden, erweitere ich die den Bereich
schrittweise. 40 Orte deswegen, da ich sonst u.u. über die Diagonale Orte
angezeigt bekäme, die weiter entfernt sind (Faktor 1.4) als Orte in der
Horizontalen/Vertikalen, die dummerweise gerade außerhalb meines Bereiches
liegen, aber näher dran wären.
Aus den so erhaltenen Orten berechne ich in PHP (nicht durch die DB) anhand der
Großkreisnavigation die exakten Entfernungnen (jaja, ich weiß, das ist nicht
wirklich exakt, da die Erde bekanntlich keine Kugel sonden ein Geoid ist),
werfe dann die Daten in Arrays, sortiere diese via multisort, et voila...
Diese Lösung ist so schnell, dass sogar mein altes P166- Laptop mit 32MB und
WIMP-Konfiguration, die Ergebnisse innerhalb von 2-3 Sekunden rauswirft.
Gruß Patrick
|