찾다

 >  Q&A  >  본문

PHP는 NaN 값을 반환합니다.

두 GPS 좌표 사이의 거리를 계산하는 기능이 있습니다. 그런 다음 데이터베이스에서 모든 좌표를 가져오고 이를 모두 반복하여 현재 좌표와 이전 좌표 사이의 거리를 얻은 다음 이를 특정 GPS 장치의 배열에 추가합니다. 어떤 이유로 NaN을 반환합니다. 나는 그것을 double, 정수로 변환하고 숫자를 반올림해 보았습니다.

이것은 내 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粉914731066P粉914731066245일 전630

모든 응답(2)나는 대답할 것이다

  • P粉373990857

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

    sin()cos() 的范围在 -1 和 1 之间。因此,在第一次计算 $dist 时结果范围是 -2 到 2。然后将其传递给 acos(),其参数必须介于 -1 和 1 之间。例如,acos(2) NaN을 제공합니다. 그 밖의 모든 것도 NaN을 제공합니다.

    공식이 무엇인지는 잘 모르겠지만 NaN은 여기서 나옵니다. 삼각함수를 주의 깊게 확인하세요.

    회신하다
    0
  • P粉005134685

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

    데이터베이스에서 추출하는 값이 문자열일 수 있으며 이로 인해 이 문제가 발생할 수 있습니다.

    Kolink가 게시물에서 질문한 내용도 확인해 보세요.

    회신하다
    0
  • 취소회신하다