纬度/经度向量到距离,输出奇怪的问题

时间:2010-12-10 21:25:24

标签: php

我有这个代码来找到两组GPS坐标之间的距离,我从网上的其他地方得到了代码。

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

返回的输出如下:25.44049但如果我这样做

$distance_output = distance(-50.12345, 100.1235,-60.12345,120.12345,'km');
echo $distance_output . '<br />;
echo $distance_output - 15.12345;

输出如下:

15.12345 
1.23639038e10

这些只是组成数字,但你可以看到distance()的输出看起来像一个数字,但是当我从中减去相同的数字时,它会吐出一个奇怪的指数数字。有什么想法吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我尝试了你的代码(你只是错过了一个简单的引用),输出是1042.1216629565和1026.9982129565,对我来说似乎没问题。

如果我将1042.1216629565减去1042.1216629565,则输出变为3.092281986028E-11:注意e 后的减去字符。

此数字等于0.00000000003092281986028,而不是零。这种差异在浮点计算中很常见。它可以通过舍入值二进制编码中的错误来解释。

请参阅维基百科:http://en.wikipedia.org/wiki/Floating_point,特别是关于四舍五入的部分。

如果要显示结果,请使用number_format()

如果你想比较两个浮点值,你必须使用类似的东西:

 $epsilon = 1e-6;
 if (abs($value1-$value2) <= $epsilon){
 }