Laravelで緯度経度の距離を計算する方法


  1. Vincentyの公式を使用する方法: Vincentyの公式は、地球上の2つの緯度経度座標間の距離を正確に計算するためのアルゴリズムです。Laravelでは、vincentyパッケージを使用することでこの公式を利用できます。まず、composer require phaza/laravel-geohashコマンドを使用してパッケージをインストールします。次に、以下のようなコードを使用して距離を計算できます:

    use Phaza\LaravelGeohash\Facades\Geohash;
    function calculateDistance($lat1, $lon1, $lat2, $lon2)
    {
       $point1 = Geohash::encode($lat1, $lon1);
       $point2 = Geohash::encode($lat2, $lon2);
       return Geohash::distance($point1, $point2);
    }

    この方法では、緯度と経度の値を引数として渡すことで、2つの座標間の距離をメートル単位で取得できます。

  2. Haversineの公式を使用する方法: Haversineの公式は、球面上の2つの緯度経度座標間の距離を近似的に計算するためのアルゴリズムです。Laravelの標準的な数学関数を使用して以下のように実装できます:

    function calculateDistance($lat1, $lon1, $lat2, $lon2)
    {
       $earthRadius = 6371; // 地球の半径(キロメートル)
       $dLat = deg2rad($lat2 - $lat1);
       $dLon = deg2rad($lon2 - $lon1);
       $a = sin($dLat / 2) * sin($dLat / 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon / 2) * sin($dLon / 2);
       $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
       $distance = $earthRadius * $c;
       return $distance;
    }

    この方法では、2つの緯度経度の値を引数として渡すことで、2つの座標間の距離をキロメートル単位で取得できます。

これらの方法は、Laravelで緯度と経度の距離を計算するための一般的な手法です。ご参考までに、ブログ投稿の内容として解説することができます。