At beregne afstanden er temmelig beregningsmæssigt dyrt, som andre har sagt. At returnere enorme datasæt er heller ikke en særlig god idé - især i betragtning af at PHP ikke er så stor i ydeevne.
Jeg ville bruge en heuristik, som at tilnærme afstanden med simpel addition og subtraktion.
Bare søg i db'en med hændelser inden for det område (effektivt en firkant i stedet for en cirkel), og så kan du arbejde på dem med PHP.
REDIGER :Her er et alternativ; en tilnærmelse, der er meget billigere beregningsmæssigt:
Omtrentlig afstand i miles:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Du kan forbedre nøjagtigheden af denne omtrentlige afstandsberegning ved at tilføje den matematiske cosinusfunktion:
Forbedret omtrentlig afstand i miles:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Kilde:http://www.meridianworlddata.com/Distance-Calculation.asp
REDIGERING 2 :Jeg kørte en masse tests med tilfældigt genererede datasæt.
- Forskellen i nøjagtighed for de 3 algoritmer er minimal, især på korte afstande
- Den langsomste algoritme (den med hele bunken af trig-funktioner) er 4 gange langsommere end de to andre.
Absolut ikke det værd. Bare gå med en tilnærmelse.
Koden er her:http://pastebin.org/424186