首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何利用方向角和速度计算下一次的经纬度

如何利用方向角和速度计算下一次的经纬度
EN

Stack Overflow用户
提问于 2013-10-14 11:04:04
回答 3查看 11.4K关注 0票数 16

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

EN

回答 3

Stack Overflow用户

发布于 2013-10-24 17:03:32

这里在JS中,用于计算给定方位和距离的经度和lng:

代码语言:javascript
复制
//lat, lng in degrees. Bearing in degrees. Distance in Km
calculateNewPostionFromBearingDistance = function(lat, lng, bearing, distance) {
  var R = 6371; // Earth Radius in Km

  var lat2 = Math.asin(Math.sin(Math.PI / 180 * lat) * Math.cos(distance / R) + Math.cos(Math.PI / 180 * lat) * Math.sin(distance / R) * Math.cos(Math.PI / 180 * bearing));
  var lon2 = Math.PI / 180 * lng + Math.atan2(Math.sin( Math.PI / 180 * bearing) * Math.sin(distance / R) * Math.cos( Math.PI / 180 * lat ), Math.cos(distance / R) - Math.sin( Math.PI / 180 * lat) * Math.sin(lat2));

  return [180 / Math.PI * lat2 , 180 / Math.PI * lon2];
};

calculateNewPostionFromBearingDistance(60,25,30,1)
[60.007788047871614, 25.008995333937197]
票数 7
EN

Stack Overflow用户

发布于 2017-10-31 22:04:47

Java中的相同代码:

代码语言:javascript
复制
    final double r = 6371 * 1000; // Earth Radius in m

    double lat2 = Math.asin(Math.sin(Math.toRadians(lat)) * Math.cos(distance / r)
            + Math.cos(Math.toRadians(lat)) * Math.sin(distance / r) * Math.cos(Math.toRadians(bearing)));
    double lon2 = Math.toRadians(lon)
            + Math.atan2(Math.sin(Math.toRadians(bearing)) * Math.sin(distance / r) * Math.cos(Math.toRadians(lat)), Math.cos(distance / r)
            - Math.sin(Math.toRadians(lat)) * Math.sin(lat2));
    lat2 = Math.toDegrees( lat2);
    lon2 = Math.toDegrees(lon2);
票数 4
EN

Stack Overflow用户

发布于 2013-12-17 11:02:26

下面的代码适用于我:

我们必须计算距离(速度*时间)。代码将距离转换为KM,因为地球半径也以KM为单位。

代码语言:javascript
复制
            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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19352921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档