![](/img/trans.png)
[英]EF5 collecting data from stored procedure that returns a list or nothing
[英]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.