Calcolare la distanza è piuttosto costoso dal punto di vista computazionale, come altri hanno già detto. Anche restituire enormi set di dati non è una buona idea, specialmente considerando che PHP non è eccezionale in termini di prestazioni.
Userei un'euristica, come approssimare la distanza con semplici addizioni e sottrazioni.
Basta cercare nel db gli incidenti all'interno di quell'intervallo (in pratica un quadrato, piuttosto che un cerchio), e poi puoi lavorare su quelli con PHP.
MODIFICA :Ecco un'alternativa; un'approssimazione molto meno costosa dal punto di vista computazionale:
Distanza approssimativa in miglia:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Puoi migliorare la precisione di questo calcolo della distanza approssimativa aggiungendo la funzione matematica del coseno:
Migliorata la distanza approssimativa in miglia:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Fonte:http://www.meridianworlddata.com/Distance-Calculation.asp
MODIFICA 2 :Ho eseguito una serie di test con set di dati generati casualmente.
- La differenza di precisione per i 3 algoritmi è minima, soprattutto a brevi distanze
- L'algoritmo più lento (quello con l'intero gruppo di funzioni trigonometriche) è 4 volte più lento degli altri due.
Sicuramente non ne vale la pena. Basta fare un'approssimazione.
Il codice è qui:http://pastebin.org/424186