Python でアドインを作ってみよう!:ボタン編

前回の記事では、概要としてアドイン プロジェクトの作成をご案内しました。今回から本格的にアドインの作成手順についてご紹介していきます。
まずは独自の機能を持ったボタンの作成方法です。

アドイン プロジェクトの作成
前回のおさらいにもなりますが、新規にアドインを作成する場合、そのアドインに関連するファイル群を格納するプロジェクト フォルダが必要です。
アドイン プロジェクトの作成方法については、以前のブログ記事をご参照ください。

プロジェクトの基本設定
1. 作成したプロジェクトに対し、名称や作成者などのプロパティを設定していきます。項目の詳細は以下のようになります。
※入力する値は適宜変更してください。

・Select Product:ArcMap(対象アプリケーション)
・Name:SampleAddin2(ツール名/カテゴリ名)
・Version:0.1(バージョン)
・Company:Esri Japan(会社/組織)
・Description:サンプル アドイン(説明)
・Author:Esri Japan(作成者)
・Image:※デフォルト画像のままで構いません(アドインに関連づけられた画像)

01
2. [Save] をクリックし、プロジェクトを保存します。

ボタンの作成
ボタンは必ずツールバーやメニューに格納されている必要があります。今回はボタン作成の前にツールバーを作成します。

1. [Python Add-In Wizard] の [Add-In Contents] タブをクリックします。
2. [TOOLBARS] を右クリックし、[New Toolbar] を選択します。
3. 以下の項目を設定します。

・Caption:Python ツールバー(表示名)
・ID:デフォルトのままで構いません(アドインを識別するための一意の名前)
・Show Initially:チェックあり(アプリケーション起動時に表示/非表示)

ツールバーが作成できたら、ツールバーに格納するボタンの作成を行います。

4. [ArcGIS Python Add-In Wizard] ダイアログの左側のウィンドウから、追加された [Toolbar] を右クリックし、[New Button] を選択します。
5. 以下の項目を設定します。

・Caption:ランダムにフィーチャを選択(ボタン名)
・Class Name:SelectRandomFeature(ボタンのクラス名)
・ID:SampleAddin2_addin.button(アドインを識別するための一意の名前)
・Tooltip:これはツールチップです。(ツールチップ)
・Message:これはツールの説明です。(説明)
・Help Headling:これは見出しです。(ヘルプ コンテンツの見出し)
・Help Content:これはヘルプ コンテンツです。(ヘルプ コンテンツ)
・Image for control:(アイコン画像)

6. [Save] をクリックします。
7. [Open Folder] をクリックします。

[Save] ボタンをクリックした時点で、プロジェクト フォルダ内に設定したツールバーやボタンを作成するためのファイル群が作成されます。次のステップでは、ボタンをクリックした際の動作を記述します。

コードの記述
1. 開かれたプロジェクト フォルダから「Install」フォルダを開きます。
2. フォルダ内から「<プロジェクト フォルダ名>_addin.py」スクリプト ファイルを任意の Python エディタで開きます。

Python アドイン ウィザードは、作成するコマンドの種類によってそのコマンドを使用して行われた操作に対する処理を記述するブロックが自動的に追加されるようになっています。今回はボタンを作成したので、「onClick」(ボタンをクリックした時に動作する)ブロックが追加されているのが分かります。

02
今回のブログでは、マップの一番上位にあるレイヤからランダムに 1 つのフィーチャを選択するボタンを作成します。

3. import pythonaddins の下に以下のコードを追加します。

import random

4. 「OnClick」ブロックに以下のコードを記述します。
※ Python ではインデント(空白)も言語を構成する一部です。下図を参考に、インデント数に気を付けながら記述してください。

def onClick(self):
  mxd = arcpy.mapping.MapDocument(“Current”)
  lyr = arcpy.mapping.ListLayers(mxd)[0]

  ListCount = range(0,int(arcpy.GetCount_management(lyr.datasource).getOutput(0))+1)
  OID = arcpy.Describe(lyr).OIDFieldName
  exp = ‘”‘ + OID + ‘” = ‘ + str(random.choice(ListCount))

  arcpy.SelectLayerByAttribute_management(lyr,”NEW_SELECTION”,exp)

03
5. 「<プロジェクト フォルダ名>_addin.py」を上書き保存し、Python エディタを閉じます。

アドイン ファイルの作成
Python アドインは、プロジェクト フォルダ内にある「makeaddin.py」をダブルクリックするだけで、先ほど記述したコードなどを基に自動でアドイン ファイルが作成されます。

1. プロジェクト フォルダに移動し「makeaddin.py」ファイルをダブルクリックします。
2. しばらくすると、プロジェクト フォルダ内に「<プロジェクト名>.esriaddin」ファイルが作成されます。

アドインの検証
作成したアドインが正常に動作するかを検証しましょう。

1. ArcMap を起動します。
2. ArcMap の [カスタマイズ] メニュー → [カスタマイズ モード] を選択します。
3. [ユーザー設定ダイアログ] から [ファイルから追加] を選択します。
4. 作成したアドイン プロジェクト フォルダに移動し、「<プロジェクト名>.esriaddin」ファイルを選択して、[開く] を選択します。
5. [Esri ArcGIS Add-In Installation Utility] の [Install Add-In] をクリックします。
6. [追加オブジェクト] ダイアログの [OK] をクリックします。
7. [ユーザー設定] ダイアログの [ツールバー] タブ → [ツールバー] 項目内に作成したアドイン ツールバー(今回は [Python ツールバー])が追加されますので、チェックを入れます。
8. ArcMap の任意の場所にツールバーが追加されます。

049. フィーチャが 2 つ以上存在するデータをマップに追加し、[Python ツールバー] → [ランダムにフィーチャを選択] ボタンをクリックします。
10. 何回かボタンをクリックし、ランダムにフィーチャが選択されるのを確認します。

よく行う操作をボタンを 1 クリックで行えるようにできれば、業務の効率化を図れます。次回のブログでは、ツールの作成方法をご紹介します。

■関連リンク
ArcGIS for Desktop ヘルプ
・ Python Add-In Wizard:http://www.arcgis.com/home/item.html?id=5f3aefe77f6b4f61ad3e4c62f30bff3b
・ Python アドインとは:http://resources.arcgis.com/ja/help/main/10.2/#/na/014p00000025000000/

ArcGIS ブログ
・ Python でアドインを作ってみよう!:概要編:http://blog.esrij.com/arcgisblog/2014/07/python-0c8b.html
・ Python を使って ArcGIS での作業効率を上げよう!:http://blog.esrij.com/arcgisblog/2014/07/6-78cb.html