【发布时间】:2011-09-16 00:31:29
【问题描述】:
我正在计算两个地理坐标之间的距离。我正在针对 3-4 个其他应用程序测试我的应用程序。当我计算距离时,我的计算平均距离为 3.3 英里,而其他应用程序则为 3.5 英里。这对我尝试执行的计算有很大的不同。有没有好的类库来计算距离?我在 C# 中是这样计算的:
public static double Calculate(double sLatitude,double sLongitude, double eLatitude,
double eLongitude)
{
var radiansOverDegrees = (Math.PI / 180.0);
var sLatitudeRadians = sLatitude * radiansOverDegrees;
var sLongitudeRadians = sLongitude * radiansOverDegrees;
var eLatitudeRadians = eLatitude * radiansOverDegrees;
var eLongitudeRadians = eLongitude * radiansOverDegrees;
var dLongitude = eLongitudeRadians - sLongitudeRadians;
var dLatitude = eLatitudeRadians - sLatitudeRadians;
var result1 = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) *
Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);
// Using 3956 as the number of miles around the earth
var result2 = 3956.0 * 2.0 *
Math.Atan2(Math.Sqrt(result1), Math.Sqrt(1.0 - result1));
return result2;
}
我可能做错了什么?我应该先以公里计算,然后再转换为英里吗?
【问题讨论】:
-
地球平均半径 = 6,371km = 3958.76 英里
-
不应该在 gis.stackexchange.com 上
-
它可能有,但我的问题更多地涉及在 Windows Phone 上计算它,这有点不同。公式是一样的,但是像 DistanceTo 方法这样的新方法调用不一定可用。
-
建议您存储 pi/180 这样您就不必不断重复计算。
标签: c# windows-phone-7 geocoding latitude-longitude