Heim  >  Fragen und Antworten  >  Hauptteil

PHP gibt den NaN-Wert zurück

Ich habe eine Funktion, die den Abstand zwischen zwei GPS-Koordinaten berechnet. Dann hole ich alle Koordinaten aus der Datenbank und durchlaufe sie alle, um den Abstand zwischen der aktuellen Koordinate und der vorherigen Koordinate zu ermitteln, und füge ihn dann einem Array für das spezifische GPS-Gerät hinzu. Aus irgendeinem Grund wird NaN zurückgegeben. Ich habe versucht, es in ein Double und eine Ganzzahl umzuwandeln und die Zahl zu runden.

Das ist mein PHP-Code:

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粉914731066P粉914731066231 Tage vor613

Antworte allen(2)Ich werde antworten

  • P粉373990857

    P粉3739908572024-03-26 11:27:07

    sin()cos() 的范围在 -1 和 1 之间。因此,在第一次计算 $dist 时结果范围是 -2 到 2。然后将其传递给 acos(),其参数必须介于 -1 和 1 之间。例如,acos(2) 给出 NaN 。那里的其他所有内容也给出 NaN。

    我不确定公式应该是什么,但这就是你的 NaN 的来源。仔细检查你的三角函数。

    Antwort
    0
  • P粉005134685

    P粉0051346852024-03-26 10:04:44

    您从数据库中提取的值可能是字符串,这会导致此问题。

    您可能还想查看 Kolink 在他的帖子中提出的问题。

    Antwort
    0
  • StornierenAntwort