Version: 1.0
Type: Function
Category: Algorithms
License: GNU General Public License
Description: This algorithm calculates distance between two coordinates ie. latitude and longitude from ZIP code or postal code. It is suitable for store locator, route planner, shipment estimation etc.
<?php /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ /*:: :*/ /*:: This routine calculates the distance between two points (given the :*/ /*:: latitude/longitude of those points). It is being used to calculate :*/ /*:: the distance between two zip codes or postal codes using our :*/ /*:: Zipcodeworld(tm) and Postalcodeworld(tm) products. :*/ /*:: :*/ /*:: Definitions: :*/ /*:: south latitudes are negative, east longitudes are positive :*/ /*:: :*/ /*:: Passed to function: :*/ /*:: lat1, lon1 = latitude and longitude of point 1 (in decimal degrees) :*/ /*:: lat2, lon2 = latitude and longitude of point 2 (in decimal degrees) :*/ /*:: unit = the unit you desire for results :*/ /*:: where: 'm' is statute miles :*/ /*:: 'k' is kilometers (default) :*/ /*:: 'n' is nautical miles :*/ /*:: United States zip code and Canadian postal code databases with latitude & :*/ /*:: longitude are available at http://www.zipcodeworld.com :*/ /*:: :*/ /*:: For enquiries, please contact [email protected] :*/ /*:: :*/ /*:: Official web site: http://www.zipcodeworld.com :*/ /*:: :*/ /*:: Hexa Software Development Center all rights reserved 2004 :*/ /*:: :*/ /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ function distance($lat1, $lon1, $lat2, $lon2, $unit) { $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 == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } echo distance(32.9697, -96.80322, 29.46786, -98.53506, "m") . " miles<br>"; echo distance(32.9697, -96.80322, 29.46786, -98.53506, "k") . " kilometers<br>"; echo distance(32.9697, -96.80322, 29.46786, -98.53506, "n") . " nautical miles<br>"; ?>