Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Abfragen innerhalb von Längen- und Breitengraden in MySQL

Sie sollten nach der Haversine-Formel suchen, aber ein guter Anfang könnte sein:

Zitieren aus der ersten URL:

Hier ist die SQL-Anweisung, die die 20 nächstgelegenen Orte findet, die sich in einem Umkreis von 25 Meilen um die Koordinate 37, -122 befinden. Es berechnet die Entfernung basierend auf dem Breiten-/Längengrad dieser Zeile und dem Ziel-Breiten-/Längengrad und fragt dann nur nach Zeilen, in denen der Entfernungswert kleiner als 25 ist, ordnet die gesamte Abfrage nach Entfernung und begrenzt sie auf 20 Ergebnisse. Um nach Kilometern statt nach Meilen zu suchen, ersetzen Sie 3959 durch 6371.

SELECT
    id,
    ( 3959
      * acos( cos( radians(37) )
              * cos(  radians( lat )   )
              * cos(  radians( lng ) - radians(-122) )
            + sin( radians(37) )
              * sin( radians( lat ) )
            )
    )
    AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;