.NET中与SQL Server STDistance函数等效的函数是什么?

3
我可以使用以下SQL计算固定位置与数据库中场馆位置之间的距离。
SELECT Location.STDistance(geography::Point(51, -2, 4326)) * 0.00062137119 FROM Venues

请注意返回的距离以英里为单位,位置字段是地理类型。

我想知道在.NET中与此相当且能够返回相同值的方法。该方法应具有以下签名:

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

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


3个回答

7

我相信您只需要将 Microsoft.SqlServer.Types.dll 添加为引用,然后像使用其他 .NET 类型一样使用 SqlGeometry 类型,包括调用 STDistance 方法。


1
还可作为Nuget包使用:https://www.nuget.org/packages/Microsoft.SqlServer.Types - Morvael

3

1
这是非常好的解释。简而言之,微软在EF5中(更具体地说,是在.net 4.5中)包括了类型DbGeography。假设您已经有了一堆纬度/经度,您可以使用类似以下帮助程序轻松创建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)

不适用于.NET Core,仅供参考。 - Ian Kemp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接