js计算两个经纬度之间的直线距离


function getRad(d){   
   var PI = Math.PI;    
   return d*PI/180.0;    
}

/**
 * 获取两个经纬度之间的距离
 * @param lat1 第一点的纬度
 * @param lng1 第一点的经度
 * @param lat2 第二点的纬度
 * @param lng2 第二点的经度
 * @returns {Number}
 */

function getDistance(lat1,lng1,lat2,lng2){
     var f = getRad((lat1 + lat2)/2);     
     var g = getRad((lat1 - lat2)/2);     
     var l = getRad((lng1 - lng2)/2);     
     var sg = Math.sin(g);     
     var sl = Math.sin(l);     
     var sf = Math.sin(f);     
     var s,c,w,r,d,h1,h2;     
     var a = 6378137.0;//The Radius of eath in meter.   
     var fl = 1/298.257;     
     sg = sg*sg;     
     sl = sl*sl;     
     sf = sf*sf;     
     s = sg*(1-sl) + (1-sf)*sl;     
     c = (1-sg)*(1-sl) + sf*sl;     
     w = Math.atan(Math.sqrt(s/c));     
     r = Math.sqrt(s*c)/w;     
     d = 2*w*a;     
     h1 = (3*r -1)/2/c;     
     h2 = (3*r +1)/2/s;     
     s = d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));   
     s = s/1000;   
     s = s.toFixed(2);//指定小数点后的位数。   
     return s; 
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值