Learning ArcGIS 0.1 documentation

PythonでArcGISツールプログラミング

«  NetBeans JavaでArcObjectsプログラミング   ::   コンテンツ

PythonでArcGISツールプログラミング

ArcGIS Desktopで提供されるArcToolboxを、プログラムで自動化できると便利です。 そのような用途に、ArcGISにはPythonによるプログラミング環境が提供されています。

ArcGIS Desktopをインストールすると、Python環境も合わせてインストールされます。 このPython環境には、arcpyライブラリが添付され、arcpyライブラリを介してArcGISの様々な機能にアクセスすることができます。

Pythonプログラミング環境

ArcGIS 10 Desktopをインストールすると、スタートメニュー>[すべてのプログラム]>[ArcGIS]>[Python 2.6]が用意されています。

対話環境

IDLE (Python GUI)をクリックすると、Python Shellが立ち上がります。これはPythonの対話環境で、コマンドを入力して実行すると、すぐに結果が表われます。 ちょっとした操作をするときにはこの環境が便利でしょう。

スクリプト作成と実行

エディタで、Pythonプログラムを記述し、実行する環境です。

ドキュメント

ArcGIS Desktop 10のヘルプドキュメント

  • 実用ライブラリ * ジオプロセシング

    • Pythonによるジオプロセシング

ArcGIS Pythonプログラミング 最初の一歩

プログラミング作業用のディレクトリを作って、Pythonソースファイルを作成します。ファイル名は、通常拡張子は.pyとします。

最初のプログラムは、ファイル・ジオデータベースを指定し、その中に含まれるフィーチャークラスを一覧するものです。

GdbInfo.py

# -*- coding:cp932 -*-

import arcpy, os, sys

inputWorkspace = r'C:\Users\toru\Documents\ArcGIS\worldmap.gdb'
if (not os.path.exists(inputWorkspace)):
    print 'パス ' + inputWorkspace + ' が存在しません。'
    sys.exit(1)

arcpy.env.workspace = inputWorkspace
inputFeatureClassList = arcpy.ListFeatureClasses()
print 'フィーチャークラスの件数:' + str(len(inputFeatureClassList))

for inputFeatureClass in inputFeatureClassList:
    print 'フィーチャー名: ' + str(inputFeatureClass)

コードの先頭行か2行目に、日本語エンコーディングを記述しておきます。Python自体がコメントを含めて日本語を含むソースファイルを解釈するときにエンコーディング指定を必要とします。また、日本語のファイルパスをソースファイル中に記述するときは、Windows OSで適切に動作するようcp932を指定しておきます。

ArcGISのパッケージ arcpy をインポートします。

入力(処理対象)となるワークスペース(ジオデータベース、シェープファイル他)のパス文字列を、arcpy.env.workspaceに設定します。 ここでは、ファイル・ジオデータベースを指定しています。

設定したワークスペースに含まれるフィーチャークラスを取得するListFeatureClasses()関数を呼び、フィーチャークラス一覧(リスト)を取得します。引数には、絞り込み名前(ワイルドカード)、フィーチャータイプ、フィーチャーデータセットを指定することができます。省略時は、絞り込みなし、全てのフィーチャータイプ、ワークスペース(ジオデータベース)直下の(データセットに格納されていない)フィーチャークラスを対象にフィーチャークラス一覧を取得します。

フィーチャークラス一覧からフィーチャークラスを順番に取り出し、名前をプリントします。

コマンドライン引数

スクリプト中にハードコーディングしているワークスペース名を、コマンドライン引数から取得すれば汎用性が高まります。Python標準のコマンドライン引数取得もありますが、ArcGISでは、専用の関数 arcpy.GetParameterAsText()が用意されています。

inputWorkspace = arcpy.GetParameterAsText(0)

ジオデータベースへのアクセス(Cursor)

前述でジオデータベース内のフィーチャークラスを取得できるようになりました。 次は、フィーチャークラスのレコードへアクセスをしてみます。レコードはCursorを使ってアクセスします。Cursorの作成には、arcpyパッケージの関数が提供されています。

読み出し専用カーサ(SearchCursor)

featureClassPath = os.path.join(inputWorkspace, 'rivers')
rows = arcpy.SearchCursor(featureClassPath)
for row in rows:
    name = row.getValue('NAME')
    print 'NAME:' + name

更新カーサ(UpdateCursor)

featureClassPath = os.path.join(inputWorkspace, 'rivers')
rows = arcpy.UpdateCursor(featureClassPath)
for row in rows:
    riverRank = int(row.getValue('RIVER_RANK'))
    if (riverRank == 1):
        row.setValue('RANK_NAME', '一級河川')
        rows.updateRaw(row)

del row
del rows

挿入カーサ(InsertCursor)

featureClassPath = os.path.join(inputWorkspace, 'rivers')

«  NetBeans JavaでArcObjectsプログラミング   ::   コンテンツ