ジオメトリの修正 (Repair Geometry) (データ管理)

サマリー

フィーチャクラスの各フィーチャにジオメトリの問題があるかどうかを検査します。 問題が検出されると、修正が適用され、1 行分の説明によって対象のフィーチャと修正されたジオメトリの問題を特定します。

このツールは、[ジオメトリのチェック (Check Geometry)] ツールと同じロジックを使用して、ジオメトリの問題を修正します。

ジオメトリのチェックと修正に関する詳細

使用法

    注意:

    このツールを実行すると、入力データが変更されます。詳細と不要なデータの変更を回避するための方法については、「入力データを変更または更新するツール」をご参照ください。

  • 有効な入力形式は、シェープファイル、およびファイル ジオデータベース、エンタープライズ データベースまたはジオデータベース、GeoPackage、SpatiaLite データベースに保存されているフィーチャクラスです。 エンタープライズ データベースまたはエンタープライズ ジオデータベースに保存されているフィーチャクラスでは、次の空間タイプがサポートされます。

    • Microsoft SQL Server - Geometry および Geography
    • PostgreSQLPostGIS、Geometry、および Geography
    • Oracle - SDO_Geometry

    ライセンス:

    Desktop Basic ライセンスを使用して、このツールを、シェープファイル、およびファイル ジオデータベース、GeoPackage、または SpatiaLite データベースに保存されているフィーチャクラスのみに適用できます。 Desktop Standard または Desktop Advanced ライセンスを使用して、このツールを、エンタープライズ データベースまたはジオデータベースに保存されているフィーチャクラスにさらに適用できます。

  • [元に戻すの有効化] 切り替えボタンは、エンタープライズ ジオデータベースからの入力に対しては無効です。

  • 以下に、ジオメトリの問題とそれに対処するためにツールで実行される修正を示します。

    • Null geometry - フィーチャクラスからレコードを削除します。 NULL ジオメトリを含むレコードを保持するには、[NULL ジオメトリを含むフィーチャを削除] をオフにします (Python では delete_null = "KEEP_NULL")。
    • Short segment - ジオメトリの短い線分を削除します。
    • Incorrect ring ordering - リングの順序が正しくなるように、ジオメトリを更新します。
    • Incorrect segment orientation - 線分の方向が正しくなるように、ジオメトリを更新します。
    • Self intersections - ポリゴンの重複を解消します。
    • Unclosed rings - リングの端点を接続して、閉じていないリングを閉じます。
    • Empty parts - 無効または空のパートを削除します。
    • Duplicate vertex - 頂点の 1 つを削除します。
    • 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 の問題のあるジオメトリが発生する場合もあります。

  • [ジオメトリの修正 (Repair Geometry)] には、Bad dataset extent を解決する修正はありません。 この問題を解決するには、データセットで [フィーチャクラスの範囲を再計算 (Recalculate Feature Class Extent)] ツールを実行します。

  • Esri の整合チェック方法では、Esri Simplify メソッドを使用してジオメトリがトポロジ的に正しいことを確認します。 Esri の整合チェックは、エンタープライズ ジオデータベースに保存されているデータに対してのみ利用可能です。

  • OGC (Open Geospatial Consortium) の整合チェック方法では、「OpenGIS Implementation Standard for Geographic information – simple feature access – Part 1: common architecture」で定義された OGC 仕様にジオメトリが準拠していることを確認します。

  • OGC オプションを使用してフィーチャのジオメトリを修正した後に続けて編集や変更を行うと、ジオメトリが OGC 仕様に準拠しなくなる可能性があります。 フィーチャの変更後は、[ジオメトリのチェック (Check Geometry)] ツールを使用して、ジオメトリの問題が新たに発生していないか確認してください。 必要な場合は、[ジオメトリの修正 (Repair Geometry)] ツールを再実行します。

パラメーター

ラベル説明データ タイプ
入力フィーチャ

処理対象のフィーチャクラスまたはレイヤー。

ライセンス:

Desktop Basic ライセンスは、シェープファイル、およびファイル ジオデータベース、GeoPackage、または SpatiaLite データベースに保存されているフィーチャクラスのみを有効な入力フィーチャ形式として許可します。 Desktop Standard または Desktop Advanced ライセンスは、エンタープライズ データベースまたはジオデータベースに保存されているフィーチャクラスを有効な入力フィーチャ形式として使用することをさらに許可します。

Feature Layer
NULL ジオメトリを含むフィーチャを削除
(オプション)

NULL ジオメトリを含むフィーチャを削除するか指定します。

  • オン - NULL ジオメトリを含むフィーチャを入力から削除します。 これがデフォルトです。
  • オフ - NULL ジオメトリを含むフィーチャを入力から削除しません。

注意:
NULL の削除は、エンタープライズ データベースまたはジオデータベース、GeoPackage、SpatiaLite データベースに保存されているデータに対しては使用できません。

Boolean
整合チェック方法
(オプション)

ジオメトリの問題の識別に使用するジオメトリ整合チェック方法を指定します。

  • EsriEsri のジオメトリ整合チェック方法が使用されます。 これがデフォルトです。
  • OGCOGC のジオメトリ整合チェック方法が使用されます。
String

派生した出力

ラベル説明データ タイプ
修正された入力フィーチャ

更新された入力フィーチャ。

Feature Layer

arcpy.management.RepairGeometry(in_features, {delete_null}, {validation_method})
名前説明データ タイプ
in_features

処理対象のフィーチャクラスまたはレイヤー。

ライセンス:

Desktop Basic ライセンスは、シェープファイル、およびファイル ジオデータベース、GeoPackage、または SpatiaLite データベースに保存されているフィーチャクラスのみを有効な入力フィーチャ形式として許可します。 Desktop Standard または Desktop Advanced ライセンスは、エンタープライズ データベースまたはジオデータベースに保存されているフィーチャクラスを有効な入力フィーチャ形式として使用することをさらに許可します。

Feature Layer
delete_null
(オプション)

NULL ジオメトリを含むフィーチャを削除するか指定します。

  • DELETE_NULLNULL ジオメトリを含むフィーチャを入力から削除します。 これがデフォルトです。
  • KEEP_NULLNULL ジオメトリを含むフィーチャを入力から削除しません。

注意:
エンタープライズ データベースまたはジオデータベース、GeoPackage、SpatiaLite データベースからの入力に対しては、KEEP_NULL のみが有効です。

Boolean
validation_method
(オプション)

ジオメトリの問題の識別に使用するジオメトリ整合チェック方法を指定します。

  • ESRIEsri のジオメトリ整合チェック方法が使用されます。 これがデフォルトです。
  • OGCOGC のジオメトリ整合チェック方法が使用されます。
String

派生した出力

名前説明データ タイプ
out_feature_class

更新された入力フィーチャ。

Feature Layer

コードのサンプル

RepairGeometry の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、シェープファイルのイミディエイト モードで 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: Yes
  • Advanced: Yes

関連トピック