他の人が言っているように、距離の計算はかなり計算コストがかかります。巨大なデータセットを返すこともあまり良い考えではありません。特にPHPのパフォーマンスがそれほど優れていないことを考えると
単純な足し算と引き算で距離を概算するようなヒューリスティックを使用します。
その範囲内のインシデント(事実上、円ではなく正方形)でデータベースを検索するだけで、PHPを使用してそれらを処理できます。
編集 :これが代替案です。計算コストがはるかに低い近似値:
おおよその距離(マイル):
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
編集2 :ランダムに生成されたデータセットを使用して一連のテストを実行しました。
- 3つのアルゴリズムの精度の違いは、特に短距離では最小限です。
- 最も遅いアルゴリズム(三角関数がたくさんあるアルゴリズム)は、他の2つよりも4倍遅くなります。
絶対に価値がありません。概算で行ってください。
コードはここにあります: http://pastebin.org/424186