2012-06-03 17 views

回答

7

這可能幫助:

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

事實上,你會發現,文章內的一切!

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);