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

PHPMySqlとジオロケーション

    その関数を使用して距離を計算すると、超越関数が多数含まれるため、計算コストがかなり高くなります。これは、フィルタリングする行が多数ある場合に問題になります。

    これは別の方法であり、計算コストがはるかに低い近似値です。

    おおよその距離(マイル):

    sqrt(x * x + y * y)
    
    where x = 69.1 * (lat2 - lat1) 
    and y = 53.0 * (lon2 - lon1) 
    

    正弦数学関数を追加することで、この近似距離計算の精度を向上させることができます。

    マイル単位の改善されたおおよその距離:

    sqrt(x * x + y * y)
    
    where x = 69.1 * (lat2 - lat1) 
    and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3) 
    

    出典: http://www.meridianworlddata.com/Distance-Calculation.asp

    ランダムに生成されたデータセットを使用して一連のテストを実行しました。

    • 3つのアルゴリズムの精度の違いは最小限です。 、特に短距離で
    • もちろん、最も遅いアルゴリズムは、三角関数を備えたアルゴリズム(質問のアルゴリズム)です。他の2つより4倍遅いです。

    絶対に価値がありません。概算で行ってください。
    コードはここにあります: http://pastebin.org/424186

    MySQLでこれを使用するには、ストアドプロシージャ を作成します。 座標引数を取り、距離を返すと、次のようになります。

    SELECT columns 
      FROM table 
     WHERE DISTANCE(col_x, col_y, target_x, target_y) < 25
    


    1. 社会的距離を保ちながらチームを管理するための5つのヒント

    2. LinuxでPostgreSQLパスワードを更新する

    3. PDO:ドライバーphp/mysqlが見つかりませんでした

    4. MSSQLレプリケーションの管理