Le calcul de la distance est assez coûteux en calcul, comme d'autres l'ont dit. Rendre d'énormes ensembles de données n'est pas non plus une très bonne idée - surtout si l'on considère que PHP n'est pas très performant.
J'utiliserais une heuristique, comme approximer la distance avec de simples additions et soustractions.
Recherchez simplement la base de données avec des incidents dans cette plage (en fait un carré plutôt qu'un cercle), puis vous pouvez travailler sur ceux-ci avec PHP.
MODIFIER :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
MODIFICATION 2 :J'ai effectué un tas de 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, en particulier sur de courtes distances
- L'algorithme le plus lent (celui avec tout le tas de fonctions trigonométriques) est 4x plus lent que les deux autres.
Certainement pas la peine. Allez-y simplement avec une approximation.
Le code est ici :http://pastebin.org/424186