我有一個方法,這是假設計算兩個地理座標之間的方位(以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;
}
}
任何人都可以看到這個問題嗎?我看了一遍,找不到問題。
什麼最終被修復?有用的代碼... – Brandon 2011-02-06 02:03:29
它實際上是數學庫。我使用的原版是Elze Kool編寫的,它有幾個問題。最後,我放棄了它,並使用了一個在我的設備上執行了耶穌誕生的東西(GHI electronics FEZ Domino) – chris12892 2011-02-07 22:27:45