browser lang:en
Because of the near-spherical shape of the Earth, calculating an accurate distance between two points requires the use of spherical geometry [1], and trigonometric math functions. For many applications, an approximate distance calculation provides sufficient accuracy with much less complexity.
To calculate an approximate distance in miles, we could do:
v sqrt(x * x + y * y)
where:
x = 69.1 * (lat2 - lat1) and y = 53.0 * (lon2 - lon1)
We can improve the accuracy, by adding the cosine math function:
sqrt(x * x + y * y)
where:
x = 69.1 * (lat2 - lat1) and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
If you need greater accuracy, you can use the Great Circle Distance Formula [2]. This formula requires use of spherical geometry, and a high level of floating point mathematical accuracy - about 15 digits of accuracy (double-precision).
To convert latitude or longitude from decimal degrees to radians, we can divide the latitude and longitude values by 180/pi, or approximately 57.29577951. The radius of the earth is assumed to be 6,378.8 kilometers, or 3,963.0 miles.
Since we are using PHP, it’s much simpler, because the deg2rad() function does this calculation for us.
If you convert all latitude and longitude values to radians before the calculation, we can use this equation:
3963.0 * arccos[sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1)] Implementing this in PHP
I implement the example with kilometers:
function getDistance($latitudeFrom, $longitudeFrom,
$latituteTo, $longitudeTo)
{
// 1 degree equals 0.017453292519943 radius
$degreeRadius = deg2rad(1);
// convert longitude and latitude values
// to radians before calculation
$latitudeFrom *= $degreeRadius;
$longitudeFrom *= $degreeRadius;
$latituteTo *= $degreeRadius;
$longitudeTo *= $degreeRadius;
// apply the Great Circle Distance Formula
$d = sin($latitudeFrom) * sin($latituteTo) + cos($latitudeFrom)
* cos($latituteTo) * cos($longitudeFrom - $longitudeTo);
return (6371.0 * acos($d));
}
if you want the final result to be in miles:
The radius of the earth is assumed to be 6,378.8 kilometers, or 3,963.0 miles, so you only need to change:
return (6371.0 * acos($d));
to:
return (3963.0 * acos($d));
Resources
[1]
[2]
PHP is one of the most widely used open-source server-side scripting languages that exist today. With over…
in:Scripts and tutorials (0 comments)In a FBML Facebook App, your quick jump menu will require a little tweak to work in FBJS…
in:Scripts and tutorials (0 comments)Every single day, someone, somewhere is discussing something important to your business; your brand, your executives, your…
in:Scripts and tutorials (0 comments)The Singleton Pattern is one of the GoF (Gang of Four) Patterns. This particular pattern provides a…
in:Scripts and tutorials (0 comments)Because of the near-spherical shape of the Earth, calculating an accurate distance between two points requires the use…
in:Scripts and tutorials (1 comments)With this script we can limit the download speed // local file that should be send to the client $local_file…
in:Scripts and tutorials (0 comments)Some hosts disabled the ini setting allow_url_fopen. This also means that the ability to easily grab images…
in:Scripts and tutorials (0 comments)The act to verify if a file exists, is one of more important tasks related to files operations,…
in:Scripts and tutorials (0 comments)
