jmc*_*twm 5 c# sql geometry geography
我们在MapInfo表中存储了大量的地理位置,我们现在希望将它们存储在SQL Server中.我们编写了C#实用程序来从MapInfo文件中读取地理位置并将它们导入SQL服务器.在大多数情况下,这是运作良好.然而,在使用我们内部开发的工具进行许多清理过程之后,我们仍然留下了大量被认为无效的地理位置SqlGeography.STIsValid()
.
对于大多数或所有这些情况,.NET方法SqlGeography.MakeValid()
都能够创建有效的地理实例.但是,关于这方面的文档非常糟糕,我们不满足于简单地接受修改MakeValid
而不理解地理被视为无效的原因以及MakeValid
纠正它们的原因.
通过调用IsValidDetailed
,我们得到一个没有详细记录的神秘错误消息.对于许多情况,返回的字符串IsValidDetailed
看起来像这样:
24404:无效,因为多边形环(1)与自身或其他环相交.问题出现在几何集合的条目(19)中
我们尝试导入的所有地理对象都是多边形.通过解析此错误消息,我们尝试识别这些多边形中的问题多边形和环.但是,我们发现索引似乎与实际有问题的多边形/环实际不匹配.在许多情况下,索引超出了输入几何的数组范围.
有没有更好的方法来确定几何/地理对象被视为无效的具体原因,并确定哪些多边形,环或点有问题?
小智 0
我自己也多次遇到过这个错误。这通常源于 SQL Server 要求点按逆时针顺序列出的事实。当点按顺时针顺序排列时,它会生成您所看到的异常。
这是一个很棒的视觉效果: 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