Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP MySQL pobiera lokalizacje w lokalizacji użytkownika w promieniu z GPS

Obliczenie odległości jest dość kosztowne obliczeniowo, jak mówili inni. Zwracanie ogromnych zbiorów danych również nie jest zbyt dobrym pomysłem - szczególnie biorąc pod uwagę, że PHP nie jest tak świetne pod względem wydajności.

Użyłbym heurystyki, takiej jak przybliżanie odległości za pomocą prostego dodawania i odejmowania.

Po prostu przeszukaj bazę danych zawierającą incydenty z tego zakresu (w praktyce kwadrat, a nie okrąg), a następnie możesz pracować nad tymi z PHP.

EDYTUJ :Oto alternatywa; przybliżenie, które jest znacznie mniej kosztowne obliczeniowo:

Przybliżona odległość w milach:

sqrt(x * x + y * y)

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

Możesz poprawić dokładność tego przybliżonego obliczenia odległości, dodając funkcję matematyczną cosinusa:

Poprawiona przybliżona odległość w milach:

sqrt(x * x + y * y)

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

Źródło:http://www.meridianworlddata.com/Distance-Calculation.asp

EDYTUJ 2 :Przeprowadziłem kilka testów z losowo generowanymi zestawami danych.

  • Różnica w dokładności 3 algorytmów jest minimalna, szczególnie na krótkich dystansach
  • Najwolniejszy algorytm (ten z całą masą funkcji trygonometrycznych) jest 4x wolniejszy niż pozostałe dwa.

Zdecydowanie nie warto. Po prostu idź z przybliżeniem.

Kod jest tutaj:http://pastebin.org/424186



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pula połączeń Perla

  2. Kod PHP do wstawienia wartości pola wyboru do określonej kolumny w mysql z wybranym formularzem

  3. Unikanie pojedynczego cudzysłowu w PHP podczas wstawiania do MySQL

  4. Użyj relacyjnych baz danych MySQL w Fedorze 13

  5. Ponowne łączenie na serwerze MySQL przestało istnieć