在 .NET 核心中查找 2 个坐标之间的距离

Kez*_*ose 1 .net geolocation geospatial .net-core asp.net-core

我需要在 .NET 核心中找到 2 个坐标之间的距离。我试过使用下面提到的代码,

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

返回 sCoord.GetDistanceTo(eCoord);

但是,似乎 .NET 核心不支持 GeoCoordinate 类。有没有其他精确的方法可以使用 .NET 核心中的纬度和经度来计算 2 个坐标之间的距离?

Kez*_*ose 6

GeoCoordinate 类是 .net 框架中 System.Device.dll 的一部分。但是,.Net Core 不支持它。我找到了找到 2 个坐标之间距离的替代方法。

    public double CalculateDistance(Location point1, Location point2)
    {
        var d1 = point1.Latitude * (Math.PI / 180.0);
        var num1 = point1.Longitude * (Math.PI / 180.0);
        var d2 = point2.Latitude * (Math.PI / 180.0);
        var num2 = point2.Longitude * (Math.PI / 180.0) - num1;
        var d3 = Math.Pow(Math.Sin((d2 - d1) / 2.0), 2.0) +
                 Math.Cos(d1) * Math.Cos(d2) * Math.Pow(Math.Sin(num2 / 2.0), 2.0);
        return 6376500.0 * (2.0 * Math.Atan2(Math.Sqrt(d3), Math.Sqrt(1.0 - d3)));
    }
Run Code Online (Sandbox Code Playgroud)

其中 point1 和 point2 是 2 个坐标点,Location 是一个类,如下所示,

public class Location
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

请检查链接以获取另一种计算距离的方法,其结果与上述代码相同 - 替代方法

  • 这真的是微软发布的Nuget吗?我看到一个人的名字是作者。我很乐意看到微软自己发布一个 (5认同)
  • 作为参考,上述方法返回以米为单位的距离。此外,如果您能够在项目中利用多目标,Microsoft 有一个 .Net Core GeoLocation NuGet 包:https://www.nuget.org/packages/Geolocation.NetStandard/ (4认同)