ホームページ > バックエンド開発 > PHPチュートリアル > PHP で地理座標間の距離を正確に計算するにはどうすればよいですか?

PHP で地理座標間の距離を正確に計算するにはどうすればよいですか?

DDD
リリース: 2024-12-06 14:51:10
オリジナル
970 人が閲覧しました

How to Accurately Calculate Distances Between Geographical Coordinates in PHP?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート