漏洞

漏洞:BUG-000122070:使用第三方空间类型存储的形状可能显示不正确或根本不显示

Last Published: May 12, 2020

描述

ArcGIS 无法显示企业级数据库中使用第三方空间类型存储的要素类中的某些形状。 这些类型包括 SQL Server 几何和地理以及 PostGIS 几何和地理。 在这些情况下,已由 ArcGIS 以外的应用程序插入形状。

  • ArcGIS 无法显示无效形状(在数据库级别被视为无效的形状),并且将返回一个数据库错误,指示无法针对无效形状执行空间函数。
  • ArcGIS 可以在数据库级别显示视为有效的形状,但是,在某些情况下,ArcGIS 可能会错误地显示这些形状,或者引发形状完整性错误。 这些形状包括:
    • 具有夹杂物或孔洞的形状,这些夹杂物或孔洞恰好在某一点处接触外壳
    • 具有相连的内环或者具有两个或多个仅在某一点处相互接触但不接触外壳的内环的形状

原因

对于在数据库级别视为无效的形状,ArcGIS 将始终返回错误。 对于在数据库级别视为有效的形状,之前的 ArcGIS 版本在查询形状时执行了内部形状验证过程,以确保其正确显示。 在获取更加复杂的几何和多行时,形状验证的成本可能会很高。  

因此,ArcGIS 10.6 引入了一个性能修复程序,其禁用了第三方空间类型(例如 SQL Server 或 PostGIS 几何)的形状验证。  

对于仅使用 ArcGIS 执行编辑的情况,性能提升将是唯一值得注意的影响,因为 ArcGIS 不会插入无法读取和显示的形状。 对于在 ArcGIS 之外(使用 SQL 或其他应用程序)执行编辑的情况,这意味着插入的包含夹杂物或自接触环的形状可能会在 ArcGIS 内遇到显示问题。

  • 以下示例显示了一种 ArcGIS 可能无法正确显示形状的情况:
    POLYGON ((0 0, 50 0, 50 50, 0 50, 0 0), (0 0, 2 5, 5 5, 5 2, 0 0), (10 10, 10 20, 20 20, 20 10, 10 10))
  • 此 WKT 面在 ArcGIS 中显示不正确:
    POLYGON ((0 0, 50 0, 50 50, 0 50, 0 0), (10 10, 10 20, 20 20, 20 10, 10 10), (0 0, 2 5, 5 5, 5 2, 0 0))

请注意,唯一的区别在于内环在外环的单个点处接触的位置。 ArcGIS 中的显示要求在 WKT 内的外部环之后立即列出此接触内部环。

  • 下一示例显示了一种 ArcGIS 可能遇到形状完整性错误的情况。
    以下 WKT 面在 ArcGIS 中显示正确:
    POLYGON ((0 0, 0 50, 50 50, 50 0, 0 0), (10 10, 20 10, 20 20, 10 20, 10 10), (20 20, 30 20, 30 30, 20 30, 20 20))
  • 此以下 WKT 表示将返回 ArcGIS 中的图形完整性错误:
    POLYGON ((0 0, 0 50, 50 50, 50 0, 0 0), (20 20, 30 20, 30 30, 20 30, 20 20), (10 10, 20 10, 20 20, 10 20, 10 10)) 

同样,请注意,唯一区别在于两个内部环在 WKT 内的单个点处接触的顺序。

注: 可能存在遇到本文中未介绍的类似行为的其他情况。

解决办法

在 ArcGIS 外部编辑空间数据时,在插入类似本文中提到的形状时应特别注意。 对于带有孔洞的面形状,应始终先列出外边界,然后列出所有孔洞。 如果面具有反转面形状,即在单个点处接触外边界的区域形状内的空白空间,则必须在外边界之后立即列出反转面形状。 如果两个孔洞相接于某一点,则应在相接的另一孔洞前列出左上孔洞。

文章 ID:000023345

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

发现关于本主题的更多内容