2013-05-09 70 views
12

什么是C#相当于这个地理空间T-SQL代码?转换SQL地理学C#

DECLARE @g geography; 
DECLARE @h geography; 
SET @g = geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326); 
SET @h = geography::Point(47.653, -122.358, 4326) 

SELECT @g.STIntersects(@h) 

我试图用SqlGeometry数据类型来查找一个多边形的一个点 - 并能与上述T-SQL;但我不明白如何实现等效的C#代码。

+0

的[从SQL Server 2008地理位置函数为C#(纬度和经度点的内部或外部多边形/地图区域)](可能重复http://stackoverflow.com/questions/9448054/geo-functions-from-sql-服务器2008年到C锋利纬度和经度点的插件) – Damith 2013-05-09 07:22:05

回答

9

试试这个:

public bool OneOffSTIntersect() 
{ 
    var g = 
     Microsoft.SqlServer.Types.SqlGeography.STGeomFromText(
      new System.Data.SqlTypes.SqlChars(
       "POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))"), 4326); 
    // suffix "d" on literals below optional but explicit 
    var h = Microsoft.SqlServer.Types.SqlGeography.Point(47.653d, -122.358d, 4326); 

    // rough equivalent to SELECT 
    System.Console.WriteLine(g.STIntersects(h)); 

    // Alternatively return from a C# method or property (get). 
    return g.STIntersects(h); 
} 

MSDN的SqlGeography Methods页面链接到信息在每个C#等同于你的T-SQL的关键电话 - 例如STIntersects

+3

'//粗略相当于SELECT' :-) – Tim 2013-05-09 11:16:19

+0

@Tim:滑稽,昨夜刚出来的时候我还以为是没有办法的办法了解OP的C#知识或上下文的一般级别以使用翻译后的代码;但今天这也让我觉得很有趣。 :)感谢您指出。 – J0e3gan 2013-05-10 01:57:13