sql >> Database teknologi >  >> RDS >> Mysql

PHP MySQL få placeringer i radius brugerens placering fra GPS

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



  1. Godkendelsesmetoden 'mysql_old_password' understøttes ikke

  2. Sådan tuner eller tester du PLSQL-kodeydeevne i Oracle D2k-formularer

  3. Genindlæs MySQL-data inde i en DIV ved hjælp af Ajax

  4. Hent alle overordnede/underordnede poster fra databasen på Laravel (hierarkiske data)