PHP中两个坐标之间的距离

时间:2014-09-22 13:47:17

标签: php

我测试了以下用于测量两个坐标之间距离的函数:

<?php

$var1 = vincentyGreatCircleDistance(500359,0054253,583838,0030412,6371000);

echo "$var1" ;
$var2 = distance(500359,0054253,583838,0030412,'K');
echo "<br>$var2" ;

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;
          }
    }




  function vincentyGreatCircleDistance(
  $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
{
  // convert from degrees to radians
  $latFrom = deg2rad($latitudeFrom);
  $lonFrom = deg2rad($longitudeFrom);
  $latTo = deg2rad($latitudeTo);
  $lonTo = deg2rad($longitudeTo);

  $lonDelta = $lonTo - $lonFrom;
  $a = pow(cos($latTo) * sin($lonDelta), 2) +
    pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
  $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);

  $angle = atan2(sqrt($a), $b);
  return $angle * $earthRadius;
}

?>

但第一个函数返回5120227.5400291,第二个函数返回5119.9812014323! 我很困惑,因为下面的网站返回5363 km

http://www.movable-type.co.uk/scripts/latlong.html

其中一个是正确的?!!!


来源:

第一个功能:

http://www.geodatasource.com/developers/php

第二个功能:

Measuring the distance between two coordinates in PHP

0 个答案:

没有答案