两个GPS位置之间的距离PHP


Distance between 2 GPS locations PHP

如果输入位置和数据库上的位置之间的距离小于50公里,我将尝试在字符串中显示连接的GPS位置。为此,我使用函数distance($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

NAN值的原因是输入和数据库GPS位置之间的差异为0。我把它们分开处理。

if($dis<100 &$dis!='NAN'){
     $stringa = $stringa . ":". $unz . " " . $glat . " " . $glong;
   }

会胜任这项工作。此外,我还建议使用Mysqli或pdo,因为它在PHP 5.5中不受欢迎,在更高版本的PHP 7中不受支持。