sql >> データベース >  >> RDS >> Mysql

半径に従ってマップデータベースからポイントを選択します

    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)を使用することです。




    1. 非ラテン文字と痛い

    2. MySQLを使用して時間ごとにグループ化された行を取得する

    3. ExplainステートメントでのMySQLkey_lenの理解

    4. mysqlで日付のギャップを見つける