2015-10-01 24 views
3

System.Data.Spatial.DbGeography.Intersects方法似乎总是为我返回true。我不知道为什么会发生这种情况。我创建了一个简单的命令行下面的代码片段,在以下控制台输出DbGeography相交方法不起作用

Intersects 
Intersects 

点显然是无处边界附近的搜索结果,因此,不应该相交。

DbGeography bounds = DbGeography.PolygonFromText("POLYGON ((146 -20,148 -20,148 -22,146 -22,146 -20))", 4326); 
DbGeography point = DbGeography.PointFromText("POINT (0 0)", 4326); 
if (point.Intersects(bounds) == true) 
    Console.WriteLine("Intersects"); 
else 
    Console.WriteLine("Does NOT intersect"); 

if (bounds.Intersects(point) == true) 
    Console.WriteLine("Intersects"); 
else 
    Console.WriteLine("Does NOT intersect"); 
+0

请简化代码以显示问题。 –

回答

5

点显然是无处边界附近,因此不应该相交。

有一个规则:只要你说“清楚”,准备不正确。 :)

开开口说,你有一个戒指定位问题。也就是说,您指定点的顺序很重要。当你指定了角落时,你已经定义了一个整个地球的一个区域,其中有一个非常小的洞。尝试使用此代替:

POLYGON ((146 -20,146 -22,148 -22,148 -20,146 -20)) 

那么,你如何知道本质上,你有一个方向问题?我喜欢使用的一种启发式方法是,如果对象的包络角很大(90度=一个半球),那么您已经错误地指定了排序。数据库引擎中的Geography数据类型上有一个EnvelopeAngle方法(但它看起来不像C#中的DbGeography类)来确定此方法。还有一种方便的方法(再次肯定地在DB中,但不在C#中)重定向所调用的环,这并不令人惊讶ReorientObject

+0

我感到困惑的是,Wicket库(http://arthur-e.github.io/Wicket/sandbox-gmaps3.html)显示了这个多边形,正如我所预料的那样。 – 360code