簡體   English   中英

EF5幾何相交查詢不返回任何內容

[英]EF5 geometry intersect query returns nothing

我有一個SQL Server 2008 R2表,該表具有一個geometry (而非地理)列以及一些其他“標准”列。 我目前在表中只有一行用於測試,並且該記錄中的geometry列具有一個具有以下邊界的多邊形,並且當我插入該多邊形時的SRID為0(零):

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修復了該問題

現在,我可能會發瘋(我一直在看這段代碼一段時間),但是我總是返回一個空列表(計數= 0),並且我認為該點在多邊形范圍內。

因此,就像我說的那樣,任何指針都將不勝感激,可能只是我:-)

多米尼克

在嘗試了許多不同的東西以獲得我想要的結果之后,下面的代碼現在終於可以工作了,並且每次都可以工作,到目前為止,我已經拋出了每個多邊形/點場景。

我不知道為什么要這樣做,但我當然希望將來在將Entity Framework與幾何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(...)值,而不是最初保存在數據庫中的POLYGON(...)值。 進一步查看返回的對象屬性,我發現.Envelope具有我想要的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM