今回は、ArcPy, Pythonが最も得意とする繰り返し処理を行うサンプルスクリプトツールをご紹介します。Pythonで繰り返し処理のコードを書き、スクリプトツールを作成することで、作業効率の大幅な向上が可能なツールを共有できます。必要なライセンスはArcGIS Desktop 10以上(ArcView, ArcEditor, ArcInfoのいずれでも動作)です。
サンプルスクリプトツールは以下からダウンロードしてください。
サンプルスクリプトツール ダウンロード
[サンプルスクリプトツールの説明]
標準地域メッシュ(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())
[注意事項]
本スクリプトツールは、サンプルツールとして提供しておりますので、すべてのお客さまの環境での動作を保障するものではありません。また、スクリプトの内容に関するご質問はお受けできませんので、ご了承ください。
なお、本サンプルを使用して生じたいかなる障害についても、弊社では責任を負いかねますことを予めご了承願います。