その関数を使用して距離を計算すると、超越関数が多数含まれるため、計算コストがかなり高くなります。これは、フィルタリングする行が多数ある場合に問題になります。
これは別の方法であり、計算コストがはるかに低い近似値です。
おおよその距離(マイル):
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