ESRIジャパン株式会社 ArcGISブログ

検索

2012年5月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

RSS

« 書籍『ArcGIS Desktop 逆引きガイド(バージョン10対応)』を 8 月 1 日に販売開始 | メイン | ESRI ジャパン サポートサイトで Python のサンプルコードを公開中 »

2011年7月26日 (火)

【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())


[注意事項]
本スクリプトツールは、サンプルツールとして提供しておりますので、すべてのお客さまの環境での動作を保障するものではありません。また、スクリプトの内容に関するご質問はお受けできませんので、ご了承ください。
なお、本サンプルを使用して生じたいかなる障害についても、弊社では責任を負いかねますことを予めご了承願います。

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/492067/26832978

【Python コード例】 複数データを標準地域メッシュ(2次)でクリップするスクリプトツールを参照しているブログ: