4

知道小数纬度小数经度速度(公里/小时)航向 如何在 60 秒后找到汽车的下一个位置?有什么算法可以做到这一点吗?

4

2 回答 2

8

这可能会有所帮助:

distance_traveled = speed * time

然后,使用航向作为角度(三角函数)计算速度的 x 和 y 分量:

speed_x=distance_traveled * Math.Cos(heading/180*Math.PI)
speed_y=distance_traveled * Math.Sin(heading/180*Math.PI)

接下来,看看如何将 lat/long 映射为某种形式的 x/y 坐标,添加 speed_x 和 speed_y,然后再次转换为 lat/long。

最后一个比较棘手,看这里:http ://www.movable-type.co.uk/scripts/latlong.html

事实上,您会在那篇文章中找到所有内容!

于 2012-06-03T20:23:07.413 回答
1


我找到了更准确的公式
此代码对我有用:
1. 首先我们必须计算距离(速度 * 时间)。
2. 在我的程序中,我将距离转换为 KM,因为我也在 KM 中使用地球半径。
const double radiusEarthKilometres = 6371.01f;

            kmDistance = kmSpeed * (timer1.Interval / 1000f) / 3600f;

            var distRatio = kmDistance / radiusEarthKilometres;
            var distRatioSine = Math.Sin(distRatio);
            var distRatioCosine = Math.Cos(distRatio);

            var startLatRad = deg2rad(lat0);
            var startLonRad = deg2rad(lon0);

            var startLatCos = Math.Cos(startLatRad);
            var startLatSin = Math.Sin(startLatRad);

            var endLatRads = Math.Asin((startLatSin * distRatioCosine) + (startLatCos * distRatioSine * Math.Cos(angleRadHeading)));

            var endLonRads = startLonRad
                + Math.Atan2(Math.Sin(angleRadHeading) * distRatioSine * startLatCos,
                    distRatioCosine - startLatSin * Math.Sin(endLatRads));

            newLat = rad2deg(endLatRads);
            newLong = rad2deg(endLonRads);
于 2013-12-17T03:20:02.713 回答