Le calcul de la distance à l'aide de cette fonction est assez coûteux en calcul, car il implique tout un tas de fonctions transcendantales. Cela va être problématique lorsque vous avez un grand nombre de lignes à filtrer.
Voici une alternative, une approximation beaucoup moins coûteuse en calcul :
Distance approximative en miles :
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Vous pouvez améliorer la précision de ce calcul de distance approximative en ajoutant la fonction mathématique cosinus :
Amélioration de la distance approximative en miles :
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Source :http://www.meridianworlddata.com/Distance-Calculation.asp
J'ai effectué plusieurs tests avec des ensembles de données générés aléatoirement.
- La différence de précision pour les 3 algorithmes est minime , surtout sur de courtes distances
- L'algorithme le plus lent est, bien sûr, celui avec les fonctions trigonométriques (celui sur votre question). Il est 4 fois plus lent que les deux autres.
Certainement pas la peine. Allez juste avec une approximation.
Le code est ici :http://pastebin.org/424186
Pour l'utiliser sur MySQL, créez une procédure stockée qui prend des arguments de coordonnées et renvoie la distance, alors vous pouvez faire quelque chose comme :
SELECT columns
FROM table
WHERE DISTANCE(col_x, col_y, target_x, target_y) < 25