PHP mengembalikan nilai NaN
P粉914731066
P粉914731066 2024-03-25 17:22:54
0
2
663

Saya mempunyai fungsi yang mengira jarak antara dua koordinat GPS. Saya kemudian mendapatkan semua koordinat daripada pangkalan data dan gelung melalui mereka semua untuk mendapatkan jarak antara koordinat semasa dan koordinat sebelumnya dan kemudian menambahnya pada tatasusunan untuk peranti GPS tertentu. Atas sebab tertentu ia mengembalikan NaN. Saya telah cuba menukarnya kepada dua kali ganda, integer dan membundarkan nombor itu.

Ini kod PHP saya:

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

membalas semua(2)
P粉373990857

sin()cos() 的范围在 -1 和 1 之间。因此,在第一次计算 $dist 时结果范围是 -2 到 2。然后将其传递给 acos(),其参数必须介于 -1 和 1 之间。例如,acos(2) memberi NaN . Semua yang lain di sana juga memberikan NaN.

Saya tidak pasti apakah formula yang sepatutnya, tetapi dari situlah NaN anda datang. Semak fungsi trigonometri anda dengan teliti.

P粉005134685

Nilai yang anda ekstrak daripada pangkalan data mungkin rentetan, yang akan menyebabkan masalah ini.

Anda juga mungkin ingin menyemak soalan yang ditanya oleh Kolink dalam siarannya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan