Heim > Fragen und Antworten > Hauptteil
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粉3739908572024-03-26 11:27:07
sin()
和 cos()
的范围在 -1 和 1 之间。因此,在第一次计算 $dist
时结果范围是 -2 到 2。然后将其传递给 acos()
,其参数必须介于 -1 和 1 之间。例如,acos(2)
给出 NaN 。那里的其他所有内容也给出 NaN。
我不确定公式应该是什么,但这就是你的 NaN 的来源。仔细检查你的三角函数。