我有一个计算两个 GPS 坐标之间距离的函数。然后我从数据库中获取所有坐标并遍历它们以获得当前坐标和前一个坐标之间的距离,然后将其添加到特定 GPS 设备的数组中。出于某种原因,它是返回 NaN。我尝试将其转换为双精度型、整数型和四舍五入。
这是我的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);
Run Code Online (Sandbox Code Playgroud)
sin()and的范围cos()介于 -1 和 1 之间。因此,在您第一次计算$dist结果范围时,范围是 -2 到 2。然后将acos()其传递给,其参数必须介于 -1 和 1 之间。因此acos(2),例如给出 NaN。从那里开始的所有其他内容也都给出了 NaN。
我不确定公式应该是什么,但这就是您的 NaN 的来源。仔细检查你的三角函数。
| 归档时间: |
|
| 查看次数: |
26185 次 |
| 最近记录: |