【问题标题】:C# SQLGeography: diagnosing invalid geometriesC# SQLGeography:诊断无效几何
【发布时间】:2015-07-30 13:40:15
【问题描述】:

我们有大量的地理信息存储在 MapInfo 表中,我们现在希望将这些地理信息存储在 SQL Server 中。我们编写了 C# 实用程序来从 MapInfo 文件中读取地理并将它们导入 SQL 服务器。在大多数情况下,这运作良好。然而,在使用我们内部开发的工具进行多次清理之后,我们仍然留下大量被SqlGeography.STIsValid() 视为无效的地理区域。

对于大多数或所有这些情况,.NET 方法SqlGeography.MakeValid() 能够创建有效的地理实例。但是,这方面的文档很差,我们不满足于简单地接受 MakeValid 所做的修改,而不了解地理被视为无效的原因以及 MakeValid 做了什么来纠正它们。

通过调用IsValidDetailed,我们会收到一条未详细记录的神秘错误消息。在许多情况下,IsValidDetailed 返回的字符串如下所示:

24404:无效,因为多边形环 (1) 与自身相交或与其他环相交。问题出现在几何集合的条目 (19) 中

我们尝试导入的所有地理对象都是多面体。通过解析此错误消息,我们尝试识别问题多边形和这些多边形内的环。但是,我们发现索引似乎与实际有问题的多边形/环并不匹配。在许多情况下,索引超出了输入几何数组的范围。

是否有更好的方法来查明几何/地理对象被视为无效的具体原因并查明哪些多边形、环或点存在问题?

【问题讨论】:

    标签: c# sql geometry geography


    【解决方案1】:

    我自己曾多次遇到此错误。它通常源于 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

    【讨论】:

    • 感谢您的回复。虽然点方向可能是错误的原因,但在我们的例子中不是。我们有自动检测方向并在不正确时修复它的代码。其余无效的几何图形由于某些其他原因而无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2019-04-11
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多