Parfois, le paramètre de ACOS()
peut être légèrement supérieur à 1 - légèrement en dehors du domaine de cette fonction - lorsque les distances sont petites. Il y a une meilleure formule de distance disponible, grâce à Vincenty. Il utilise le ATAN2(y,x)
plutôt que la fonction ACOS()
fonction et est donc plus stable numériquement.
C'est ça.
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))))
Cette fonction renvoie son résultat en degrés. Il y a 111,045 km dans un degré. 60 milles nautiques. 69 milles terrestres. Multipliez donc le résultat par l'un de ces nombres pour obtenir la distance. mysql/vicenty-great-circle-distance-formula/">ici .
Une autre solution consiste à utiliser ISNULL(ACOS(formula), 0.0)