Как рассчитать пройденное расстояние, используя широту и долготу в php? - PullRequest
0 голосов
/ 01 апреля 2012

Учитывая что-то вроде этого:

//$unit="K";
//$unit="m";

$driven_distance ($lat1, $lng1, $lat2, $lng2, $unit);

Как я могу получить время между этими двумя точками?

Ответы [ 3 ]

0 голосов
/ 01 апреля 2012

Функция выбора [ Источник ]

function getDistance($latitude1, $longitude1,
$latitude2, $longitude2, $unit = 'Mi')
{
   $theta = $longitude1 - $longitude2;
   $distance = (sin(deg2rad($latitude1)) *
   sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) *
   cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
   $distance = acos($distance);
   $distance = rad2deg($distance);
   $distance = $distance * 60 * 1.1515;
   switch($unit)
   {
      case 'm': break;
      case 'K' : $distance = $distance *1.609344;
   }
   return (round($distance,2));
}

Эта функция округляет результат до двух десятичных знаков.

Теперь используйте точно так же, как вы используете

$driven_distance = getDistance($lat1,$lng1,$lat2,$lng2,$unit);

Обновление:

Если вы хотите узнать пройденное расстояние, лучше всего использовать Google геокод API.

$json = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$long&sensor=true_or_false
');
$details = json_decode($json, TRUE);
var_dump($details);
0 голосов
/ 08 марта 2017

дал самые точные результаты

function distanceCalculation($point1_lat, $point1_long, $point2_lat, $point2_long, $unit = 'km', $decimals = 2) {
// Calculate the distance in degrees
$degrees = rad2deg(acos((sin(deg2rad($point1_lat))*sin(deg2rad($point2_lat))) + (cos(deg2rad($point1_lat))*cos(deg2rad($point2_lat))*cos(deg2rad($point1_long-$point2_long)))));

// Convert the distance in degrees to the chosen unit (kilometres, miles or nautical miles)
switch($unit) {
    case 'km':
        $distance = $degrees * 111.13384; // 1 degree = 111.13384 km, based on the average diameter of the Earth (12,735 km)
        break;
    case 'mi':
        $distance = $degrees * 69.05482; // 1 degree = 69.05482 miles, based on the average diameter of the Earth (7,913.1 miles)
        break;
    case 'nmi':
        $distance =  $degrees * 59.97662; // 1 degree = 59.97662 nautic miles, based on the average diameter of the Earth (6,876.3 nautical miles)
}
return round($distance, $decimals);

}

0 голосов
/ 01 апреля 2012

Вот очень простая функция для того, что вам нужно:

<?php
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 
   {
      return $miles;
   }
}

// Miles
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "m");

// Kilometres
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K");
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...