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

指定されたマイル半径内にある緯度と経度の座標をMySQLに照会する

    余弦定理の球面法則
    (37と-122は、半径の中心の緯度と経度です)

    SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
        * cos( radians( long ) - radians(-122) ) + sin( radians(37) ) * sin(radians(lat)) ) ) AS distance 
    FROM myTable
    HAVING distance < 50
    ORDER BY distance 
    

    機能

    • 最速
    • ハーベシンフォーミュラと同様の精度

    ハバーシンフォーミュラ

    SELECT id, 3959 * 2 * ASIN(SQRT(POWER(SIN((37 - abs(lat)) * pi()/180 / 2), 2)
           + COS(37 * pi()/180 ) * COS(abs(lat) * pi()/180)
           * POWER(SIN((-122 - long) * pi()/180 / 2), 2) )) as  distance
    FROM myTable
    HAVING distance < 50
    ORDER BY distance
    

    機能

    • 高速
    • 浮動小数点エラーに対してより堅牢です

    3959はマイル単位の地球半径であることに注意してください 。地球半径(キロメートル(km)):6371

    詳細については、こちら をご覧ください。




    1. Oracle-ORA-01489:文字列連結の結果が長すぎます

    2. データベースからのjfreechartの散布図

    3. MariaDBでのLOG()のしくみ

    4. MySQLサーバーとMySQLクライアントの違いは何ですか