检查几何 (数据管理)

摘要

可生成要素类中所发生几何问题的报告。

有关几何问题、这些问题对软件造成的影响以及可能的起因的详细信息,请参阅用于检查和修复几何的工具

使用情况

  • 有效的输入格式包括 shapefile 以及存储在文件地理数据库、企业级数据库、企业级地理数据库、GeoPackage 或 SpatiaLite 数据库中的要素类。 对于存储在企业级数据库或企业级地理数据库中的要素类,支持以下空间类型:

    • Microsoft SQL Server - 几何空间类型和地理空间类型。
    • PostgreSQL - PostGIS、几何空间类型和地理空间类型。
    • Oracle - SDO_Geometry
    • SAP HANA—ST_Geometry

    许可:

    Desktop Basic 许可仅允许您将此工具应用于存储在文件地理数据库、GeoPackage 或 SpatiaLite 数据库中的 shapefile 和要素类。 Desktop StandardDesktop Advanced 许可额外允许您将此工具应用于存储在企业级数据库或企业级地理数据库中的要素类。

  • 不支持存储在企业级地理数据库中并注册为版本的要素类。

  • 输出表参数值将包含发现的每个几何问题的记录。 如果未发现任何问题,则该表为空。

  • 输出表参数值的内容(包括 PROBLEM 字段代码)用英文编写。

  • 对于点要素,只会存在空几何问题。

  • 要查看报告存在几何问题的要素,可使用添加连接工具以及输入的 OBJECTIDFID 字段和输出表的 FEATURE_ID 字段将输入要素参数值连接到输出表参数值。 如果任何输入要素参数值存储在企业级地理数据库、企业级数据库、GeoPackageSpatiaLite 数据库中,则输出表还将包含 TEXT_ID 字段,用于基于非整数的 OBJECTID 列。

  • Esri 验证选项通过 Esri 简化方法确保几何在拓扑上是正确的。 仅 Esri 验证适用于存储在企业级地理数据库中的数据。

  • 开放地理空间联盟 OGC 验证方法确保几何符合地理信息的 OpenGIS 执行标准(简单要素访问)第 1 部分:公用架构中定义的 OGC 规范

  • 使用 OGC 选项修复要素的几何后,任何后续的编辑或修改都可能导致几何不再符合 OGC 规范。

    修改要素后,重新运行检查几何工具以检查新几何问题。 如有必要,请运行修复几何工具。

  • 使用 OGC 选项验证或修复后的几何将适用于 Esri 选项。 要了解有关这两种方法的详细信息,请参阅什么是简单面

  • 该工具识别出的问题可通过以下方式得到解决:

    • 手动编辑和修复存在几何问题的要素。 某些问题无法通过编辑进行修复。
    • 请使用修复几何工具。 与存储在企业级数据库、企业级地理数据库、GeoPackageSpatiaLite 数据库中的数据相关的一些问题可能无法通过 ArcGIS 工具修复。
  • 输出表参数值包含以下字段:

    • CLASS- 发现问题的要素类的完整路径和名称。
    • FEATURE_ID- 存在几何问题的要素的要素 ID (FID) 或对象 ID (OID)。
    • TEXT_ID- 仅当输入要素值存储在企业级数据库、企业级地理数据库、GeoPackageSpatiaLite 数据库中时,此字段才存在。
    • PROBLEM- 有关问题的简要描述。
  • PROBLEM 字段将包含下列代码之一:

    • Short segment - 有些线段短于与几何关联的空间参考的系统单位所允许的长度。
    • Null geometry - 该要素没有任何几何或者 SHAPE 字段为空。
    • Incorrect ring ordering - 面的拓扑结构比较简单,但是面的环可能未正确定向(外环 - 顺时针,内环 - 逆时针)。
    • Incorrect segment orientation - 各条线段的定向不一致。 线段 i 的终点应该与线段 i+1 的起点相接。
    • Self intersections - 面不能与自身相交。
    • Unclosed rings - 环中最后一条线段的终点必须与第一条线段的起点相接。
    • Empty parts - 几何具有多个部分,其中一个部分为空(没有几何)。
    • Duplicate vertex - 几何的两个或多个连续折点坐标相同。
    • Mismatched attributes - 某线段端点的 z 坐标或 m 坐标与下一条线段中与之重合的端点的 z 坐标或 m 坐标不匹配。
    • Discontinuous parts - 几何的某部分由断开的或不连续的部分组成。
    • Empty Z values - 几何的一个或多个折点 z 值为空(例如,NaN)。
    • Bad envelope - 包络矩形与几何的坐标范围不匹配。
    • Bad dataset extent - 数据集的范围属性不包括数据集中的所有要素。 对于此问题,FEATURE_ID 值将为 -1。

    对于存储在企业级地理数据库中的数据,PROBLEM 字段将包含以下代码之一:

    • NEEDS_REORDERING - 必须对形状进行重新排序,或移除重复点。
    • SE_INVALID_ENTITY_TYPE - 实体类型无效。
    • SE_SHAPE_INTEGRITY_ERROR - 形状完整性错误。
    • SE_INVALID_SHAPE_OBJECT - 形状对象句柄无效。
    • SE_COORD_OUT_OF_BOUNDS - 指定坐标超出有效坐标范围。
    • SE_POLY_SHELLS_OVERLAP - 两个圆环或两个外壳重叠。
    • SE_TOO_FEW_POINTS - 点数少于该要素所需数量。
    • SE_INVALID_PART_SEPARATOR - 部分分隔符位置错误。
    • SE_INVALID_POLYGON_CLOSURE - 多边形未正确闭合。
    • SE_INVALID_OUTER_SHELL - 多边形外壳未完全闭合部分的所有圆环。
    • SE_ZERO_AREA_POLYGON - 多边形壳没有区域。
    • SE_POLYGON_HAS_VERTICAL_LINE - 多边形壳包含垂直线。
    • SE_OUTER_SHELLS_OVERLAP - 多部分区域具有重叠部分。
    • SE_SELF_INTERSECTING - 线串或多边形边界自相交。

参数

标注说明数据类型
输入要素

将处理的要素类或图层。

许可:

Desktop Basic 许可仅允许存储在文件地理数据库、GeoPackage 或 SpatiaLite 数据库中的 shapefile 和要素类作为有效的输入要素格式。 Desktop StandardDesktop Advanced 许可额外允许存储在企业级数据库或企业级地理数据库中的要素类作为有效的输入要素格式使用。

Feature Layer
输出表
(可选)

所发现问题的报告(作为表的形式)。

Table
验证方法
(可选)

指定用于识别几何问题的几何验证方法。

  • Esri将使用 Esri 几何验证方法。 这是默认设置。
  • OGC将使用 OGC 几何验证方法。
String

派生输出

标注说明数据类型
包含几何错误

指示该工具是否已标识任何几何问题。

Boolean

arcpy.management.CheckGeometry(in_features, {out_table}, {validation_method})
名称说明数据类型
in_features
[in_features,...]

将处理的要素类或图层。

许可:

Desktop Basic 许可仅允许存储在文件地理数据库、GeoPackage 或 SpatiaLite 数据库中的 shapefile 和要素类作为有效的输入要素格式。 Desktop StandardDesktop Advanced 许可额外允许存储在企业级数据库或企业级地理数据库中的要素类作为有效的输入要素格式使用。

Feature Layer
out_table
(可选)

所发现问题的报告(作为表的形式)。

Table
validation_method
(可选)

指定用于识别几何问题的几何验证方法。

  • ESRI将使用 Esri 几何验证方法。 这是默认设置。
  • OGC将使用 OGC 几何验证方法。
String

派生输出

名称说明数据类型
problems_found

指示该工具是否已标识任何几何问题。

Boolean

代码示例

CheckGeometry 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在文件地理数据库以即时模式使用 CheckGeometry 函数:


import arcpy
arcpy.env.workspace = "c:/data/data.gdb"
arcpy.management.CheckGeometry(["contours", "roads", "vegetation"], "CheckGeom_Result")
CheckGeometry 示例 2(独立脚本)

以下独立脚本通过在文件地理数据库的所有要素类中循环来使用 CheckGeometry 函数。

# BatchCheckGeometry.py
# Description: Loop through all the feature classes in a geodatabase, and 
#              generate a report of the problems encountered with feature 
#              geometry.

# Import modules
import arcpy
import os

# The geodatabase in which the feature classes will be checked
arcpy.env.workspace = "C:\\data\\St_Lucia.gdb"
out_table = "checkGeometryResult"
 
# A variable that will hold the list of all the feature classes 
# in the geodatabase
fc_list = []

# Identify all feature classes in the geodatabase
for path, dirnames, fcs in arcpy.da.Walk(arcpy.env.workspace, 
                                         datatype='FeatureClass'):
    for fc in fcs:
        fc_list.append(os.path.join(path, fc))
        
print("Running the check geometry tool on {} feature classes".format(
    len(fc_list)))
arcpy.management.CheckGeometry(fc_list, out_table)

print("{} geometry problems found, see {} for details.".format(
    arcpy.management.GetCount(out_table)[0], out_table))
CheckGeometry 示例 3(独立脚本)

以下脚本将使用 CheckGeometry 函数并检查派生输出以确定是否发现任何问题


import arcpy

result = arcpy.management.CheckGeometry('c:/data/data.gdb/badgeometryfc')
if result[1] == 'true':
    # Geometry problems found, print the tool messages.
    print(result.getMessages())

else:
    # No problems found
    print("No problems Found")

环境

特殊情况

并行处理因子

如果环境未设置(默认值)或者设置为 0,则将禁用并行处理。 如果已设置为 100,则该工具尝试将工作分配给计算机上的所有逻辑内核。 在 1 到 99 之间指定一个因子时,工具将通过应用公式(并行处理因子 / 100 * 逻辑内核数)确定要使用的逻辑内核的百分比,其结果将向上舍入到最近的整数值。 如果此公式的结果是 0 或 1,则将不启用并行处理。