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

Изберете точки от базата данни с карти според радиуса

Понякога параметърът към ACOS() може да бъде малко по-голямо от 1 - малко извън областта на тази функция - когато разстоянията са малки. Налична е по-добра формула за разстояние, благодарение на Vincenty. Той използва ATAN2(y,x) функция, а не ACOS() функция и така е по-стабилна числено.

Това е.

DEGREES(
    ATAN2(
      SQRT(
        POW(COS(RADIANS(lat2))*SIN(RADIANS(lon2-lon1)),2) +
        POW(COS(RADIANS(lat1))*SIN(RADIANS(lat2)) -
             (SIN(RADIANS(lat1))*COS(RADIANS(lat2)) *
              COS(RADIANS(lon2-lon1))) ,2)),
      SIN(RADIANS(lat1))*SIN(RADIANS(lat2)) +
      COS(RADIANS(lat1))*COS(RADIANS(lat2))*COS(RADIANS(lon2-lon1))))

Тази функция връща резултата си в градуси. Има 111,045 км в градус. 60 морски мили. 69 статутни мили. Така че умножете резултата по едно от тези числа, за да получите разстояние. Има по-пълно описание, включително дефиниция на съхранена функция за MySQL, тук .

Друго решение е да използвате ISNULL(ACOS(formula), 0.0)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да реша кога да използвам десни съединения/леви съединения или вътрешни съединения или как да определя коя таблица е от коя страна?

  2. Попълване на база данни без командата load data

  3. Преобразуване на MyISAM в InnoDB. Благоприятно? Последствия?

  4. Грешка 1062 - Дублиран запис "127" за ключ "PRIMARY" - не мога да намеря причината

  5. PHP Как да върна datetime(6) от Mysql?