mysql利用2个坐标计算出距离
publicfunctionindex(){$page=$this->request->param('page/d',1);//分页数量$limit=$this->request->param('limit/d&
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); }