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; } [...] }
거리 계산의 신뢰성을 높이려면 다음 제안 사항을 고려하십시오.
향상된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!