EF5 几何相交查询不返回任何内容

本文关键字:返回 任何内 查询 何相交 EF5 | 更新日期: 2023-09-27 18:33:13

我有一个SQL Server 2008 R2表,其中包含一个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结果不"有效",而代码中创建的点是。在这个优秀的帖子的帮助下修复了那个 -> 查询-dbgeometry-for-specific-latlng-value

现在,我可能会发疯(我已经看了一段时间的这段代码),但是我总是得到一个返回的空列表(count = 0),我相信这一点在多边形范围内。

所以,任何指示都会不胜感激,就像我说的,可能只是我:-)

多米尼克

EF5 几何相交查询不返回任何内容

在尝试了很多很多不同的东西来得到我想要的结果之后,下面的代码现在终于可以工作了,而且每次都有效,到目前为止,我扔给它的每一个多边形/点场景。

为什么需要这样做我不知道,但我当然希望这在将来将几何 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(...) 值。进一步查看返回的对象属性,我发现.信封有我想要的。