Att beräkna avståndet är ganska beräkningsmässigt dyrt, som andra har sagt. Att returnera stora datamängder är inte heller en bra idé - speciellt med tanke på att PHP inte är så bra i prestanda.
Jag skulle använda en heuristik, som att approximera avståndet med enkel addition och subtraktion.
Sök bara i db med incidenter inom det intervallet (i själva verket en kvadrat, snarare än en cirkel), och sedan kan du arbeta med dem med PHP.
REDIGERA :Här är ett alternativ; en uppskattning som är mycket billigare beräkningsmässigt:
Ungefärligt avstånd i miles:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
Du kan förbättra noggrannheten i den här ungefärliga avståndsberäkningen genom att lägga till matematisk cosinusfunktion:
Förbättrat ungefärligt avstånd i miles:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Källa:http://www.meridianworlddata.com/Distance-Calculation.asp
REDIGERA 2 :Jag körde ett gäng tester med slumpmässigt genererade datauppsättningar.
- Skillnaden i noggrannhet för de tre algoritmerna är minimal, särskilt på korta avstånd
- Den långsammaste algoritmen (den med alla triggfunktioner) är 4 gånger långsammare än de andra två.
Absolut inte värt det. Gå bara med en uppskattning.
Koden finns här:http://pastebin.org/424186