php如何计算范围五百米,php实现mysql计算经纬度坐标距离的筛选附近范围POI的解决方案...

经测试,按照该公式和腾讯地图经纬度距离计算,精度基本上是匹配的,返回的单位为:km。

地球半径采用的是6378.137千米。

//选取小余800km的经纬度;

public function getNear()

{

global $db, $res;

dbc();

$city_lat = "29.800712";

$city_lng = "121.556758";

$sql = "select toilet_id,toilet_name,toilet_address,toilet_url,toilet_lon,toilet_lat,ROUND((6378.137 * acos (cos (radians($city_lat) )* cos(radians( toilet_lat ) )* cos(radians( toilet_lon ) - radians($city_lng) )+ sin (radians($city_lat) )* sin(radians( toilet_lat ))))) AS distance from " . $db->table('toilet') . " HAVING distance < 800 ORDER BY distance ASC";

$row = $db->queryall($sql);

$res["data"] = $row;

die(json_encode_lockdata($res));

}

{

"err": "",

"res": "",

"data": [

{

"toilet_id": "5",

"toilet_name": "单县东大医院",

"toilet_address": "山东省菏泽市单县舜师东路1号",

"toilet_url": "upload/preview/2020-11/3e29ff1cb9f04edc889f19962e05cf57.jpg",

"toilet_lon": "116.109825",

"toilet_lat": "34.775480",

"distance": "754"

},

{

"toilet_id": "1",

"toilet_name": "舜师路中段公厕",

"toilet_address": "山东省菏泽市单县舜师路",

"toilet_url": "upload/nopic.jpg",

"toilet_lon": "116.090331",

"toilet_lat": "34.778643",

"distance": "756"

},

{

"toilet_id": "4",

"toilet_name": "文化路公厕",

"toilet_address": "单县舜师路与文化路交叉口西南方向20米",

"toilet_url": "upload/preview/2020-11/627365751e1c62eb98d8f4ae472efc81.jpg",

"toilet_lon": "116.087551",

"toilet_lat": "34.780302",

"distance": "756"

}

]

}

Done !

本文同步分享在 博客“漏刻有时”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值