关于php依据用户当前定位判断距离最近的商家或者别的

先来一个算经纬度的网站,可以对比结果
https://www.hhlink.com/经纬度/
后台PHP:

    public function gwz()
    {
    
    
		$lon1=$this->request->post('lon');
		$lat1=$this->request->post('lng');
		$table=$this->request->post('table');//需要查询的表
        $sql = $this->distance_sql($lon1,$lat1);

        $row = Db::query("select * ,".$sql."as distance  from cd_".$table." HAVING distance <= '100000'");
		
        return json($row);
    }

根据对比经纬度网站结果,相差无几,大致位置就行,都是算的直线距离
网上例子太多了,都可以看到
更改

//$lon1 用户当前经度  $lat1用户当前纬度  $lon2数据库经度的字段名  $lat2数据库纬度的字段名
public function distance_sql($lon1='',$lat1='',$lon2='lon',$lat2='lng')
    {
    
    
		$PI = 3.1415926; 
		//这里 /1000 可去可不去,看需要
        $sql = "round(6378.138*2*asin(sqrt(pow(sin( ({
      
      $lat1}*$PI/180-{
      
      $lat2}*$PI/180)/2),2)+cos({
      
      $lat1}*$PI/180)*cos({
      
      $lat2}*$PI/180)* pow(sin( ({
      
      $lon1}*$PI/180-{
      
      $lon2}*$PI/180)/2),2)))*1000 / 1000) ";
        return $sql;
         
    }

最后的/1000 ,必须放进括号里面去,不然会当作字段去查询而报错没有这个字段,多细心点(对我自己说的)

猜你喜欢

转载自blog.csdn.net/weixin_43018356/article/details/110730478
今日推荐