GPS/GIS 计算:根据运动/每小时预测未来位置的算法?

2024-03-18

寻找资源或算法来在导航应用程序中计算以下内容:

如果我当前的 GPS 位置为 (0,0) 并且我以 15 英里/小时的速度前进 32 度,我如何计算 10 秒后我的位置?

i.e.: GPSCoordinate predictedCoord = GPSCoordinate.FromLatLong(0, 0).AddByMovement(32, 15, TimeSpan.FromSeconds(10));

Edit:当前代码基于以下答案:

public GPSCoordinate AddMovementMilesPerHour(double heading, double speedMph, TimeSpan duration)
{
    double x = speedMph * System.Math.Sin(heading * pi / 180) * duration.TotalSeconds / 3600;
    double y = speedMph * System.Math.Cos(heading * pi / 180) * duration.TotalSeconds / 3600;

    double newLat = this.Latitude + 180 / pi * y / earthRadius;
    double newLong = this.Longitude + 180 / pi / System.Math.Sin(this.Latitude * pi / 180) * x / earthRadius;

    return GPSCoordinate.FromLatLong(newLat, newLong);
}

这是完整的参数答案:

变量:

  • heading:航向(即从方位角 0° 开始的向后角度,以度为单位)
  • speed:速度(即速度矢量的范数,以英里/小时为单位)
  • lat0, lon0:初始坐标(以度为单位)
  • dtime:从起始位置开始的时间间隔,以秒为单位
  • lat, lon:预测坐标(以度为单位)
  • pi : the pi常数 (3.14159...)
  • Rt: 地球半径miles(6378137.0 米,即 3964.037911746 英里)

在(东、北)本地坐标系中,时间间隔后的位置为:

x = speed * sin(heading*pi/180) * dtime / 3600;
y = speed * cos(heading*pi/180) * dtime / 3600;

(坐标以英里为单位)

从那里您可以计算 WGS84 框架中的新位置(即纬度和经度):

lat = lat0 + 180 / pi * y / Rt;
lon = lon0 + 180 / pi / sin(lat0*pi/180) * x / Rt;

编辑:更正最后一行:*sin(phi) 为 /sin(phi)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPS/GIS 计算:根据运动/每小时预测未来位置的算法? 的相关文章

随机推荐