当前位置:
首页
文章
前端
详情

计算地图两点间距离

方式一

// 计算距离
function calcDistance(coord, coord2) {
  let lon1 = coord[0],
    lat1 = coord[1],
    lon2 = coord2[0],
    lat2 = coord2[1];
  let La1 = (lat1 * Math.PI) / 180.0;
  let La2 = (lat2 * Math.PI) / 180.0;
  let La3 = La1 - La2;
  let Lb3 = (lon1 * Math.PI) / 180.0 - (lon2 * Math.PI) / 180.0;
  let s =
    2 *
    Math.asin(
      Math.sqrt(
        Math.pow(Math.sin(La3 / 2), 2) +
          Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)
      )
    );
  s = s * 6378.137; // 地球半径
  s = Math.round(s * 10000) / 10000;
  return s;
}

调用

calcDistance([117.272597, 31.86047], [118.78871, 32.028276]); // 144.4262km

方式二

不是特别准,对比方式一有点差别

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;     
  if(s === 0) return 0;
  c = (1-sg)*(1-sl) + sf*sl;     
  if(c === 0) return 0;
  w = Math.atan(Math.sqrt(s/c));
  if(w === 0) return 0;
  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; 
}

调用

getDistance(25.102648 102.93465 25.102648 102.93465)

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。