计算两个经纬度点之间的方位角(初始方位角)

13 篇文章 0 订阅
1 篇文章 0 订阅
本文介绍了如何利用大圆距离公式计算两个经纬度点之间的方位角,提供了一个JavaScript函数示例,并提醒在长距离或高纬度时可能需要考虑精度问题。
摘要由CSDN通过智能技术生成

最近做地图上轨迹计算方位角的时候,需要计算两个经纬度点之间的方位角,这里把计算过程记录分享一下。

一:思路

要计算两个经纬度点之间的夹角(通常称为方位角或初始方位角),你可以使用大圆距离公式或者一些近似方法。
假设你有两个点,点A(纬度LatA, 经度LonA)和点B(纬度LatB, 经度LonB)。你可以使用以下公式来计算从点A到点B的方位角(以度为单位):
计算经纬度差值(以弧度为单位):
ΔLon = LonB - LonA
ΔLat = LatB - LatA
使用以下公式计算方位角(单位为弧度):
θ = atan2(sin(ΔLon) * cos(LatB), cos(LatA) * sin(LatB) - sin(LatA) * cos(LatB) * cos(ΔLon))
最后将方位角从弧度转换为度:
θ_deg = θ * (180 / π)
由于地球是一个椭球体,不是完美的球体,因此上述公式在长距离或高纬度地区可能不够精确。对于需要更高精度的应用,你可能需要使用更复杂的地理计算方法或库。上诉公式只能大概计算

二:实例代码


//计算旋转角度
function getAngle( lon1, lat1, lon2,lat2) {
  const deg2rad = Math.PI / 180;
  const dlat = (lat2 - lat1) * deg2rad;
  const dlon = (lon2 - lon1) * deg2rad;
  const y = Math.sin(dlon) * Math.cos(lat2 * deg2rad);
  const x = Math.cos(lat1 * deg2rad) * Math.sin(lat2 * deg2rad) - Math.sin(lat1 * deg2rad) * Math.cos(lat2 * deg2rad) * Math.cos(dlon);
  const angle = Math.atan2(y, x) * 180 / Math.PI;
  return angle;
}

// 示例用法  
var lat1 = 39.907522; // 纬度1  
var lon1 = 116.3972333; // 经度1  
var lat2 = 31.230422; // 纬度2  
var lon2 = 121.473733; // 经度2  
  
var bearing = getAngle( lon1, lat1, lon2,lat2);  
console.log("方位角(初始方位角)是: " + bearing + "°");
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
计算另一经纬度前,首先要确认给定的初始经纬度是指地球上的哪个位置。经纬度是地理坐标系统的一种表示方法,由经度和纬度两个值组成。 经度指的是地球表面上从东到西的角度,以0度经线为参考,向东方向递增,向西方向递减。以0度经线为参考,东经90度为正东经,西经90度为正西经。 纬度指的是地球表面上从南到北的角度,以赤道为参考,以0度纬线为赤道,向北方向递增,向南方向递减。以赤道为参考,北纬90度为北极,南纬90度为南极。 如果给定初始经纬度、方向和距离,可以根据这些信息计算出另一经纬度。具体的计算方法如下: 1. 首先,将给定的初始经纬度转换为弧度制。经度的转换公式为:经度(弧度)= 经度(度) * π / 180。纬度的转换公式也是类似的。 2. 根据给定的方向和距离,计算出在坐标系上的位移量。由于地球是一个旋转椭球体,所以需要考虑纬度对经度的影响。经度的位移量可以通过以下公式计算:经度(位移)= 距离 * sin(方位角) / (地球半径 * cos(纬度))。纬度的位移量可以通过以下公式计算:纬度(位移)= 距离 * cos(方位角) / 地球半径。 3. 将初始经纬度的位移量加上计算得到的位移量,即可得到另一经纬度。 4. 最后,将计算得到的经纬度转换回度数制。经度的度数制转换公式为:经度(度)= 经度(弧度) * 180 / π。纬度的度数制转换公式也是类似的。 通过以上的计算方法,可以根据给定的初始经纬度、方向和距离来计算出另一经纬度。需要注意的是,这个计算方法是基于地球是一个旋转椭球体的模型,实际应用中还需要考虑更多的地球参数和修正。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Devil枫

发财小手鼓励一下作者大大

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

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

打赏作者

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

抵扣说明:

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

余额充值