2013-09-30 114 views
0

我有一個SQL Server 2008 R2表,它有一個geometry(非地理)列以及其他一些「標準」列。我公司目前已在表中的測試單行,並在該記錄幾何列具有下列範圍的多邊形,當我插入多邊形爲0(零)的SRID:EF5幾何相交查詢不會返回任何內容

POLYGON ((380 220, 380 575, 585 575, 380 575, 380 220)) 

我現在想要使用EF5檢查點是否在該多邊形中。首先,我創建了這一點:

DbGeometry testPoint = DbGeometry.PointFromText("POINT(400 240)", 0); 

List<LocationArea> tResults = (from s in db.LocationAreas 
     where testPoint .Intersects(SqlSpatialFunctions.MakeValid(s.AreaBounds)) 
     select s).ToList(); 

的第一個錯誤我得到了,加上SqlSpatialFunctions.MakeValid方法是,s.AreaBounds結果不是「有效」,而在代碼中創建點以前。修正了這個優秀帖子的幫助 - >query-dbgeometry-for-specific-latlng-value

現在,我可能會瘋了(我一直在看這段代碼一段時間),但是我總是得到一個空的列表返回(count = 0 ),我相信這個點在多邊形範圍內。

因此,任何指針將不勝感激,就像我雖然說,可能只是我:-)

多米尼克

回答

0

想很多,很多不同的東西來獲得我想要的結果後,下面的代碼現在終於可以工作了,並且每次都能夠工作,並且每個多邊形/點的場景都是我迄今爲止所投射的。

爲什麼這是必需的,我不知道,但我當然希望這可以幫助別人使用幾何SQL列時,在未來的其他實體框架:

DbGeometry testPoint = DbGeometry.PointFromText("POINT(400 240)", 0); 

List<LocationArea> tResults = (from s in db.LocationAreas 
    where testPoint .Intersects(SqlSpatialFunctions.MakeValid(s.AreaBounds).Envelope) 
    select s).ToList(); 

我發現這個經過一番深入的調試和真通過Linq查詢返回的DBGeometry字段。我發現s.AreaBounds字段返回一個LINESTRING(...)值,而不是原來在DB中保存的值,這是一個POLYGON(...)值。通過返回的對象屬性進一步查看,我發現。信封有我想要的。

相關問題