我们在MapInfo表中存储了大量地理位置,我们现在希望将其存储在SQL Server中。我们编写了C#实用程序来从MapInfo文件中读取地理位置并将它们导入SQL服务器。在大多数情况下,这是运作良好。但是,在使用我们内部开发的工具进行许多清理过程之后,我们仍然留下了大量被SqlGeography.STIsValid()
视为无效的地理位置。
对于大多数或所有这些情况,.NET方法SqlGeography.MakeValid()
能够创建有效的地理实例。但是,关于此问题的文档非常糟糕,我们不满足于仅仅接受MakeValid
所做的修改而不理解地理被视为无效的原因以及MakeValid
纠正它们的行为。
通过调用IsValidDetailed
,我们会收到一条没有详细记录的神秘错误消息。对于许多情况,IsValidDetailed
返回的字符串如下所示:
24404:无效,因为多边形环(1)与自身或其他环相交。问题发生在几何集合中的条目(19)
中
我们尝试导入的所有地理对象都是多边形。通过解析此错误消息,我们尝试识别这些多边形内的问题多边形和环。但是,我们发现索引似乎与实际有问题的多边形/环实际不匹配。在许多情况下,索引超出了输入几何的数组范围。
是否有更好的方法来确定几何/地理对象被视为无效的具体原因,并确定哪些多边形,环或点有问题?
答案 0 :(得分: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