2015-05-18 34 views
5

我們有大量的地理信息存儲在MapInfo表中,我們現在想要存儲在SQL Server中。我們編寫了C#實用程序來從MapInfo文件中讀取地理信息並將它們導入SQL服務器。大多數情況下,這是行之有效的。但是,在使用我們在內部開發的工具進行了許多清理工作之後,我們仍然留下了大量被SqlGeography.STIsValid()認爲無效的地理區域。C#SQLGeography:診斷無效幾何

對於大多數或所有這些情況,.NET方法SqlGeography.MakeValid()能夠創建有效的地理實例。然而,這方面的文檔相當糟糕,我們不滿足於僅僅接受MakeValid所做的修改,而不理解地理被認爲無效的原因以及MakeValid如何修正它們。

通過致電IsValidDetailed,我們得到一個神祕的錯誤消息,沒有很好的記錄。對於很多的情況下,由IsValidDetailed返回的字符串看起來是這樣的:

24404:無效的,因爲多邊形環(1)與自己相交,或其他一些環。問題發生在幾何集合中的條目(19)中

我們嘗試導入的所有地理對象都是多面體。通過解析這個錯誤信息,我們試圖找出這些多邊形內的問題多邊形和環。但是,我們發現索引似乎並不匹配實際有問題的多邊形/環。在很多情況下,索引超出了輸入幾何的數組邊界。

是否有更好的方法來查明幾何/地理對象被視爲無效的具體原因並查明哪些多邊形,圓環或點有問題?

回答

0

我已經多次遇到這個錯誤。它通常源於SQL服務器要求將這些點按逆時針順序列出的事實。當點順時針順序時,它會產生你看到的異常。

這裏是一個偉大的視覺: http://danielwertheim.se/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position-no/

...還有一個實用的解決方案,看看這個博客帖子: http://blogs.msdn.com/b/edkatibah/archive/2008/08/19/working-with-invalid-data-and-the-sql-server-2008-geography-data-type-part-1b.aspx

+0

感謝您的答覆。雖然點的方向可能是錯誤的原因,但在我們的情況下並非如此。我們有代碼可以自動檢測方向並在不正確的情況下修復方向。由於某些其他原因,無效的其餘幾何圖形無效。 – jmcstwm