我正在尝试从交集DbGeography列中获取实体,该交集内有MultiPolygons和Polygon这是边界框var sqlPoly = SqlGeography.Parse(bbox); //bbox is in WKT formatif (sqlPoly.EnvelopeAngle() >= 90) sqlPoly = sqlPoly.ReorientObject();var box = DbGeography.FromBinary(sqlPoly.STAsBinary().Value); //resulting bbox is OK and tested by parsing WKTvar query = from ls in _mdb.Listings where box.Intersects(ls.Geo) select ls;因此结果非常奇怪。我选择的bbox距离数据库结果集有一千英里,但是此查询仍然返回结果。我相信这是关于MultiPolygons的问题。编辑:我试图消除实体框架并使用了Raw SQL,但结果是相同的:var q = "DECLARE @g geography; SET @g = geography::Parse('" + box.AsText() + "'); SELECT * FROM Listings WHERE @g.STIntersects(Geo) = 1;";当我用STIntersects或STContains更改STWithin时,结果集将被过滤,但这一次;它被太多过滤掉了,出现了太多缺少的地理位置。 最佳答案 使用您提供给我的示例数据,许多对象都有所谓的环向问题。简而言之,指定地理多边形边角的顺序。也就是说,ABCDA ADCBA。幸运的是,修复很简单。我在示例表上运行了以下更新:update lset Geo = Geo.ReorientObject()from Listele as lwhere Geo.EnvelopeAngle() = 180现在,当我对数据进行选择时,它似乎代表了一个城市,其中有一些河流(或街道)在流动。我想的更多的是您要寻找的东西。关于c# - 使用DbGeography的MultiPolygon和Polygon相交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33963379/ 10-09 00:51