Check Geometry (Data Management)

Summary

Generates a report of geometry problems in a feature class.

For additional information regarding geometry problems, their impact on the software, and potential sources, see Tools for checking and repairing geometries.

Usage

  • Valid input formats are shapefiles, and feature classes stored in a file geodatabase, enterprise database, enterprise geodatabase, GeoPackage, or SpatiaLite database. For feature classes stored in an enterprise database or enterprise geodatabase, the following spatial types are supported:

    • Microsoft SQL Server—Geometry and Geography
    • PostgreSQLPostGIS, Geometry, and Geography
    • Oracle—SDO_Geometry
    • SAP HANA—ST_Geometry

  • Feature classes that are stored in an enterprise geodatabase and registered as versioned are not supported.

  • The Output Table parameter value will include a record for each geometry problem found. If no problems are found, the table will be empty.

  • The contents of the Output Table parameter value, including the PROBLEM field codes, are written in English.

  • For point features, only the null geometry problem is possible.

  • To review the features that are reported to have geometry problems, you can join the Input Features parameter value to the Output Table parameter value using the Add Join tool, along with the input's OBJECTID or FID field and the output table's FEATURE_ID field. If any of the Input Features parameter values are stored in an enterprise geodatabase, enterprise database, GeoPackage, or SpatiaLite database, the output table will also include a TEXT_ID field that is used for noninteger-based OBJECTID columns.

  • The Esri validation option ensures that geometry is topologically correct using the Esri Simplify method. Only the Esri validation is available for data stored in an enterprise geodatabase.

  • The Open Geospatial Consortium (OGC) validation method ensures that geometry complies with the OGC specification as defined in OpenGIS Implementation Standard for Geographic information – simple feature access – Part 1: common architecture.

  • After a feature's geometry is repaired using the OGC option, any subsequent edit or modification may cause the geometry to no longer comply with the OGC specification.

    After feature modification, rerun the Check Geometry tool to check for new geometry issues. If necessary, run the Repair Geometry tool.

  • Geometry that is validated or repaired using the OGC option will be valid for the Esri option. To learn more about both methods, see What is a simple polygon.

  • The problems identified by this tool can be addressed in the following ways:

    • Manually edit and fix the feature with the geometry problems. Some of the problems cannot be fixed through editing.
    • Use the Repair Geometry tool. Some problems associated with data stored in an enterprise database, enterprise geodatabase, GeoPackage, and SpatiaLite database may not be repairable with ArcGIS tools.
  • The Output Table parameter value has the following fields:

    • CLASS—The full path to and name of the feature class in which the problem was found.
    • FEATURE_ID—The Feature ID (FID) or Object ID (OID) for the feature with the geometry problem.
    • TEXT_ID—This field only exists when Input Features values are stored in an enterprise database, enterprise geodatabase, GeoPackage or SpatiaLite database.
    • PROBLEM—A short description of the problem.
  • The PROBLEM field will contain one of the following codes:

    • Short segment—Some segments are shorter than allowed by the system units of the spatial reference associated with the geometry.
    • Null geometry—The feature has no geometry or the SHAPE field is empty.
    • Incorrect ring ordering—The polygon is topologically simple, but its rings may not be oriented correctly (outer rings clockwise, inner rings counterclockwise).
    • Incorrect segment orientation—Individual segments are not consistently oriented. The to point of segment i should be incident on the from point of segment i+1.
    • Self intersections—A polygon must not intersect itself.
    • Unclosed rings—The last segment in a ring must have its to point incident on the from point of the first segment.
    • Empty parts—The geometry has multiple parts, and one of them is empty (has no geometry).
    • Duplicate vertex—The geometry has two or more sequential vertices with identical coordinates.
    • Mismatched attributes—The z- or m-coordinate of a line segment's endpoint does not match the z- or m-coordinate of the coincident endpoint on the next segment.
    • Discontinuous parts—One of the geometry's parts is composed of disconnected or discontinuous parts.
    • Empty Z values—The geometry has one or more vertices with an empty z-value (NaN, for example).
    • Bad envelope—The envelope does not match the coordinate extent of the geometry.
    • Bad dataset extent—The extent property of the dataset does not contain all of the features in the dataset. For this problem, the FEATURE_ID value will be -1.

    For data stored in enterprise geodatabases, the PROBLEM field will contain one of the following codes:

    • NEEDS_REORDERING—The shape must be reordered or have duplicate points removed.
    • SE_INVALID_ENTITY_TYPE—The entity type is invalid.
    • SE_SHAPE_INTEGRITY_ERROR—A shape integrity error occurred.
    • SE_INVALID_SHAPE_OBJECT—The shape object handle is invalid.
    • SE_COORD_OUT_OF_BOUNDS—The specified coordinate exceeds the valid coordinate range.
    • SE_POLY_SHELLS_OVERLAP—Two donuts or two outer shells overlap.
    • SE_TOO_FEW_POINTS—The number of points is less than required for the feature.
    • SE_INVALID_PART_SEPARATOR—A part separator is in the wrong position.
    • SE_INVALID_POLYGON_CLOSURE—A polygon does not close properly.
    • SE_INVALID_OUTER_SHELL—A polygon outer shell does not completely enclose all donuts for the part.
    • SE_ZERO_AREA_POLYGON—A polygon shell has no area.
    • SE_POLYGON_HAS_VERTICAL_LINE—A polygon shell contains a vertical line.
    • SE_OUTER_SHELLS_OVERLAP—A multipart area has overlapping parts.
    • SE_SELF_INTERSECTING—A line string or poly boundary is self-intersecting.

Parameters

LabelExplanationData Type
Input Features

The feature class or layer to be processed.

Feature Layer
Output Table
(Optional)

The report (as a table) of the problems discovered.

Table
Validation Method
(Optional)

Specifies the geometry validation method that will be used to identify geometry problems.

  • EsriThe Esri geometry validation method will be used. This is the default.
  • OGCThe OGC geometry validation method will be used.
String

Derived Output

LabelExplanationData Type
Contains Geometry Errors

Indicates whether the tool has identified any geometry issues.

Boolean

arcpy.management.CheckGeometry(in_features, {out_table}, {validation_method})
NameExplanationData Type
in_features
[in_features,...]

The feature class or layer to be processed.

Feature Layer
out_table
(Optional)

The report (as a table) of the problems discovered.

Table
validation_method
(Optional)

Specifies the geometry validation method that will be used to identify geometry problems.

  • ESRIThe Esri geometry validation method will be used. This is the default.
  • OGCThe OGC geometry validation method will be used.
String

Derived Output

NameExplanationData Type
problems_found

Indicates whether the tool has identified any geometry issues.

Boolean

Code sample

CheckGeometry example 1 (Python window)

The following Python window script demonstrates how to use the CheckGeometry function in immediate mode in a file geodatabase.


import arcpy
arcpy.env.workspace = "c:/data/data.gdb"
arcpy.management.CheckGeometry(["contours", "roads", "vegetation"], "CheckGeom_Result")
CheckGeometry example 2 (stand-alone script)

The following stand-alone script uses the CheckGeometry function by looping through all the feature classes in a file geodatabase.

# 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 example 3 (stand-alone script)

The following script uses the CheckGeometry function and checks the derived output to determine whether any problems have been found


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")

Environments

Special cases

Parallel Processing Factor

If the environment is not set (the default) or is set to 0, parallel processing will be disabled. If set to 100 the tool will attempt to distribute the work to all the logical cores on the machine. Specifying a factor between 1 and 99 will cause the tool to identify the percentage of logical cores to use by applying the formula (Parallel Processing Factor / 100 * Logical Cores) rounded up to the nearest integer. If the result of this formula is 0 or 1, parallel processing will not be enabled.

Related topics