我可以使用下面的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中调用数据库方法,但我不想这样做。我希望有一个公式来计算距离。由于
我相信你可以简单地添加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)