Jörg Reinholz: Umkreissuche

Beitrag lesen

Das muss man ausprobieren, ob eine näherung mit einer Bounding-Box schneller ist als gleich direkt zu berechnen.

Davon würde ich immer dann ausgehen, wenn die Koordinaten-Spalten in der DB indexiert sind und die Datentabelle mehr als 30 zeilen enthält.

Wenn die Datenbank ordentlich optimiert, dann könnte auch die where-Klausel entsprechend gestaltet werden:

...  
WHERE  
laenge=betwen(minLaenge, maxLaenge)  
AND  
breite=betwen(minBreite, maxBreite)  
AND  
#Maxentfernung# <= ( (6378.388 * ACOS(SIN(#Breite Suchort#) * SIN(`breite`) + COS(#Breite Suchort#) * COS(`breite`) * COS(`laenge` - #Laenge Suchort#)) )  
...

Erst wenn die Länge und Breiten überhaupt in das vorberechnete Viereck passen wird die "etwas" teurere Berechnung durchgeführt - wenn der SQL-Server vernünftig optimiert.

Zur Formel siehe auch http://www.kompf.de/gps/distcalc.html

Jörg Reinholz