Thinkphp5/TP5/PHP通过经纬度计算距离获取附近信息
发表于:2024-04-23 17:51:14浏览:176次
前言
实际开发中,常常需要获取用户附近的商家,思路是
获取用户位置(经纬度信息)
在数据库中查询在距离范围内的商家
注: 本文章内计算距离所使用地球半径统一为 6378.138 km
php代码
/**
* @param $lat 纬度
* @param $lng 经度
* @param $radius 半径,单位:km
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function get_near($lat,$lng,$radius = 1)
{
$m = $radius * 1000;
$distanceSql = "(6378.138 * 2 * asin(sqrt(pow(sin((lat * pi() / 180 - ".$lat." * pi() / 180) / 2),2) + cos(lat * pi() / 180) * cos(".$lat." * pi() / 180) * pow(sin((lng * pi() / 180 - ".$lng." * pi() / 180) / 2),2))) * 1000)";
// 获取附近的人
$list = Db::name('member')
->field("id,nickname,realname,lat,lng,".$distanceSql." as distance")
->whereRaw($distanceSql." <= ".$m)
->order('distance', 'ASC')
->select()
->each(function ($item) use ($lng,$lat){
$item['distance'] = round($item['distance']);
return $item;
});
return $this->json([
'status'=>1,
'msg'=>'success',
'data'=>[
'list'=>$list
]
]);
}
栏目分类全部>