C# .NET等效于SQL Server STDistance

C# .NET等效于SQL Server STDistance,c#,.net,sql-server,sqlgeography,geographic-distance,C#,.net,Sql Server,Sqlgeography,Geographic Distance,我可以使用以下SQL计算固定位置与数据库中场地之间的距离 SELECT Location.STDistance(geography::Point(51, -2, 4326)) * 0.00062137119 FROM Venues 请注意,返回的距离以英里为单位,位置字段为地理类型 我想知道在.NET中,它返回相同值的等价物是什么。此方法将具有以下签名: public static double Distance(location1Latitude, location1Longitude, l

我可以使用以下SQL计算固定位置与数据库中场地之间的距离

SELECT Location.STDistance(geography::Point(51, -2, 4326)) * 0.00062137119 FROM Venues
请注意,返回的距离以英里为单位,位置字段为地理类型

我想知道在.NET中,它返回相同值的等价物是什么。此方法将具有以下签名:

public static double Distance(location1Latitude, location1Longitude, location2Latitude, location2Longitude) {
    return ...;
}

我知道我可以在.NET中调用数据库方法,但我不希望这样做。我希望有一个计算距离的公式。谢谢

您需要手动计算距离。有,每个都有不同的基本假设(即:球形地球、椭球地球等)


一个常见的选项是haversine公式,它带有一个。

我相信您可以简单地添加
Microsoft.SqlServer.Types.dll
作为参考,然后像任何其他.NET类型一样使用该类型,包括调用该方法。

。 简而言之:在EF5中(更具体地说,在.NET4.5中),微软加入了这个类型。假设您已经有一堆lat/long,那么您可以使用以下帮助器轻松创建DbGeography对象:

public static DbGeography CreatePoint(double latitude, double longitude)
{
    var text = string.Format(CultureInfo.InvariantCulture.NumberFormat,
                             "POINT({0} {1})", longitude, latitude);
    // 4326 is most common coordinate system used by GPS/Maps
    return DbGeography.PointFromText(text, 4326);
}
获得两个或多个点(DbGeography)后,就可以计算它们之间的距离:

var distance = point1.Distance(point2)

可能重复感谢这是我所追求的。也可以作为Nuget软件包提供:在.NETCore中不可用,仅供参考。