修复几何 (数据管理)

摘要

检查要素类中每个要素的几何问题。 如发现问题,将应用修复,并将通过一行描述识别要素及修复的几何问题。

此工具将使用与检查几何工具相同的逻辑来修复几何问题。

了解有关检查和修复几何的详细信息

使用情况

    警告:

    此工具会修改输入数据。有关详细信息以及避免数据被意外更改的策略,请参阅修改或更新输入数据的工具

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

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

    许可:

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

  • 启用撤消切换按钮对于企业级地理数据库的输入无效。

  • 下面是所有几何问题和此工具将执行的相应修复的列表:

    • Null geometry - 从要素类中删除记录。 要保留具有空几何的记录,请取消选中删除几何为空的要素(在 Python 中为 delete_null = "KEEP_NULL")。
    • Short segment - 删除几何的短线段。
    • Incorrect ring ordering - 更新几何以获得正确的环走向。
    • Incorrect segment orientation - 更新几何以获得正确的线段方向。
    • Self intersections - 融合面中的重叠区域。
    • Unclosed rings - 通过连接环的端点可将非闭合环闭合。
    • Empty parts - 删除 null 或空的部分。
    • Duplicate vertex - 删除其中一个折点。
    • Mismatched attributes - 更新 z 或 m 坐标以实现匹配。
    • Discontinuous parts - 根据现有的不连续部分创建多部分。
    • Empty Z values - z 值将设置为 0。
    • Bad envelope - 更新要素的包络矩形以实现更正。

    下面是可能会由企业级地理数据库中存储的数据导致的几何问题和此工具将执行的相应修复的列表:

    • 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 - 将移除垂直线(形状可能转换为 2D)。
    • SE_OUTER_SHELLS_OVERLAP - 重叠部分将被合并。
    • SE_SELF_INTERSECTING - 将根据需要添加交叉点。

    注:

    可能无法使用 ArcGIS 工具修复与企业级数据库中存储的数据相关的某些问题。

  • 应用一种修复后,此工具将重新评估所得几何,如果发现了其他问题,将执行该问题的相关修复。 例如,修复具有 Incorrect ring ordering 问题的几何结果可能会导致具有 Null geometry 问题的几何。

  • Bad dataset extent修复几何中不存在修复。 要解决这一问题,请运行数据集上的重新计算要素类范围工具。

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

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

  • 使用 OGC 选项修复要素的几何后,任何后续的编辑或修改都可能导致几何不再符合 OGC 规范。 修改要素后,运行检查几何工具以检查新几何问题。 如有必要,重新运行修复几何工具。

参数

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

将处理的要素类或图层。

许可:

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

Feature Layer
删除几何为空的要素
(可选)

指定是否删除几何为空的要素。

  • 选中 - 将从输入中删除几何为空的要素。 这是默认设置。
  • 未选中 - 不从输入中删除几何为空的要素。

注:
对于存储在企业级数据库或地理数据库、GeoPackage 或 SpatiaLite 数据库中的数据,删除几何为空的要素不可用。

Boolean
验证方法
(可选)

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

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

派生输出

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

更新后的输入要素。

Feature Layer

arcpy.management.RepairGeometry(in_features, {delete_null}, {validation_method})
名称说明数据类型
in_features

将处理的要素类或图层。

许可:

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

Feature Layer
delete_null
(可选)

指定是否删除几何为空的要素。

  • DELETE_NULL从输入中删除几何为空的要素。 这是默认设置。
  • KEEP_NULL不从输入中删除几何为空的要素。

注:
KEEP_NULL 仅对来自企业级数据库或地理数据库、GeoPackage 或 SpatiaLite 数据库的输入有效。

Boolean
validation_method
(可选)

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

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

派生输出

名称说明数据类型
out_feature_class

更新后的输入要素。

Feature Layer

代码示例

RepairGeometry 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在 shapefile 上以即时模式使用 RepairGeometry 函数:

import arcpy
arcpy.RepairGeometry_management("c:/data/sketchy.shp")
RepairGeometry 示例 2(独立脚本)

以下独立脚本是如何在脚本中应用 RepairGeometry 函数的示例。

# Description: 
#   Goes through the table generated by the Check Geometry tool and does 
#   the following
#   1) backs-up all features which will be 'fixed' to a "_bad_geom" feature class
#   2) runs repairGeometry on all feature classes listed in the table 

import arcpy
import os
 
# Table that was produced by Check Geometry tool
table = r"c:\temp\data.gdb\cg_sample1"
 
# Create local variables
fcs = []
 
# Loop through the table and get the list of fcs
for row in arcpy.da.SearchCursor(table, ("CLASS")):
    # Get the class (feature class) from the cursor
    if not row[0] in fcs:
        fcs.append(row[0])
 
# Now loop through the fcs list, backup the bad geometries into fc + "_bad_geom"
# then repair the fc
print("> Processing {0} feature classes".format(len(fcs)))
for fc in fcs:
    print("Processing " + fc)
    lyr = 'temporary_layer'
    if arcpy.Exists(lyr):
        arcpy.Delete_management(lyr)
    
    tv = "cg_table_view"
    if arcpy.Exists(tv):
        arcpy.Delete_management(tv)

    arcpy.MakeTableView_management(table, tv, ("\"CLASS\" = '%s'" % fc))
    arcpy.MakeFeatureLayer_management(fc, lyr)
    arcpy.AddJoin_management(lyr, arcpy.Describe(lyr).OIDFieldName, tv, "FEATURE_ID")
    arcpy.CopyFeatures_management(lyr, fc + "_bad_geom")
    arcpy.RemoveJoin_management(lyr, os.path.basename(table))
    arcpy.RepairGeometry_management(lyr)

环境

特殊情况

许可信息

  • Basic: 受限
  • Standard: 是
  • Advanced: 是

相关主题