Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在纬度和经度的帮助下找到20公里以内的用户_Php_Mysql_Json - Fatal编程技术网

Php 如何在纬度和经度的帮助下找到20公里以内的用户

Php 如何在纬度和经度的帮助下找到20公里以内的用户,php,mysql,json,Php,Mysql,Json,我必须根据乘客lat和日志查找20公里内的所有驾驶员 我有下面两张驾驶员和乘客表。 乘客\u idpassenger\u姓名乘客\u latpassenger\u日志 1 David123.0755.03 2 Sunilxyz.pq abc.7 和驱动程序表 驱动程序\u ID驱动程序\u名称驱动程序\u车床驱动程序\u日志 1 Anil123.0755.03 2 Jamisxyz.pq abc.7 现在我有了输入参数passenger_lat和passenger_log。基于此

我必须根据乘客lat和日志查找20公里内的所有驾驶员

我有下面两张驾驶员和乘客表。
乘客\u idpassenger\u姓名乘客\u latpassenger\u日志
1 David123.0755.03
2 Sunilxyz.pq abc.7


和驱动程序表


驱动程序\u ID驱动程序\u名称驱动程序\u车床驱动程序\u日志
1 Anil123.0755.03
2 Jamisxyz.pq abc.7

现在我有了输入参数passenger_lat和passenger_log。基于此,我必须返回20公里内的所有驾驶员详细信息

 SELECT *, ( 6371 * acos( cos( radians({$lat}) ) * cos( radians( lat ) ) * cos( radians(   lng ) - radians({$lng}) ) + sin( radians({$lat}) ) * sin( radians( lat ) ) ) ) AS distance FROM positions HAVING distance <= {$radius} ORDER BY distance ASC 

SELECT*,(6371*acos(cos(radians({$lat}))*cos(radians(lat))*cos(radians(lng)-radians({$lng}))+sin(radians({$lat}))*sin(radians(lat)))作为与具有距离的位置之间的距离
StackOverflow不是软件写入服务。请展示你自己的努力和你被困的地方。是的,先生。使用以下代码,如SELECT*,(6371*acos(cos(弧度({$lat}))*cos(弧度(
lat
)*cos(弧度(
lng
)-radians({$lng}))+sin(弧度({$lat}))*sin(弧度(
lat
))作为距离
位置的距离
要从本地主机或服务器测试此代码,只需使用localhost/filename.php?action=find\u driver&user\u latitude=some数值和user\u longitude=some数值
class distance
{
    public function all_user()
    {

        $query="select * from driver_user";
        $query_run=  mysql_query($query);
       // $row=  mysql_fetch_assoc($query_run);
        while($row=  mysql_fetch_assoc($query_run))
        {
         $dis=  $this->call_distance(10,20,$row['current_latitude'],$row['current_longitude']);
        }
    }

  public function call_distance($lat1, $lon1, $lat2, $lon2) {

      $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;
      return ($miles * 1.609344);


}
}
$distance=new distance();
$distance->all_user();
<?php

class driver_service
{
    public function find_driver($data)
    {
        $driver_details=array();
        $driver_detail=array();
        $query="select driver_user_id,first_name,last_name,phone_no,cpf_no,driver_email_id,driver_image,current_latitude,current_longitude from driver_user";
        $query_run=  mysql_query($query);
       // $row=  mysql_fetch_assoc($query_run);
        while($row=  mysql_fetch_assoc($query_run))
        {
         $driver=array();
         $dis=  $this->call_distance($data['user_latitude'],$data['user_longitude'],$row['current_latitude'],$row['current_longitude']);


         if($dis<=50)
         {
            $driver['driver_details']=$row; 
            $driver_detail[]=$driver;

         }
      }

      if(empty($driver_detail))
      {
          $driver_details['status']="2~there is no driver between 20 kms";

      }
      else{
      $driver_details['status']="1~success";    
      $driver_details['details']=$driver_detail;
      }
      echo json_encode($driver_details);
    } 
      public function call_distance($lat1, $lon1, $lat2, $lon2) {

      $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;
      return ($miles * 1.609344);
      }


 }
 $driver_service=new driver_service();


if($_REQUEST['action'] == 'find_driver')
{
    $driver_service->find_driver($_REQUEST);

}