PHP での座標間の距離の測定
はじめに
地理座標間の距離の計算は次のとおりです。さまざまなアプリケーションにおける基本的なタスクです。一般的なアプローチの 1 つは、Haversine 公式を使用することです。ただし、特に対蹠点の場合、不正確な結果が得られる可能性があります。この記事では、すべての距離に対してより信頼性の高い結果が得られる、Vincenty 式を使用した代替方法について説明します。
実装
提供された PHP コードは、次の Haversine 式を実装しようとします。距離を計算しています。ただし、長い距離を扱う場合は丸め誤差により不正確になる可能性があります。代わりに、以下のコード スニペットに示すように、Vincenty 式を使用することをお勧めします。
public static function vincentyGreatCircleDistance( $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000) { // Convert from degrees to radians $latFrom = deg2rad($latitudeFrom); $lonFrom = deg2rad($longitudeFrom); $latTo = deg2rad($latitudeTo); $lonTo = deg2rad($longitudeTo); $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; }
注:
デフォルトでは、距離は次を使用してメートル単位で計算されます。地球の半径は6371000メートル。測定単位を変更するには、それに応じて $earthRadius の値を調整します。
エラー処理
対蹠点 (つまり、地球の反対側の点) の場合、 Vincenty 式は、Haversine 式と比較してより正確な結果を提供します。ただし、両方の式で丸め誤差が発生したり、非常に短い距離に対して不正確な結果が生成される可能性があることに注意することが重要です。
以上がPHP で地理座標間の距離を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。