2015-10-01 27 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