Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP MySQL erhält Standorte im Radius des Benutzerstandorts vom GPS

Die Berechnung der Entfernung ist ziemlich rechenintensiv, wie andere gesagt haben. Das Zurückgeben riesiger Datensätze ist auch keine sehr gute Idee - besonders wenn man bedenkt, dass PHP nicht so leistungsfähig ist.

Ich würde eine Heuristik verwenden, wie die Annäherung der Entfernung durch einfache Addition und Subtraktion.

Durchsuchen Sie einfach die Datenbank mit Vorfällen innerhalb dieses Bereichs (effektiv ein Quadrat statt eines Kreises), und dann können Sie diese mit PHP bearbeiten.

BEARBEITEN :Hier ist eine Alternative; eine Annäherung, die viel weniger rechenintensiv ist:

Ungefähre Entfernung in Meilen:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 53.0 * (lon2 - lon1) 

Sie können die Genauigkeit dieser ungefähren Entfernungsberechnung verbessern, indem Sie die Kosinus-Mathematikfunktion hinzufügen:

Verbesserte ungefähre Entfernung in Meilen:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3) 

Quelle:http://www.meridianworlddata.com/Distance-Calculation.asp

BEARBEITEN 2 :Ich habe eine Reihe von Tests mit zufällig generierten Datensätzen durchgeführt.

  • Der Genauigkeitsunterschied der 3 Algorithmen ist minimal, besonders auf kurze Distanzen
  • Der langsamste Algorithmus (der mit den ganzen Trig-Funktionen) ist 4x langsamer als die anderen beiden.

Definitiv nicht wert. Gehen Sie einfach mit einer Annäherung.

Code ist hier:http://pastebin.org/424186