如果输入位置与数据库上的距离小于50公里,我试图在字符串中显示连接的GPS位置。为此,我使用函数距离($ lat1,$ lon1,$ lat2,$ lon2,$ unit),其中包含两个位置的纬度和经度参数。在许多情况下,此函数似乎工作正常,但有时我会在字符串中输出 NAN 作为输出(点之间的距离)。我不知道是什么导致它输入的功能。请检查下面的代码和示例输入输出。 PS:$ date是输入位置的纬度。
function getGPS($date,$gps){
$stringa="";
$connx = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $connx ) {
die('Could not connect: ' . mysql_error());
}
$sqlx = 'SELECT gpslat,gpslong FROM whosonline';
mysql_select_db('revietbw_reviewitappDB');
$retvalx = mysql_query( $sqlx, $connx );
if(! $retvalx ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_assoc($retvalx)) {
$glat=(float)$row['gpslat'];
$glong=(float)$row['gpslong'];
$dis=distance((float)$date, (float)$gps, $glat, $glong, "K");
echo $dis;
if($dis<100){
$stringa = $stringa . ":" . $glat . " " . $glong;
}
}
//echo "Fetched data successfully\n";
mysql_close($connx);
return $stringa;
}
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$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;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
示例输入:gpslong=101.1020&gpslat=11.1241
输出:NANNANNAN872.77757900898
答案 0 :(得分:0)
NAN值的原因是输入和数据库GPS位置之间的0差异。我分开处理了它们。
if($dis<100 &$dis!='NAN'){
$stringa = $stringa . ":". $unz . " " . $glat . " " . $glong;
}
会做这个工作。另外我还建议使用Mysqli或pdo,因为它在PHP 5.5中已被弃用,而在PHP 7中则不受支持。