두 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粉3739908572024-03-26 11:27:07
sin()
和 cos()
的范围在 -1 和 1 之间。因此,在第一次计算 $dist
时结果范围是 -2 到 2。然后将其传递给 acos()
,其参数必须介于 -1 和 1 之间。例如,acos(2)
NaN을 제공합니다. 그 밖의 모든 것도 NaN을 제공합니다.
공식이 무엇인지는 잘 모르겠지만 NaN은 여기서 나옵니다. 삼각함수를 주의 깊게 확인하세요.
P粉0051346852024-03-26 10:04:44
데이터베이스에서 추출하는 값이 문자열일 수 있으며 이로 인해 이 문제가 발생할 수 있습니다.
Kolink가 게시물에서 질문한 내용도 확인해 보세요.