Home > Backend Development > PHP Tutorial > How Can I Accurately Calculate the Distance Between Two Coordinates in PHP?

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

Linda Hamilton
Release: 2024-12-03 14:48:10
Original
661 people have browsed it

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

Measuring the Distance Between Two Coordinates in PHP with Precision

Calculating the distance between two points on the Earth's surface requires precision, especially when astronomical distances are involved. The Haversine formula is a popular method for such calculations, but its implementation in the provided code seems to yield inaccurate results.

Haversine Formula Considerations

The Haversine formula employs spherical trigonometry to estimate the distance between two geographical coordinates. While it provides accurate approximations for short distances, it becomes less reliable for extreme distances (e.g., near the antipodes).

Alternative Calculation Formula: Vincenty

To overcome the limitations of the Haversine formula, especially for large-scale distance calculations, the Vincenty formula offers improved accuracy. It uses iterative methods to compute the geodesic distance along the ellipsoid that approximates the Earth's surface.

Implementation

Below is an implementation of the Vincenty formula in PHP:

function vincentyGreatCircleDistance($latFrom, $lonFrom, $latTo, $lonTo, $earthRadius = 6371000) {
    // Convert to radians
    $latFrom = deg2rad($latFrom);
    $lonFrom = deg2rad($lonFrom);
    $latTo = deg2rad($latTo);
    $lonTo = deg2rad($lonTo);

    $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);
    return $angle * $earthRadius;
}
Copy after login

This implementation outputs the distance in meters, consistent with the input $earthRadius. For miles, you can pass in 3959 miles as the $earthRadius parameter. Utilizing the Vincenty formula ensures reliable distance calculations, even for extreme distances.

The above is the detailed content of How Can I Accurately Calculate the Distance Between Two Coordinates in PHP?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template