.NET Equivalent of SQL Server STDistance

本文关键字:Server STDistance SQL of Equivalent NET | 更新日期: 2023-09-27 18:09:06

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

SELECT Location.STDistance(geography::Point(51, -2, 4326)) * 0.00062137119 FROM Venues

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

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

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

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

.NET Equivalent of SQL Server STDistance

我相信你可以简单地添加Microsoft.SqlServer.Types.dll作为引用,然后像使用任何其他。net类型一样使用SqlGeometry类型,包括调用STDistance方法。

您需要计算地理距离来手动计算距离。有许多不同的技术和公式可以做到这一点,每个都有不同的基本假设(例如:球形地球,椭球地球等)。

一个常见的选择是haversine公式,这里有一个c#实现。

这里有很好的解释。简而言之:在EF5(更具体地说,是。net 4.5)中,微软包含了DbGeography类型。假设您已经有了一堆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)