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);
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.
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.