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

站长手记 作者: 2024-09-03 06:25:02
高德地图获取两个经纬度点间直线距离JS/PHP/SQL代码

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

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

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

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


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 - bp*pi()/180)+(1-cos(cq*pi()/180 - bq*pi()/180))*cos(bp*pi()/180)*cos(cp*pi()/180))/2))

然后套用为php代码

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

搞定,收工。应该看的懂的吧

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_73431.html