【实战】前端必会 —— js根据给定两点经纬度,计算距离

本文介绍了如何使用JavaScript计算地球上两点的经纬度距离。通过将角度转换为弧度并应用数学公式,可以得出两个坐标点之间的精确距离。文章提供了三个不同的函数实现,包括了正弦和余弦的计算方式。这些函数可以用于地理信息系统或导航应用中,以确定位置间的距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


已知地球上两点的经度、纬度:(x1, y1), (x2, y2),其中x1,x2为经度,y1,y2为纬度;

在程序中计算需要转化为弧度(*π/180)
地球半径为R=6378.137 km

则两点距离:
d = R ∗ a r c o s [ c o s ( y 1 ) ∗ c o s ( y 2 ) ∗ c o s ( x 1 − x 2 ) + s i n ( y 1 ) ∗ s i n ( y 2 ) ] d = R*arcos[cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)] d=Rarcos[cos(y1)cos(y2)cos(x1x2)+sin(y1)sin(y2)]

扩展资料:

经度分为360度,每15度1个时区,其中0度的叫本初子午线,是第一个进入新一天的地方,然后向西每过1个时区就相差1小时。例如是早上5点,那么向西一个时区就是早上4点,再过1个时区就是早上3点,依此类推,向东则相反,一直到本初子午线。

纬度赤道的纬度为0°,将行星平分为南半球和北半球。纬度是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。

纬度数值在0至30度之间的地区称为低纬地区,纬度数值在30至60度之间的地区称为中纬地区,纬度数值在60至90度之间的地区称为高纬地区。

参考资料:经纬度_百度百科

export function GetDistance1( lng1,  lat1,  lng2,  lat2){
  // 角度转弧度
  let a = Math.PI / 180;

  let t1 = Math.sin(lat1 * a) * Math.sin(lat2 * a);
  let t2 = Math.cos(lat1 * a) * Math.cos(lat2 * a);
  let t3 = Math.cos(lng1 * a - lng2 * a);
  let t4 = t2 * t3;
  let t5 = t1 + t4;
  let s = Math.atan(-t5/Math.sqrt(-t5 * t5 +1)) + 2 * Math.atan(1);
  s = s *6378.137 ;// EARTH_RADIUS;
  s = Math.round(s * 10000) / 10000;
  return s;
}

export function GetDistance2( lng1,  lat1,  lng2,  lat2){
  let radLat1 = lat1*Math.PI / 180.0;
  let radLat2 = lat2*Math.PI / 180.0;
  let a = radLat1 - radLat2;
  let  b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0;
  let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
  s = s *6378.137 ;// EARTH_RADIUS;
  s = Math.round(s * 10000) / 10000;
  return s;
}

export function GetDistance3( lng1,  lat1,  lng2,  lat2){
  let a = Math.PI / 180;
  let s = Math.acos(Math.cos(lat1 * a) * Math.cos(lat2 * a) * Math.cos(lng1 * a - lng2 * a) + Math.sin(lat1 * a) * Math.sin(lat2 * a))
  s = s *6378.137 // EARTH_RADIUS;
  s = Math.round(s * 10000) / 10000;
  return s;
}

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序边界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值