ArcGIS Pythonコマンドラインで一括フィルタ


ArcGIS 10.2でもPythonが2.x、3.xにならない限り使いたくないなぁ。
と言うかスクリプト言語って厳密に型既定されてないから人間が動くか意識しなきゃいけないから嫌い。
型意識しなくていいとか100行くらいのコードしか書いてないでしょ…。

500行以上書きそうなら確実に別の方法探した方がいい気がする、苦痛。
そして今更変えれなくて…とかで2000行程度になるとファイル分けるかとか考えだしてドツボ。
VBSで昔書かれたコードをPythonにしようとかでも結構つらい気が
とはいえ便利 (使わざる負えない?)な事もある。

コンパイル不要の解釈型で苦痛感じないのはSQLだが何が違うのか?
構造的に100行超えるSQLとかは書かない(いろんな意味で書けない)からか?
例外がわかりやすいからか?

フィールド演算は、一時的にでもDBにぶち込めば勝てるとしてレイヤ操作関連
とりあえず指定名のレイヤに同一フィルタを設定するのが怠かったので以下。

そして10.0でもSP1とかでは日本語通らない?
SP5や10.1では通るが今一番のメインシステムはSP1なんですが…。

[AAA / TEST / 日本語 ]レイヤにフィルタ[ R_ID=18 ]を設定するようなコード。

import arcpy
layerNames = ["AAA", "TEST", u"日本語"]
filter = "R_ID=18"

mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]

for layerName in layerNames:
	layerList = arcpy.mapping.ListLayers(mxd, layerName , df)
	if layerList is None or len(layerList) < 1:
		continue
	layer = layerList[0]
	if layerName == layer.name:
		print layerName
		layer.definitionQuery=filter

arcpy.RefreshActiveView()
カテゴリー: 運用 タグ: , パーマリンク