Created
June 28, 2012 23:53
-
-
Save teachmeter/3014803 to your computer and use it in GitHub Desktop.
PHP: Distance between 2 lat long
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?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/ canadian postal code databases with latitude & :*/ | |
| /*:: longitude are available at http://www.zipcodeworld.com :*/ | |
| /*:: :*/ | |
| /*:: For enquiries, please contact sales@zipcodeworld.com :*/ | |
| /*:: :*/ | |
| /*:: 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>"; | |
| ?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment