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

Wzory do obliczania odległości geograficznej

Prawo cosinusów i wzór Haversine'a dadzą identyczne wyniki, zakładając maszynę z nieskończoną precyzją. Wzór Haversine jest bardziej odporny na błędy zmiennoprzecinkowe. Jednak dzisiejsze maszyny mają podwójną precyzję rzędu 15 cyfr znaczących, a prawo cosinusów może Ci wystarczyć. Obie te formuły zakładają kulistą ziemię, podczas gdy rozwiązanie iteracyjne Vicenty'ego (najdokładniejsze) przyjmuje ziemię elipsoidalną (w rzeczywistości Ziemia nie jest nawet elipsoidą - jest geoidą). Niektóre odniesienia:http://www.movable-type. co.uk/scripts/gis-faq-5.1.html

Jest lepiej:zwróć uwagę na szerokość geograficzną, która ma być używana w prawie cosinusów, a Haversine to szerokość geocentryczna, która różni się od szerokości geograficznej. W przypadku kuli te dwa są takie same.

Który z nich jest najszybszy do obliczenia?

W kolejności od najszybszego do najwolniejszego są:prawo cosinusów (5 wywołań trygonometrycznych) -> haversine (obejmuje sqrt) -> Vicenty (trzeba rozwiązać to iteracyjnie w pętli for)

Który z nich jest najdokładniejszy?

Vincenta.

Który z nich jest najlepszy, biorąc pod uwagę zarówno szybkość, jak i dokładność?

Jeśli twoja dziedzina problemu jest taka, że ​​dla odległości, które próbujesz obliczyć, Ziemię można uznać za płaską, to możesz wypracować (nie będę podawać szczegółów) wzór w postaci x =kx * różnica długości geograficznej , y =ky * różnica szerokości geograficznej. Następnie odległość =sqrt(dxdx + dy dy). Jeśli twoja problematyczna domena jest taka, że ​​można ją rozwiązać z odległością do kwadratu, nie będziesz musiał brać sqrt, a ten wzór będzie tak szybki, jak to tylko możliwe. Ma tę dodatkową zaletę, że możesz obliczyć wektor odległość - x to odległość w kierunku wschodnim, a y to odległość w kierunku północnym. W przeciwnym razie poeksperymentuj z 3 i wybierz to, co działa najlepiej w Twojej sytuacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę opóźnić kolumny w MySQL?

  2. Jak filtrować wyniki SQL w relacji ma wiele przejść?

  3. Ponowne podporządkowanie uszkodzonego serwera MySQL Master w konfiguracji replikacji półsynchronicznej

  4. Jak zaimportować plik CSV do tabeli MySQL?

  5. PlanetScale &Vitess:Integralność referencyjna ze starszymi bazami danych podzielonych na fragmenty