Изчисляването на разстоянието е доста скъпо изчислително, както казаха други. Връщането на огромни набори от данни също не е много добра идея - особено като се има предвид, че PHP не е толкова страхотен като производителност.
Бих използвал евристика, като приближаване на разстоянието с просто събиране и изваждане.
Просто потърсете в db с инциденти в този диапазон (на практика квадрат, а не кръг) и след това можете да работите върху тези с PHP.
РЕДАКТИРАНЕ :Ето алтернатива; приближение, което е много по-малко изчислително скъпо:
Приблизително разстояние в мили:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Можете да подобрите точността на това приблизително изчисление на разстоянието, като добавите косинусовата математическа функция:
Подобрено приблизително разстояние в мили:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Източник:http://www.meridianworlddata.com/Distance-Calculation.asp
РЕДАКТИРАНЕ 2 :Проведох куп тестове с произволно генерирани набори от данни.
- Разликата в точността за 3-те алгоритма е минимална, особено на къси разстояния
- Най-бавният алгоритъм (този с целия куп триг функции) е 4 пъти по-бавен от другите два.
Определено не си заслужава. Просто използвайте приблизително.
Кодът е тук:http://pastebin.org/424186