Calcular la distancia es bastante costoso computacionalmente, como han dicho otros. Devolver grandes conjuntos de datos tampoco es una muy buena idea, especialmente teniendo en cuenta que PHP no tiene un rendimiento tan bueno.
Usaría una heurística, como aproximar la distancia con simples sumas y restas.
Simplemente busque en la base de datos con incidentes dentro de ese rango (efectivamente, un cuadrado, en lugar de un círculo), y luego podrá trabajar en ellos con PHP.
EDITAR :Aquí hay una alternativa; una aproximación que es mucho menos costosa computacionalmente:
Distancia aproximada en millas:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Puede mejorar la precisión de este cálculo de distancia aproximada agregando la función matemática coseno:
Distancia aproximada mejorada en millas:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Fuente:http://www.meridianworlddata.com/Distance-Calculation.asp
EDITAR 2 :realicé un montón de pruebas con conjuntos de datos generados aleatoriamente.
- La diferencia en la precisión de los 3 algoritmos es mínima, especialmente en distancias cortas
- El algoritmo más lento (el que tiene todas las funciones trigonométricas) es 4 veces más lento que los otros dos.
Definitivamente no vale la pena. Solo ve con una aproximación.
El código está aquí:http://pastebin.org/424186