ホームページ >バックエンド開発 >PHPチュートリアル >PHP の Haversine 式と Vincenty 式を使用して地理的距離を計算するにはどうすればよいですか?

PHP の Haversine 式と Vincenty 式を使用して地理的距離を計算するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-29 02:27:13601ブラウズ

How Can I Calculate Geographic Distance Using PHP's Haversine and Vincenty Formulas?

PHP 座標を使用した地理的距離の決定

2 つの地理座標間の距離の計算には、Haversine または Vincenty の式が含まれます。

ハバシン式

次の PHP コードで実装されたハバーサイン式:

class CoordDistance {
    // Latitude and longitude of points A and B
    public $lat_a, $lon_a, $lat_b, $lon_b;
    public $earth_radius = 6372.795477598;
    public $distance;

    public function DistAB() {
        $latDelta = $this->lat_b - $this->lat_a;
        $lonDelta = $this->lon_b - $this->lon_a;
        $alpha = $latDelta / 2;
        $beta = $lonDelta / 2;
        $a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) +
              cos(deg2rad($this->lat_a)) * cos(deg2rad($this->lat_b)) *
              sin(deg2rad($beta)) * sin(deg2rad($beta));
        $c = asin(min(1, sqrt($a)));
        $distance = 2 * $this->earth_radius * $c;
        $this->distance = $distance;
    }
}

Vincenty Formula

対蹠点の場合、Vincenty式の方が正確です:

class CoordDistance {
    // Latitude and longitude of points A and B
    public $lat_a, $lon_a, $lat_b, $lon_b;
    public $earth_radius = 6371000;
    public $distance;

    public function DistAB() {
        // Convert to radians
        $latFrom = deg2rad($this->lat_a);
        $lonFrom = deg2rad($this->lon_a);
        $latTo = deg2rad($this->lat_b);
        $lonTo = deg2rad($this->lon_b);

        $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);
        $distance = $angle * $this->earth_radius;
        $this->distance = $distance;
    }
}

両方の式は、提供された地球の半径と同じ測定単位での距離。

以上がPHP の Haversine 式と Vincenty 式を使用して地理的距離を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。