Maison > Questions et réponses > le corps du texte
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);
P粉3739908572024-03-26 11:27:07
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.
P粉0051346852024-03-26 10:04:44
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.