Het berekenen van de afstand is behoorlijk rekenkundig duur, zoals anderen al hebben gezegd. Het retourneren van enorme datasets is ook geen goed idee - vooral als je bedenkt dat PHP niet zo goed presteert.
Ik zou een heuristiek gebruiken, zoals het benaderen van de afstand met eenvoudig optellen en aftrekken.
Zoek gewoon in de database met incidenten binnen dat bereik (in feite een vierkant in plaats van een cirkel), en dan kun je daaraan werken met PHP.
BEWERKEN :Hier is een alternatief; een benadering die veel minder rekenkundig duur is:
Geschatte afstand in mijlen:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
U kunt de nauwkeurigheid van deze geschatte afstandsberekening verbeteren door de cosinus-wiskundige functie toe te voegen:
Verbeterde geschatte afstand in mijlen:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
Bron:http://www.meridianworlddata.com/Distance-Calculation.asp
BEWERK 2 :Ik heb een aantal tests uitgevoerd met willekeurig gegenereerde datasets.
- Het verschil in nauwkeurigheid voor de 3 algoritmen is minimaal, vooral op korte afstanden
- Het langzaamste algoritme (het algoritme met de hele reeks trig-functies) is 4x langzamer dan de andere twee.
Absoluut niet de moeite waard. Ga gewoon met een benadering.
Code is hier:http://pastebin.org/424186