Vous pouvez utiliser le geospatial extensions for MySQL ou
La formule ci-dessous se trouve la distance en milles marins entre deux points.
3600 * ACOS (sin (latitude2_rads) * sin (latitude1_rads) + cos (latitude2_rads) * cos (latitude1_rads) * cos (longitude1_rads - longitude2_rads))
Vous pouvez connecter cela en une sélection comme suit (ci-après -7 est la latitude nécessaire et -14 est le nécessaire LON)
Si l'on suppose que les champs de latitude/longitude sont en degrés:
select * FROM NDB as c1
order by acos(sin(radians(-7))
* sin(radians(latitude)) + cos(radians(-7))
* cos(radians(latitude))
* cos(radians(longitude) - radians(-14)))
limit 0,1
Cela ne peut pas être très efficace avec de grands ensembles de données, je l'ai juste couru contre une table avec 22 706 enregistrements et il a fallu 0,163 secondes.
Si la performance est un problème, il peut être préférable de pré-calculer la distance de tous les points à partir d'une donnée fixe, puis de l'utiliser au lieu de le calculer dans le SQL.
Les résultats de la recherche de géo inversée ne peuvent pas être enregistrés dans la base de données conformément à l'accord Google Maps. C'est pourquoi je préfère une autre solution. – NNN