Hallo Experten,
Ich möchte aus einer Tabelle mit Städten incl. ihren Koordinaten (Lat und Lon) alle Städte selectieren, die innerhalb eines bestimmten Radius zu den Referenzkoordinaten liegen.
Die Entfernung in km zwischen zwei Städten kann ich wie folgt berechnen:
dx = 111.3 * cos((lat1 + lat2) / 2 * 0.01745) * (lon1 - lon2)
dy = 111.3 * (lat1 - lat2)
distanz = Sqr(dx * dx + dy * dy)
Dabei wird zunächst ein einzelner Datensatz selectiert und mit den Referenzkoordinaten verglichen. Ist die Entfernung innerhalb des festgelegten Radius wird der Datensatz ins Ergebnis aufgenommen.
Problem:
Die Tabelle enthält über 2 Millionen Orte. Es ist unmöglich, alle Orte einzeln zu prüfen und das Script für die Entfernungsberechnung durchlaufen zu lassen.
Lösungsansatz 1:
Ich treffe eine Art Vorauswahl. D.h. ich selectiere zunächst mal alle Orte, die +/- 5 Grad von den Referenzkoordinaten abweichen und ermittle für jeden Treffer die exakte Entfernung.
Nachteil:
- Nach wie vor ein hoher Rechenaufwand, da immer noch viele Orte übrig bleiben nach der Vorauswahl
- Keine Sortierung nach Entferung möglich
Lösungsansatz 2:
Am besten wärs natürlich, wenn man alle Orte im festgelegten Radius mit einem einzigen Query selectieren könnte. Ist es möglich, die oben stehende Formel in einem Query unterzubringen?
Vieleicht gibts ja noch nen anderen Lösungsansatz der mir bisher gar nicht eingefallen ist. Bin für alle Tips und Ratschläge dankbar.
Christian