> 백엔드 개발 > PHP 튜토리얼 > PHP에서 두 지리적 좌표 사이의 거리를 어떻게 정확하게 계산할 수 있습니까?

PHP에서 두 지리적 좌표 사이의 거리를 어떻게 정확하게 계산할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-08 20:53:11
원래의
186명이 탐색했습니다.

How Can I Accurately Calculate the Distance Between Two Geographical Coordinates in PHP?

PHP에서 좌표 간 거리 계산

지리적 좌표 간 거리를 결정하는 것은 웹 개발에서 일반적인 작업입니다. 하지만 불필요한 API 호출을 피하고 효율적인 계산 방법을 구현하는 것이 중요합니다.

거리 측정에 널리 사용되는 공식 중 하나는 Haversine 공식입니다. 지구의 구형 모양을 고려하여 두 지점의 위도와 경도를 사용하여 두 지점 사이의 거리를 계산합니다.

Haversine 공식을 구현했지만 신뢰할 수 없는 결과가 나올 수 있습니다. 문제를 조사하려면 수식을 검토하고 잠재적인 오류를 식별해 보겠습니다.

class CoordDistance
{
    [...]
    public function DistAB()
    {
        $delta_lat = $this->lat_b - $this->lat_a;
        $delta_lon = $this->lon_b - $this->lon_a;

        $earth_radius = 6372.795477598;

        $alpha = $delta_lat / 2;
        $beta = $delta_lon / 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 * $earth_radius * $c;
        $distance = round($distance, 4);

        $this->measure = $distance;
    }
    [...]
}
로그인 후 복사
  • 잘못된 변환: deg2rad()를 사용하여 각도에서 라디안으로의 변환이 올바르게 수행되는지 확인하세요. .
  • 반올림 오류: 다음을 사용하여 잠재적인 반올림 오류를 처리하세요. 고정밀 부동 소수점 계산.
  • 제한: Haversine 공식은 대척점 근처(180도 간격) 지점의 거리를 계산할 때 제한이 있습니다. 이러한 경우 Vincenty 공식과 같은 대체 공식이 더 적합합니다.

거리 계산의 신뢰성을 높이려면 다음 제안 사항을 고려하십시오.

향상된 Haversine 공식 정밀:

function haversineGreatCircleDistance(float $latitudeFrom, float $longitudeFrom, float $latitudeTo, float $longitudeTo, float $earthRadius = 6371000.0) {
    ...
    $angle = 2 * asin(sqrt(pow(sin($latDelta / 2.0), 2) +
        cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2.0), 2)));
    return $angle * $earthRadius;
}
로그인 후 복사

빈센티 공식:

function vincentyGreatCircleDistance(float $latitudeFrom, float $longitudeFrom, float $latitudeTo, float $longitudeTo, float $earthRadius = 6371000.0) {
    ...
    $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;
}
로그인 후 복사

이러한 개선된 공식을 구현하면 먼 거리나 대척점 근처의 지점에서도 PHP의 좌표 간 거리를 더 정확하게 측정할 수 있습니다.

위 내용은 PHP에서 두 지리적 좌표 사이의 거리를 어떻게 정확하게 계산할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿