J'ai une fonction qui calcule la distance entre deux coordonnées GPS. J'obtiens ensuite toutes les coordonnées de la base de données et les parcoure toutes pour obtenir la distance entre la coordonnée actuelle et la coordonnée précédente, puis je l'ajoute à un tableau pour l'appareil GPS spécifique. Pour une raison quelconque, il renvoie NaN. J'ai essayé de le convertir en double, en entier et d'arrondir le nombre.
Voici mon code 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);
sin()
和cos()
的范围在 -1 和 1 之间。因此,在第一次计算$dist
时结果范围是 -2 到 2。然后将其传递给acos()
,其参数必须介于 -1 和 1 之间。例如,acos(2)
donne NaN . Tout le reste donne également NaN.Je ne suis pas sûr de ce que la formule est censée être, mais c'est de là que vient votre NaN. Vérifiez soigneusement vos fonctions trigonométriques.
La valeur que vous extrayez de la base de données peut être une chaîne, ce qui provoquera ce problème.
Vous voudrez peut-être également consulter les questions posées par Kolink dans son message.