2个GPS位置之间的距离PHP

Posted

技术标签:

【中文标题】2个GPS位置之间的距离PHP【英文标题】:Distance between 2 GPS locations PHP 【发布时间】:2016-11-24 03:29:00 【问题描述】:

如果输入位置与数据库中的位置之间的距离小于 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&amp;gpslat=11.1241 输出:NANNANNAN872.77757900898

【问题讨论】:

请立即停止使用mysql_函数。它们已在 php 5.5 中被弃用并在 PHP 7 中被删除。改为使用 mysqli_ 函数或 PDO 几乎完全相同:***.com/questions/8696755/php-returning-nan 旁注:MySQL 5.6.1 + 有 ST_DISTANCE 可以完全满足您的需求(假设您将 long/lat 转换为几何图形)。检查dev.mysql.com/doc/refman/5.6/en/spatial-analysis-functions.html 可能会为您省去很多麻烦。 现在回答您的实际问题:检查函数参数以了解您获得 NaN 的情况。确保前 4 个是有效数字,而不是 infinity/nan 如果$date 是纬度,那么$gps 是经度吗?相关:停止命名你的变量 >:( 【参考方案1】:

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

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

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

【讨论】:

以上是关于2个GPS位置之间的距离PHP的主要内容,如果未能解决你的问题,请参考以下文章

C、计算两个GPS位置之间的距离?

获取2个GPS坐标xamarin之间的准确距离

根据 GPS 位置之间的距离过滤对象数组(javascript)

车载GPS跟踪设备

2个小数点之间的距离[重复]

距离,Google Maps v2 上的 gps 不准确