首页 新闻 会员 周边 捐助

高德地图获取两个经纬度点间直线距离JS/PHP/SQL代码

0
[待解决问题]

最近做了几个小站,要求要定位到当前地址并且显示附近多少公里内的商家和产品。

定位好办,直接用高德地图搞定。有不需要显示地图又需要定位的页面把地图直接隐藏掉都可以。或者可以直接调用高德的定位组件。

但是显示附近多少公里的商家和产品就难搞了。商家和产品加好经纬度地址,然后定位一个地址,通过这两个经纬度地址去算他们间的距离。

网上找了好多,基本上都是同一个算法:

ACOS(SIN((PI() / 180) * 114.055036) * SIN((PI() / 180) * 114.114627) + COS(SIN((PI() / 180) * 114.055036) * COS((PI() / 180) * 114.114627) * COS((PI() / 180) * 22.904124 - (PI() / 180) * 22.52153)) * 6371;

然而并没多大软用,距离算不正确,与实际距离相差挺大
所以我想到直接到高德地图去扒他的测距的方法。

找了好久找到他的原生方法
var d = Math.PI/180
, e = Math.cos
, f = b.P * d
, h = c.P * d
, k = 2 * 6378137
, d = c.Q * d - b.Q * d
, e = (1 - e(h - f) + (1 - e(d)) * e(f) * e(h)) / 2;
return k * Math.asin(Math.sqrt(e))

然后转成SQL语句

12756.274 * asin(sqrt((1-cos(cp * pi()/180 - bppi()/180)+(1-cos(cqpi()/180 - bqpi()/180))cos(bppi()/180)cos(cp*pi()/180))/2))

然后套用为php代码

$list = model('seller')->query('(12756.274 * asin(sqrt((1-cos('.$longitude.' * pi()/180 - longitudepi()/180)+(1-cos('.$latitude.'pi()/180 - latitudepi()/180))cos(longitudepi()/180)cos('.$longitude.'*pi()/180))/2))) < 5');

搞定,收工,就是这么简单,不知道大家是否看懂了,若没有看懂八叔模版堂欢迎大家前来吐槽。

北城丶阿文的主页 北城丶阿文 | 菜鸟二级 | 园豆:202
提问于:2018-10-10 09:38
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册