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);
}



