繁体   English   中英

.NET等效的SQL Server STDistance

[英].NET Equivalent of SQL Server STDistance

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

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

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

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

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

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

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

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

常见的选项是hasrsine公式, 此处提供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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM