3

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

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

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

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

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

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

4

3 回答 3

7

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

于 2013-04-12T15:23:52.670 回答
3

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

一个常见的选项是半正弦公式,此处提供了 C# 实现

于 2013-04-12T15:19:33.533 回答
1

在这里得到了很好的解释。不久:使用 EF5(更具体地说,使用 .net 4.5)Microsoft 包含了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)
于 2013-04-12T15:38:56.540 回答