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

我有一個函數可以計算兩個 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 在他的帖子中提出的問題。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板