首页 >后端开发 >C++ >为什么我的地理坐标距离计算不准确,如何使用 .NET 的'GeoCooperative.GetDistanceTo()”来改进它?

为什么我的地理坐标距离计算不准确,如何使用 .NET 的'GeoCooperative.GetDistanceTo()”来改进它?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-04 14:05:38235浏览

Why is my GeoCoordinate distance calculation inaccurate, and how can I improve it using .NET's `GeoCoordinate.GetDistanceTo()`?

确定地理坐标距离计算的最佳方法

为了确定两个地理坐标之间的准确距离计算,开发人员遇到了自己的结果与他人的结果之间的差异由外部应用程序提供。虽然他们当前的 C# 实现返回的平均距离为 3.3 英里,但其他平台报告的距离更接近 3.5 英里。这种显着的差异促使我们对潜在错误或替代距离计算方法进行调查。

开发人员当前的实现围绕以下公式进行:

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

开发人员假设差异可能是归因于单位转换的变化(以公里计算,然后转换为英里)。然而,经过进一步检查,已确定最佳解决方案是利用 .NET Framework 4 及更高版本中引入的 GeoCoordinate 类。此类提供了一个名为 GetDistanceTo 的内置方法,该方法简化了 GeoCoordinates 之间的距离计算。

以下代码演示了如何利用 GetDistanceTo:

var sCoord = new GeoCoordinate(sLatitude, sLongitude);
var eCoord = new GeoCoordinate(eLatitude, eLongitude);

return sCoord.GetDistanceTo(eCoord);

此方法返回以米为单位的距离。要获得以英里为单位的距离,可以将结果除以 1609.344。引用 System.Device 命名空间是使用 GeoCooperative 类的先决条件。

通过采用这种方法,开发人员可以使用经过验证且可靠的方法来计算 GeoCoordination 之间的距离,从而消除潜在的错误或不准确。

以上是为什么我的地理坐标距离计算不准确,如何使用 .NET 的'GeoCooperative.GetDistanceTo()”来改进它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn