如何使用方向角和速度计算下一次的经纬度 [英] how to use direction angle and speed to calculate next time's latitude and longitude

查看:28
本文介绍了如何使用方向角和速度计算下一次的经纬度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道我现在的位置({lat:x,lon:y})我知道我的速度和方向角;下一次如何预测下一个位置?

I have know my current position({lat:x,lon:y}) and I know my speed and direction angle; How to predict next position at next time?

推荐答案

首先,根据你当前的速度和你已知的时间间隔(下一次")计算你将要行驶的距离:

First, calculate the distance you will travel based on your current speed and your known time interval ("next time"):

distance = speed * time

然后你可以使用这个公式来计算你的新位置(lat2/lon2):

Then you can use this formula to calculate your new position (lat2/lon2):

lat2 =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat2))
lon2=mod( lon1-dlon +pi,2*pi )-pi

有关 Javascript 的实现,请参阅 LatLon.prototype.destinationPointrel="noreferrer">本页

For an implementation in Javascript, see the function LatLon.prototype.destinationPoint on this page

更新对于那些希望更充实地实现上述内容的人,这里是 Javascript:

Update for those wishing a more fleshed-out implementation of the above, here it is in Javascript:

  /**
  * Returns the destination point from a given point, having travelled the given distance
  * on the given initial bearing.
  *
  * @param   {number} lat - initial latitude in decimal degrees (eg. 50.123)
  * @param   {number} lon - initial longitude in decimal degrees (e.g. -4.321)
  * @param   {number} distance - Distance travelled (metres).
  * @param   {number} bearing - Initial bearing (in degrees from north).
  * @returns {array} destination point as [latitude,longitude] (e.g. [50.123, -4.321])
  *
  * @example
  *     var p = destinationPoint(51.4778, -0.0015, 7794, 300.7); // 51.5135°N, 000.0983°W
  */
  function destinationPoint(lat, lon, distance, bearing) {
     var radius = 6371e3; // (Mean) radius of earth

     var toRadians = function(v) { return v * Math.PI / 180; };
     var toDegrees = function(v) { return v * 180 / Math.PI; };

     // sinφ2 = sinφ1·cosδ + cosφ1·sinδ·cosθ
     // tanΔλ = sinθ·sinδ·cosφ1 / cosδ−sinφ1·sinφ2
     // see mathforum.org/library/drmath/view/52049.html for derivation

     var δ = Number(distance) / radius; // angular distance in radians
     var θ = toRadians(Number(bearing));

     var φ1 = toRadians(Number(lat));
     var λ1 = toRadians(Number(lon));

     var sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1);
     var sinδ = Math.sin(δ), cosδ = Math.cos(δ);
     var sinθ = Math.sin(θ), cosθ = Math.cos(θ);

     var sinφ2 = sinφ1*cosδ + cosφ1*sinδ*cosθ;
     var φ2 = Math.asin(sinφ2);
     var y = sinθ * sinδ * cosφ1;
     var x = cosδ - sinφ1 * sinφ2;
     var λ2 = λ1 + Math.atan2(y, x);

     return [toDegrees(φ2), (toDegrees(λ2)+540)%360-180]; // normalise to −180..+180°
  }

这篇关于如何使用方向角和速度计算下一次的经纬度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆