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

Формули за изчисляване на географска близост

Законът за косинусите и формулата на Хаверсин ще дадат идентични резултати, ако приемем машина с безкрайна прецизност. Формулата на Haversine е по-устойчива на грешки с плаваща запетая. Въпреки това, днешните машини имат двойна точност от порядъка на 15 значими цифри и законът на косинусите може да работи добре за вас. И двете формули предполагат сферична земя, докато итеративното решение на Висенти (най-точното) предполага елипсоидална земя (в действителност земята дори не е елипсоид - тя е геоид). Някои препратки:http://www.movable-type. co.uk/scripts/gis-faq-5.1.html

Става по-добре:имайте предвид, че географската ширина, която ще се използва в закона за косинусите, както и в Haversine е геоцентричната ширина, която е различна от геодезическата ширина. За сфера тези две са еднакви.

Кое е най-бързо за изчисляване?

В ред от най-бързия към най-бавен са:закон на косинусите (5 триг. извиквания) -> hasrsine (включва sqrt) -> Vicenty (трябва да реши това итеративно в цикъл for)

Кое е най-точно?

Висенти.

Кое е най-доброто, когато се вземат предвид скоростта и точността?

Ако вашият проблемен домейн е такъв, че за разстоянията, които се опитвате да изчислите, земята може да се счита за плоска, тогава можете да изработите (няма да давам подробности) формула от формата x =kx * разлика в дължината , y =ky * разлика в географската ширина. Тогава разстояние =sqrt(dxdx + dy dy). Ако вашият проблемен домейн е такъв, че може да бъде решен с разстояние на квадрат, тогава няма да ви се налага да приемате sqrt и тази формула ще бъде толкова бърза, колкото е възможно да получите. Има допълнителното предимство, че можете да изчислите вектора разстояние – x е разстоянието в източна посока, а y е разстоянието в северната посока. В противен случай експериментирайте с 3 и изберете кое работи най-добре във вашата ситуация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-доброто DBaaS решение за MySQL

  2. Изберете последните N реда от MySQL

  3. SELECT / GROUP BY - сегменти от време (10 секунди, 30 секунди и т.н.)

  4. MySQL Cross Server Select Query

  5. Предупреждение:mysql_result() очаква параметър 1 да бъде ресурс, като е дадено булево