2015-05-18 36 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