2012-09-12 24 views
6

我正在使用空間數據類型DbGeography作爲我的模型的一部分,用於在一個實例中存儲一個POINT並在另一個POINT中使用新的Entity-Framework 5實例一個POLYGON。如何使用C#實體框架糾正多邊形環的方向5 DbGeography空間數據

當設置我的POLYGON的值全部保存時沒有錯誤,但是隻有在我按照順時針順序在地圖上繪製多邊形的情況下。如果我以逆時針方向繪製POLGON,則會出現sql級別的錯誤,指示數據是無效的地理類型。

現在經過我自己對這個問題的研究之後,它似乎源於地理數據類型在多邊形環方向上相當嚴格。最常見的解決方案似乎是將Polygon創建爲幾何圖形,然後將其轉換爲地理類型。

我正在尋找C#中的解決方案,它可以應用於數據發送到sql之前。基本上會自動修正座標數組的環形方向。

我試圖捕獲錯誤,然後通過顛倒數組來重建字符串。這在某些情況下起作用,但首先它不可靠,其次,捕獲錯誤是性能下降很大。

感謝 克里斯

回答

2

我已經命令發出我自己,我解決它使用從SQLSpatialTools MakeValidGeographyFromText功能,我用了一個SP裏面方式如下:

SET @ge = dbo.MakeValidGeographyFromText(
    'POLYGON((' + @pois + '))', 4326); 

哪裏@pois是包含座標串以有效的格式,但錯誤的旋轉。

我不知道這是多麼容易與EF-5整合,但我看到有兩種方式:

  1. 直接從C#使用函數,調用EF用正確的多邊形前。
  2. 在SQL服務器上安裝sqlspatialtools,並在那裏進行處理。
3

您好我有同樣的問題,並通過使用

var sqlGeography = SqlGeography.STGeomFromText().MakeValid() 
var invertedSqlGeography = sqlGeography.ReorientObject(); 

欲瞭解更多詳情,請參閱here