<?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>";
?>