Mysql
 sql >> Base de données >  >> RDS >> Mysql

Interroger MySQL pour les coordonnées de latitude et de longitude qui se trouvent dans un rayon de mile donné

Formule de la loi sphérique des cosinus
(37 et -122 sont la latitude et la longitude de votre centre de rayon)

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
    * cos( radians( long ) - radians(-122) ) + sin( radians(37) ) * sin(radians(lat)) ) ) AS distance 
FROM myTable
HAVING distance < 50
ORDER BY distance 

Fonctionnalités

  • Le plus rapide
  • Précision similaire à la formule Harvesine

Formule Haversine

SELECT id, 3959 * 2 * ASIN(SQRT(POWER(SIN((37 - abs(lat)) * pi()/180 / 2), 2)
       + COS(37 * pi()/180 ) * COS(abs(lat) * pi()/180)
       * POWER(SIN((-122 - long) * pi()/180 / 2), 2) )) as  distance
FROM myTable
HAVING distance < 50
ORDER BY distance

Fonctionnalités

  • Rapide
  • Plus robuste aux erreurs en virgule flottante

Notez que 3959 est le rayon de la Terre en miles . Rayon terrestre en kilomètres (km) :6371

Vous pouvez trouver plus d'informations ici