PHP renvoie la valeur NaN
P粉914731066
P粉914731066 2024-03-25 17:22:54
0
2
661

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粉914731066
P粉914731066

répondre à tous(2)
P粉373990857

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粉005134685

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal