Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP MySQL получава местоположения в радиус на местоположението на потребителя от GPS

Изчисляването на разстоянието е доста скъпо изчислително, както казаха други. Връщането на огромни набори от данни също не е много добра идея - особено като се има предвид, че PHP не е толкова страхотен като производителност.

Бих използвал евристика, като приближаване на разстоянието с просто събиране и изваждане.

Просто потърсете в db с инциденти в този диапазон (на практика квадрат, а не кръг) и след това можете да работите върху тези с PHP.

РЕДАКТИРАНЕ :Ето алтернатива; приближение, което е много по-малко изчислително скъпо:

Приблизително разстояние в мили:

sqrt(x * x + y * y)

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

Можете да подобрите точността на това приблизително изчисление на разстоянието, като добавите косинусовата математическа функция:

Подобрено приблизително разстояние в мили:

sqrt(x * x + y * y)

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

Източник:http://www.meridianworlddata.com/Distance-Calculation.asp

РЕДАКТИРАНЕ 2 :Проведох куп тестове с произволно генерирани набори от данни.

  • Разликата в точността за 3-те алгоритма е минимална, особено на къси разстояния
  • Най-бавният алгоритъм (този с целия куп триг функции) е 4 пъти по-бавен от другите два.

Определено не си заслужава. Просто използвайте приблизително.

Кодът е тук: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. Как да получите всички стойности в колона с помощта на PHP?

  2. Голямо транспониране на заявка

  3. PHP дата, показваща '1970-01-01 ' след преобразуване

  4. Нарушение на ограничението за целостта:1048 Колона „tagable_id“ не може да бъде нула

  5. Hibernate CriteriaBuilder, за да се присъедините към няколко таблици