4

10 進緯度10 進経度速度 (km/h)見出し、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)

次に、緯度/経度を何らかの形式の x/y 座標にマッピングし、speed_x と speed_y を追加して、再び緯度/経度に変換する方法を確認します。

この最後のものはトリッキーなものです。ここを見てください: 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 に答える