Mysql
 sql >> Base de données >  >> RDS >> Mysql

Formules pour calculer la proximité géographique

La loi des cosinus et la formule Haversine donneront des résultats identiques en supposant une machine avec une précision infinie. La formule Haversine est plus robuste aux erreurs en virgule flottante. Cependant, les machines d'aujourd'hui ont une double précision de l'ordre de 15 chiffres significatifs, et la loi des cosinus peut très bien fonctionner pour vous. Ces deux formules supposent une terre sphérique, alors que la solution itérative de Vicenty (la plus précise) suppose une terre ellipsoïdale (en réalité, la terre n'est même pas un ellipsoïde - c'est un géoïde). Quelques références :http://www.movable-type. co.uk/scripts/gis-faq-5.1.html

Ça va mieux :notez que la latitude à utiliser dans la loi des cosinus ainsi que le Haversine est la latitude géocentrique, qui est différente de la latitude géodésique. Pour une sphère, ces deux sont les mêmes.

Lequel est le plus rapide à calculer ?

Dans l'ordre du plus rapide au plus lent, on trouve :loi des cosinus (5 appels trigonométriques) > haversine (implique sqrt) > Vicenty (doit résoudre ce problème de manière itérative dans une boucle for)

Laquelle est la plus précise ?

Vicenty.

Lequel est le meilleur lorsque la vitesse et la précision sont prises en compte ?

Si votre domaine de problème est tel que pour les distances que vous essayez de calculer, la terre peut être considérée comme plate, alors vous pouvez élaborer (je ne vais pas donner de détails) une formule de la forme x =kx * différence de longitude , y =ky * différence de latitude. Alors distance =sqrt(dxdx + dy mourir). Si votre domaine de problème est tel qu'il peut être résolu avec la distance au carré, vous n'aurez pas à prendre sqrt, et cette formule sera aussi rapide que possible. Il a l'avantage supplémentaire que vous pouvez calculer le vecteur distance - x est la distance dans la direction est et y est la distance dans la direction nord. Sinon, expérimentez avec les 3 et choisissez ce qui fonctionne le mieux dans votre situation.