sql >> Databasteknik >  >> RDS >> Mysql

PHP MySQL hämta platser i radie användarens plats från GPS

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



  1. DataTables sida 2 av paginering som inte anropar Magnific Popup

  2. Hur man gör anslutning till Postgres via Node.js

  3. Hur man pivoterar tabeller i MySQL

  4. Hur man reparerar en MySQL-databas i cPanel