ホームページ >バックエンド開発 >PHPチュートリアル >PHP で 2 つの座標間の距離を正確に計算するにはどうすればよいですか?
PHP で 2 つの座標間の距離を正確に測定する
地球表面上の 2 点間の距離の計算には、特に天文学的な場合に精度が必要です距離が関係します。 Haversine 公式はこのような計算によく使用される方法ですが、提供されたコードでの実装では不正確な結果が得られるようです。
Haversine 公式に関する考慮事項
Haversine 公式は球面を使用します。三角法を使用して 2 つの地理座標間の距離を推定します。短距離では正確な近似値が得られますが、極端な距離 (対蹠地の近くなど) では信頼性が低くなります。
代替計算式: Vincenty
Haversine の公式の制限、特に大規模な距離計算の場合、Vincenty の公式は精度を向上させます。反復手法を使用して、地球の表面を近似する楕円体に沿った測地距離を計算します。
実装
以下は、PHP での Vincenty 式の実装です。
function vincentyGreatCircleDistance($latFrom, $lonFrom, $latTo, $lonTo, $earthRadius = 6371000) { // Convert to radians $latFrom = deg2rad($latFrom); $lonFrom = deg2rad($lonFrom); $latTo = deg2rad($latTo); $lonTo = deg2rad($lonTo); $lonDelta = $lonTo - $lonFrom; $a = pow(cos($latTo) * sin($lonDelta), 2) + pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2); $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta); $angle = atan2(sqrt($a), $b); return $angle * $earthRadius; }
この実装は、距離をメートル単位で出力します。 $earthRadius を入力します。マイルの場合は、$earthRadius パラメーターとして 3959 マイルを渡すことができます。 Vincenty の公式を利用すると、極端な距離であっても信頼性の高い距離計算が保証されます。
以上がPHP で 2 つの座標間の距離を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。