[英].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.