Obliczenie odległości jest dość kosztowne obliczeniowo, jak mówili inni. Zwracanie ogromnych zbiorów danych również nie jest zbyt dobrym pomysłem - szczególnie biorąc pod uwagę, że PHP nie jest tak świetne pod względem wydajności.
Użyłbym heurystyki, takiej jak przybliżanie odległości za pomocą prostego dodawania i odejmowania.
Po prostu przeszukaj bazę danych zawierającą incydenty z tego zakresu (w praktyce kwadrat, a nie okrąg), a następnie możesz pracować nad tymi z PHP.
EDYTUJ :Oto alternatywa; przybliżenie, które jest znacznie mniej kosztowne obliczeniowo:
Przybliżona odległość w milach:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Możesz poprawić dokładność tego przybliżonego obliczenia odległości, dodając funkcję matematyczną cosinusa:
Poprawiona przybliżona odległość w milach:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Źródło:http://www.meridianworlddata.com/Distance-Calculation.asp
EDYTUJ 2 :Przeprowadziłem kilka testów z losowo generowanymi zestawami danych.
- Różnica w dokładności 3 algorytmów jest minimalna, szczególnie na krótkich dystansach
- Najwolniejszy algorytm (ten z całą masą funkcji trygonometrycznych) jest 4x wolniejszy niż pozostałe dwa.
Zdecydowanie nie warto. Po prostu idź z przybliżeniem.
Kod jest tutaj:http://pastebin.org/424186