[[GIS/RS knowledge base]]
#contents
*Arcpyはじめのいっぽ [#o9e760e6]
こんなときにはArcpyを使って処理するとべんりです。
--バッチ処理をしたいとき
--GUIで処理しようとしたら意味不明なエラーが出てきたとき
--マシンのスペックが低くてGUIを起動するだけで精いっぱいなとき~
結構簡単なのでお試しください。
--python用のエディタを用意するとよいです(Pythonインストール時に付いてくるIDLEでもよいです)~
テキストエディタでもよいですがpython用のエディタはインデント(pythonでは重要です)や関数などをわかりやすく整理・表示することができます。~
**シンプルな処理をしてみる [#h35c4c01]
	# arcpyをインポートする
	import arcpy
	# 必要なエクステンションがあるかどうかをチェックする
	# spatial analyst = "spatial"
	# 3D analyst = "3D"
	arcpy.CheckOutExtension("spatial")
	# 入出力する変数を定義する
	# パスとファイル名はダブルコーテーションで囲う
	# パス区切りは\\で行う
	hexagons_shp = "D:\\test\\hexagons.shp"
	dem50gsi_j2ku54_img = "D:\\test\\dem50gsi_j2ku54.img"
	output_table = "D:\\temp\\zst_slope_02.dbf"
	# 処理コマンド中に上記変数を入力する
	# 上記の変数以外の設定値はダブルコーテーションで囲って指定する
	# どのような変数が必須かはHELPを参照する
	arcpy.gp.ZonalStatisticsAsTable_sa(hexagons_shp, "Unique_ID", dem50gsi_j2ku54_img, output_table, "NODATA", "ALL")
	# 処理が終了したらfinishという文字を表示させる
	print "finish"

**たくさんのファイルをあつめてマージしてみる [#nffd14a7]
-ワイルドカード(*)を用いて複数ファイルを指定して実行する手順~

	# globモジュールをインポートする
	import glob
	# arcpyをインポートする
	import arcpy
	# 出力ファイルのパスと名前を指定
	outputdata = "C:\\temp\\ps_merge_all.shp"
	# ワイルドカードを使用して入力データリストを指定
	files = glob.glob('C:\\temp\\*.shp')
	# Process: マージ (Merge)
	arcpy.Merge_management(files, outputdata)
	# 処理終了時にfinishと出力する
	print = "finish"


**バッチ処理をしてみる~ [#pc87b7e6]
**バッチ処理をしてみる[#pc87b7e6]
ここでの例:国土基本メッシュ単位に分割されたレーザー測量データ(カンマ区切りテキスト)を読み込んでESRI shape file 形式に変換する~

-for文を使って複数ファイルに同じ処理を実施する~
	# arcpyをインポートする
	import arcpy
	# 入力および出力ファイルのディレクトリを指定
	input_dir = "D:\\last_p"
	output_dir = "D:\\last_p_out"
	# 以下より処理内容
	try:
		for x in [111, 222, 333, 444, 555, 666, 777, 888, 999]:
         		#変数の宣言
         		fc = input_dir + "\\13lf" + str(x) + "_l_org_h.txt"
         		fc2 = str(x) + "_la"
         		fc3 = output_dir + "\\13lf" + str(x) + "_p_j2kxy13.shp"
         		# Process: XY イベント レイヤの作成(Make XY Event Layer
         		arcpy.MakeXYEventLayer_management(fc, "x", "y", fc2, "", "z")
         		# Process: フィーチャのコピー(Copy Features)
         		arcpy.CopyFeatures_management(fc2, fc3, "", "0", "0", "0")
         		# 処理が1サイクル正常に終了したら出力ファイル名を表示させる
         		print str(x) + "_p_j2kxy13.shp"
	# どこかで処理が停止した場合 "error" と表示させる
	except:
	print "error"  
	# すべての処理が正常に終了したら"finish"と表示させる
	print "finish"
**pythonのおやくそく [#neeb3e44]
-見やすいコードが好ましいです。リストなどが長くなる場合は適宜改行を入れるとよいです。
-括弧の中は改行できる~
	for x in [111, 222, 333, 444, 
		555, 666, 777, 888, 999]:
-文字列の改行にはトリプルクォーテーションを使う~
"""geometric~
correction"""~
みたいな感じ


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS