>백엔드 개발 >PHP 튜토리얼 >PHP의 Haversine 및 Vincenty 공식을 사용하여 지리적 거리를 어떻게 계산할 수 있습니까?

PHP의 Haversine 및 Vincenty 공식을 사용하여 지리적 거리를 어떻게 계산할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-29 02:27:13585검색

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

PHP 좌표를 사용하여 지리적 거리 결정

두 지리적 좌표 사이의 거리를 계산하는 데는 Haversine 또는 Vincenty 공식이 사용됩니다.

하버사인 공식

다음 PHP 코드로 구현된 Haversine 공식:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.