搜尋

首頁  >  問答  >  主體

PHP回傳NaN值

我有一個函數可以計算兩個 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粉914731066P粉914731066245 天前631

全部回覆(2)我來回復

  • P粉373990857

    P粉3739908572024-03-26 11:27:07

    sin()cos() 的範圍在 -1 和 1 之間。因此,在第一次計算 $dist 時結果範圍是 -2 到 2。然後將其傳遞給 acos(),其參數必須介於 -1 和 1 之間。例如,acos(2) 給出 NaN 。那裡的其他所有內容也給出 NaN。

    我不確定公式應該是什麼,但這就是你的 NaN 的來源。仔細檢查你的三角函數。

    回覆
    0
  • P粉005134685

    P粉0051346852024-03-26 10:04:44

    您從資料庫中提取的值可能是字串,這會導致此問題。

    您可能還想查看 Kolink 在他的帖子中提出的問題。

    回覆
    0
  • 取消回覆