【问题标题】:.NET Equivalent of SQL Server STDistanceSQL Server STDistance 的 .NET 等效项
【发布时间】:2013-04-05 04:47:24
【问题描述】:

我可以使用下面的 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 中调用数据库方法,但我不想这样做。我希望有一个公式来计算距离。谢谢

【问题讨论】:

标签: c# .net sql-server sqlgeography geographic-distance


【解决方案1】:

这是very well explained here。 很快:使用 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),你就可以计算它们之间的Distance

var distance = point1.Distance(point2)

【讨论】:

  • .NET Core 中不可用,供参考。
【解决方案2】:

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

【讨论】:

【解决方案3】:

您需要计算Geographical distance 才能手动计算距离。有many different techniques and formulas to do this,每个都有不同的基本假设(即:球形地球、椭圆形地球等)。

一个常见的选项是haversine公式,带有C# implementation available here

【讨论】:

  • 谢谢,这就是我所追求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2010-09-10
  • 2011-03-13
  • 2011-04-30
  • 2023-03-07
  • 2020-07-22
相关资源
最近更新 更多