PHP Web Development

Calculate Distance by Latitude and Longitude

<?php
/******************/
/* This calculates the distance between two points (given the */
/* latitude/longitude of those points). It is being used to calculate */
/* the distance between two locations using GeoDataSource(TM) Products */
/* For enquiries, please contact sales@geodatasource.com */
/**/
/* Official Web site: http://www.geodatasource.com */
/**/
/* GeoDataSource.com (C) All Rights Reserved 2017 */
/**/
/******************/
class DistanceByLatLon{

	/**/
	/* 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 (default) */
	/* 'K' is kilometers */
	/* 'N' is nautical miles */
	/* Worldwide cities and other features databases with latitude longitude */
	/* are available at http://www.geodatasource.com */
	/**/
	public function getDistance($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;
		}
	}

/// multidimentional array sort on based on a key
// $array : array to be sort
// $on : key on which the array to be sort
// $order : in which order to sort
	public function array_sort($array, $on, $order=SORT_ASC,$preserve_key=false){
		$new_array = array();
		$sortable_array = array();
		if (count($array) > 0) {
			foreach ($array as $k => $v) {
				if (is_array($v)) {
					foreach ($v as $k2 => $v2) {
						if ($k2 == $on) {
							$sortable_array[$k] = $v2;
						}
					}
				} else {
					$sortable_array[$k] = $v;
				}
			}
			switch ($order) {
				case SORT_ASC:
				asort($sortable_array);
				break;
				case SORT_DESC:
				arsort($sortable_array);
				break;
			}
			foreach ($sortable_array as $k => $v) {
				if($preserve_key)
					$new_array[$k] = $array[$k];
				else
					$new_array[] = $array[$k];
			}
		}
		return $new_array;
	}

} // end of class

$dist = new DistanceByLatLon;
echo $dist->getDistance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " Miles<br>";
echo $dist->getDistance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";
echo $dist->getDistance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " Nautical Miles<br>";
?>

Leave a Reply

Your email address will not be published. Required fields are marked *


CAPTCHA Image
Reload Image