当前位置:首页>>问题

mysql利用2个坐标计算出距离

publicfunctionindex(){$page=$this->request->param('page/d',1);//分页数量$limit=$this->request->param('limit/d&

admin
    public function index(){
        $page = $this->request->param('page/d', 1);//分页数量
        $limit = $this->request->param('limit/d', 10);//分页数量
        $search= $this->request->param('search', '');//查询内容
        $longitude=$this->request->param('lng',0);
        $latitude=$this->request->param('lat',0);
        
        $store_id = $this->request->param('store_id',0);
        
        $field = "*";
        $orderField = "createtime";
        $order = "desc";
        if($longitude && $latitude){
            $field ="*,(6378.138 * 2 * asin(sqrt(pow(sin((latitude * pi() / 180 - ".$latitude." * pi() / 180) / 2),2) + cos(latitude * pi() / 180) * cos(".$latitude." * pi() / 180) * pow(sin((longitude * pi() / 180 - ".$longitude." * pi() / 180) / 2),2))) * 1000) as distance";
            $orderField = "distance";
            $order = "asc";
        }
        $list = $this->model->field($field)->where('status','normal')->where(function ($query) use($search){
            if($search) {
                $query->where('name', 'like', $search);
            }
        })->order($orderField,$order)->paginate([
            'page'=>$page,
            'list_rows'=>$limit
        ])->each(function ($item){
            $images = $item['cover_image']??[];
            if (!empty($images) && is_string($images)) {
                $images = explode(',', $images);
                foreach ($images as &$image) {
                    $image = $this->request->domain().$image;
                }
            }
            if(count($images)>0){
                $item['cover_image'] = $images[0];
            }
            else{
                $item['cover_image'] = '';
            }
            if($item['start_time'] && $item['end_time']){
                $item['time'] = $item['start_time'].' 至 '. $item['end_time'];
            }
            else if($item['start_time']){
                $item['time'] = $item['start_time'];
            }
            else if($item['end_time']){
                $item['time'] = $item['end_time'];
            }
            else{
                $item['time'] = '';
            }
            if(isset($item['distance'])){
                if($item['distance'] > 1000){
                    $item['distance'] = round($item['distance']/1000) .'千米';
                }
                else{
                    $item['distance'] = round($item['distance']) .'米';
                }
            }
            else{
                $item['distance'] = '未知距离';
            }
            $item->hidden(['introduce']);
        });

        $this->success('获取成功',$list);
    }



返回顶部