私は2つのGPS座標間の距離を計算する関数を持っています。私はデータベースからすべての座標を取得し、現在のものと前のものとの間の距離を得るためにそれらをすべてループし、それを特定のGPSデバイス用の配列に追加します。なんらかの理由でそれは返されたNaNです。私は倍精度浮動小数点型(int)としてキャストしようとしました。ここでNaNを返すPHP
は私の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);
正確に何がうまくいかないのかを詳細に表示できますか? –
あなたはデータベースから取得する値が文字列ではないことを確認していますか? – Chad
私はdistance()式の各段階でデバッグ出力を入れて、nanが生成された場所を正確に把握することをお勧めします。 –