2010-10-21 46 views
1

我有一個方法,這是假設計算兩個地理座標之間的方位(以40.7486,-73.9864示例格式)。兩個座標計算之間的軸承奇怪的輸出

但是,我有一個問題,它計算的標題與我使用久經考驗的應用程序計算的標題不同。

例如,以下各點之間的初始軸承是074度,但是我的方法返回047
40.7486, -73.9864
40.9486, -72.9866

下面是代碼中的相關SNIPPIT。

 /// <summary> 
    /// Calculate the inital bearing between two Locations 
    /// </summary> 
    /// <param name="pointA"></param> 
    /// <param name="pointB"></param> 
    /// <param name="headingType"></param> 
    /// <returns></returns> 
    public static double BearingToLocation(Location pointA, Location pointB) 
    { 
     // Convert both locations from degrees to radians 
     pointA = LocationToRad(pointA); 
     pointB = LocationToRad(pointB); 

     double partOne = exMath.Sin(pointB.Longitude - pointA.Longitude) * exMath.Cos(pointB.Latitude); 
     double partTwo = exMath.Cos(pointA.Latitude) * exMath.Sin(pointB.Latitude) - exMath.Sin(pointA.Latitude) * exMath.Cos(pointB.Latitude) * exMath.Cos(pointB.Longitude - pointA.Longitude); 
     double heading = AdditionalMath.ToDeg(exMath.Atan2(partOne, partTwo) % 2 * exMath.PI); 

     // Solve for compass wrap around 
     if (heading < 0) 
      heading += 360; 

     return heading; 
    } 

    /// <summary> 
    /// Return a new location in radians 
    /// </summary> 
    /// <param name="pointA"></param> 
    /// <returns></returns> 
    public static Location LocationToRad(Location pointA) 
    { 
     return new Location(AdditionalMath.ToRad(pointA.Latitude), AdditionalMath.ToRad(pointA.Longitude), pointA.Altitude); 
    } 

} 

/// <summary> 
/// Misc. math functions not available in Elze Kool's lib 
/// </summary> 
public static class AdditionalMath 
{ 
    /// <summary> 
    /// Degrees to radians 
    /// </summary> 
    /// <param name="x"></param> 
    /// <returns></returns> 
    public static double ToRad(double x) 
    { 
     return exMath.PI * x/180.00F; 
    } 

    /// <summary> 
    /// Radians to degrees 
    /// </summary> 
    /// <param name="x"></param> 
    /// <returns></returns> 
    public static double ToDeg(double x) 
    { 
     return x * 180.00F/exMath.PI; 
    } 
} 

任何人都可以看到這個問題嗎?我看了一遍,找不到問題。

+0

什麼最終被修復?有用的代碼... – Brandon 2011-02-06 02:03:29

+0

它實際上是數學庫。我使用的原版是Elze Kool編寫的,它有幾個問題。最後,我放棄了它,並使用了一個在我的設備上執行了耶穌誕生的東西(GHI electronics FEZ Domino) – chris12892 2011-02-07 22:27:45

回答

1

%看起來腥這一行:

double heading = AdditionalMath.ToDeg(exMath.Atan2(partOne, partTwo) % 2 * exMath.PI); 
+0

這樣做!多謝! – chris12892 2010-10-22 00:15:19

+1

這條線的正確計算是什麼? – Brandon 2011-02-06 01:32:36

+0

根據http://developer.appcelerator.com/question/123977/how-to-get-the-bearing-direction-from-2-geolocation-points,該行應該是:double heading = AdditionalMath.ToDeg(exMath。 Atan2(partOne,partTwo)); – Behr 2013-07-22 15:17:32

相關問題