Python でアドインを作ってみよう!:ツール編

前回までの記事で、アドイン プロジェクト作成の概要、そしてボタンの作成方法をご案内しました。今回は、マップ上で何かしらの操作を行うことにより実行されるツールを作成する方法をご紹介します。

アドイン プロジェクトの作成

前回のおさらいにもなりますが、新規にアドインを作成する場合、そのアドインに関連するファイル群を格納するプロジェクト フォルダが必要です。

アドイン プロジェクトの作成方法については、以前のブログ記事をご参照ください。

プロジェクトの基本設定
1. 作成したプロジェクトに対し、名称や作成者などのプロパティを設定していきます。項目の詳細は以下のようになります。
※入力する値は適宜変更してください。
・Select Product : ArcMap (対象アプリケーション)
・Name : SampleAddin3 (ツール名/カテゴリ名)
・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 ツールバー 2 (表示名)
・ID : デフォルトのままで構いません (アドインを識別するための一意の名前)
・Show Initially : チェックあり (アプリケーション起動時に表示/非表示)

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

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

・Caption : マップのXY座標を取得 (ツール名)
・Class Name : GetMapXY (ツールのクラス名)
・ID : SampleAddin3_addin.tool (アドインを識別するための一意の名前)
・Tooltip : これはツールチップです。 (ツールチップ) 
・Message : これはツールの説明です。(説明)
・Help Headling : これは見出しです。 (ヘルプ コンテンツの見出し)
・Help Content : これはヘルプ コンテンツです。(ヘルプ コンテンツ)
・Image for control : (アイコン画像)

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

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

コードの記述

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

Python アドイン ウィザードは、作成するコマンドの種類によって、そのコマンドを使用して行われた操作に対する処理を記述するブロックが自動的に追加されるようになっています。今回は、ツールを作成したので、「OnMouseDownMap」(マップ上でマウスが押下された場合)、「OnKeyDown」(キーボードのキーが押下された場合)といったツールの動作に呼応した関数が用意されています。これらは「イベント」と呼ばれ、ユーザーがツールを使用した動作に合わせて、イベント内で記述したコードが実行されます。

02
今回のブログでは、ArcMap のマップ上でクリックした際に、クリックした箇所の座標値をメッセージボックスで表示するツールを作成します。

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

#coding:cp932 

03_2
4. 「OnMouseDownMap」ブロックに以下のコードを記述します。
※ 同じような名前のイベントが存在しますので、ご注意ください。また、Python ではインデント(空白)も言語を構成する一部です。下図を参考に、インデント数に気を付けながら記述してください。

def onMouseDownMap(self, x, y, button, shift):
    pythonaddins.MessageBox(u”X 座標 : ” + str(x) +u”nY 座標 : ” + str(y),u”クリック箇所の座標値”) 

04

Python アドインには、Python アドインの作成時のみ利用できる「pythonaddins」モジュールが存在します。このモジュールは、メッセージボックスの表示や、ArcMap の [コンテンツ] ウィンドウで選択されているレイヤを取得するなど、情報の取得をしやすくするための機能群が格納されています。

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 ツールバー2])が追加されますので、チェックを入れます。
8. ArcMap の任意の場所にツールバーが追加されます。

05
9. 座標系が定義されているデータをマップに追加し、[Python ツールバー2] → [マップのXY座標を取得] ツールをクリックします。
10. マップの任意の箇所をクリックしますと、クリックした箇所の座標値がメッセージ ボックスとして表示されます。

06
Python アドインを利用することで、クリックした箇所の座標値をすぐに調べることができます。今回は、XY 座標値を表示するだけですが、取得した XY 座標値を使用してポイントを追加するツールを作成することも可能です。次回のブログでは、独自のエクステンションを作成する方法をご紹介します。

■関連リンク
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 でアドインを作ってみよう!:ボタン編:http://blog.esrij.com/arcgisblog/2014/07/python-101d.html
・Python を使って ArcGIS での作業効率を上げよう!:http://blog.esrij.com/arcgisblog/2014/07/6-78cb.html