【Python コード例】 複数データを標準地域メッシュ(2次)でクリップするスクリプトツール


今回は、ArcPy, Pythonが最も得意とする繰り返し処理を行うサンプルスクリプトツールをご紹介します。Pythonで繰り返し処理のコードを書き、スクリプトツールを作成することで、作業効率の大幅な向上が可能なツールを共有できます。必要なライセンスはArcGIS Desktop 10以上(ArcView, ArcEditor, ArcInfoのいずれでも動作)です。

サンプルスクリプトツールは以下からダウンロードしてください。

サンプルスクリプトツール ダウンロード

[サンプルスクリプトツールの説明]

標準地域メッシュ(2次)の各メッシュタイルを対象範囲としたクリップ処理を、指定したワークスペース(フォルダ、ジオデータベース)内のすべてのフィーチャクラスに対して実行します。また、クリップされたデータは、自動的にメッシュタイルごとに分かれたフォルダに出力されます。

01_3


[実行方法]

ダウンロードしたスクリプトツールの実行は、標準のジオプロセシング ツールと同様に操作を行うことが可能です。
02_2

[Pythonコード]

# coding:shift_jis

# arcpyパッケージのインポート

import arcpy, os, traceback

# 変数:
inputWorkspace = arcpy.GetParameterAsText(0)   # 入力ワークスペース

mesh2FC = arcpy.GetParameterAsText(1)   # 標準地域メッシュ(2次)

outputWorkspace = arcpy.GetParameterAsText(2)   # 出力フォルダ

overwrite = arcpy.GetParameter(3)   # 上書きの許可(True or False)

# 2次メッシュIDのフィールド名

mesh2Field = "MESH2_ID"

# 出力ファイルの上書き許可

if overwrite:
   
     arcpy.env.overwriteOutput = True

else:
   
     arcpy.env.overwriteOutput = False

# ワークスペースの設定

arcpy.env.workspace = inputWorkspace

# フィーチャクラス一覧の取得

inputFcList = arcpy.ListFeatureClasses()

# 2次メッシュのレコード一覧を取得

meshRows = arcpy.SearchCursor(mesh2FC)

try:
   
     # レコードの繰り返し処理
   
     for meshRow in meshRows:
       
       # 2次メッシュIDの取得
       
       clipMesh2ID = str(meshRow.getValue(mesh2Field))
       
       arcpy.AddMessage("2次メッシュID: " + clipMesh2ID)
       
       clipLayer = "clipLayer" + clipMesh2ID
       
       jouken = """ + mesh2Field + ""=" + clipMesh2ID
       
       # フィーチャレイヤの作成 (ジオプロセシングツール)
       
       arcpy.MakeFeatureLayer_management(mesh2FC, clipLayer, jouken)
       
       # 出力フォルダパス
       
       outputFolder = outputWorkspace + os.sep + clipMesh2ID
       
       outputFolder = outputFolder.encode("shift_jis")
       
       # 出力フォルダの作成
       
       arcpy.AddMessage("出力フォルダの作成")
       
       if os.path.isdir(outputFolder):
            
            arcpy.AddMessage("フォルダはすでに存在します")
       
       else:
            
            os.makedirs(outputFolder)
       
       # クリップされるフィーチャクラスの繰り返し処理
       
       for inputFC in inputFcList:
            
            inputFC = inputFC.encode("shift_jis")
            
            arcpy.AddMessage("処理対象: " + inputFC)
            
            # 出力データの名前
            
            if inputFC.find(".shp") == -1:
               
                 outputFC = outputFolder + os.sep + inputFC + ".shp"
            
            else:
               
                 outputFC = outputFolder + os.sep + inputFC
            
                 arcpy.AddMessage("クリップ処理")
            
                 # クリップ (ジオプロセシングツール)
            
                 arcpy.Clip_analysis(inputFC, clipLayer, outputFC)
            
                 arcpy.AddMessage("ジオメトリの修正")
            
                 # ジオメトリの修正 (ジオプロセシングツール)
            
                 arcpy.RepairGeometry_management (outputFC, "DELETE_NULL")
       
            del clipLayer
       
            del outputFC

     except:
   
         arcpy.AddError(traceback.format_exc())

[注意事項]

本スクリプトツールは、サンプルツールとして提供しておりますので、すべてのお客さまの環境での動作を保障するものではありません。また、スクリプトの内容に関するご質問はお受けできませんので、ご了承ください。

なお、本サンプルを使用して生じたいかなる障害についても、弊社では責任を負いかねますことを予めご了承願います。