PHP返回NaN值
P粉914731066
P粉914731066 2024-03-25 17:22:54
0
2
614

我有一个函数可以计算两个 GPS 坐标之间的距离。然后,我从数据库中获取所有坐标,并循环遍历所有坐标,以获得当前坐标与前一个坐标之间的距离,然后将其添加到特定 GPS 设备的数组中。由于某种原因,它返回 NaN。我尝试过将其转换为双精度型、整数型,并对数字进行四舍五入。

这是我的 PHP 代码:

function distance($lat1, $lon1, $lat2, $lon2) {
      $lat1 = round($lat1, 3);
      $lon1 = round($lon1, 3);
      $lat2 = round($lat2, 3);
      $lon2 = round($lon2, 3);
      $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;
      if($miles < 0) $miles = $miles * -1;
      return ($miles * 1.609344);  
}
$this->db->query("SELECT * FROM `gps_loc` WHERE `imeiN`='" . $sql . "' AND `updatetime`>=$timeLimit ORDER BY `_id` DESC");
    $dist = array();
    $dist2 = array();
    while($row = $this->db->getResults()) {
        $dist2[$row['imeiN']] = 0;
        $dist[$row['imeiN']][]["lat"] = $row['lat'];
        $dist[$row['imeiN']][count($dist[$row['imeiN']]) - 1]["lng"] = $row['lon'];
    }

    foreach($dist as $key=>$d) {
        $a = 0;
        $b = 0;
        foreach($dist[$key] as $n) {
            if($a > 0) {
                $dist2[$key] += $this->distance($n['lat'], $n['lng'], $dist[$key][$a - 1]['lat'], $dist[$key][$a - 1]['lng']);
            }
            $a++;
        }

    }
    echo json_encode($dist2);

P粉914731066
P粉914731066

全部回复(2)
P粉373990857

sin()cos() 的范围在 -1 和 1 之间。因此,在第一次计算 $dist 时结果范围是 -2 到 2。然后将其传递给 acos(),其参数必须介于 -1 和 1 之间。例如,acos(2) 给出 NaN 。那里的其他所有内容也给出 NaN。

我不确定公式应该是什么,但这就是你的 NaN 的来源。仔细检查你的三角函数。

P粉005134685

您从数据库中提取的值可能是字符串,这会导致此问题。

您可能还想查看 Kolink 在他的帖子中提出的问题。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!