因为专注,所以专业
2005 - 2018

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

时间:2018-08-28 16:35:24    作者:八叔模板堂

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

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

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

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


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

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

赞(231
免费拨打  180-0797-1768
免费拨打  180-0797-1768免费拨打 180-0797-1768
微信二维码
手机二维码
返回顶部
返回顶部返回顶部