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.045kmあります。 60海里。 69法定マイル。したがって、結果にこれらの数値の1つを掛けて、距離を求めます。MySQLの保存された関数の定義、ここ 。
別の解決策は、ISNULL(ACOS(formula), 0.0)
を使用することです。