The Haversine formula is a formula used to calculate the great-circle distance (the shortest distance on a sphere between two points) between two points, usually specified in terms of their latitudes and longitudes. It is commonly used in navigation and is named after the haversine function, which is used in its calculation.
The Haversine formula is:
d = 2r arcsin(sqrt(sin²((lat₂ - lat₁)/2) + cos(lat₁) * cos(lat₂) * sin²((lon₂ - lon₁)/2)))
where:
- d is the distance between the two points in the same units as the radius r
- lat₁, lon₁ are the latitude and longitude, respectively, of the first point in radians
- lat₂, lon₂ are the latitude and longitude, respectively, of the second point in radians
- r is the radius of the sphere
Note that this formula assumes that the Earth is a perfect sphere, which is not exactly true but is a close enough approximation for many practical purposes.
In PHP, the Haversine formula can be implemented using the sin
, cos
, sqrt
, asin
, deg2rad
, and rad2deg
functions to perform the necessary trigonometric calculations.
Here's an example PHP class that can calculate the distance between two latitudes and longitudes using the Haversine formula:
class DistanceCalculator { public function calculateDistance($lat1, $lon1, $lat2, $lon2, $unit = "km") { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "KM") { return ($miles * 1.609344); } else if ($unit == "NM") { return ($miles * 0.8684); } else { return $miles; } } }
The calculateDistance
the method takes in four parameters - the latitude and longitude of the first point and the latitude and longitude of the second point. An optional fifth parameter allows you to specify the unit of measurement for the distance calculation (defaults to kilometers).
The method then uses the Haversine formula to calculate the distance between the two points and returns the result in the specified unit of measurement.
Comments
Post a Comment