2013-04-12 40 views
3

我可以使用下面的SQL来计算固定位置和数据库中场地之间的距离。.NET等价的SQL Server STDistance

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

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

我想知道什么是相当于.NET的这将返回相同的值。此方法将具有以下签名:

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

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

+0

的[计算在千米C#两个地理点距离]可能重复(http://stackoverflow.com/questions/6544286/calculate-distance-of-two-geo-points-in- km-c-sharp) –

回答

4

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

1

这是very well explained here。 不久:与EF5(更具体,与.net 4.5)微软包括类型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)