ESRIジャパンでは GISコミュニティフォーラムなどの機会に ArcPy 入門者向けセッションを開催しています。そのアンケートで「リファレンスの調べ方を知りたい」というご意見をいただくことがあります。この意見にこたえるために本記事では ArcPy 入門後にリファレンスを読むコツを紹介します。
本記事は ArcPy のリファレンス ページに焦点を当てた記事となります。
ArcPy の基礎を全体的に学習したい方はこちらの教材をご覧ください。基礎から応用まで専門の講師から学びたい方はトレーニングの利用をご検討ください。
ArcPy は ArcGIS Pro の操作を Python で実行し、自動化させることができるライブラリーです。ジオプロセシングツールから直接スクリプトを参照できる点、サンプル コードが豊富に提供されている点、トレーニング コースが存在する点などからリファレンスを見ることなくスクリプトを記述できるケースがあります。数のサンプルを組み合わせ、一連の処理の流れを作りたい時、細かく処理やデザインをカスタマイズしたい時、そして ArcGIS Pro からスクリプトを作り出す方法が使えない時には物足りなく感じることがあるかもしれません。そんな時に、リファレンスが読めるとこれらの問題を解決することができ、より自分の意志の通りに処理ができるようになります。
次の画像が ArcGIS Pro Python リファレンス、すなわち ArcPy のリファレンスのトップ画面になります。
ArcPy に関する内容はこのページからアクセスできます。ジオプロセシング ツールの場合は Python タブの隣にあるツール リファレンス タブからアクセスできます。
ページ左には「ArcPy 関数」、「ArcPy クラス」のほか機能ごとに分類されたモジュールが表示されています。よく使われるものに注目していくつか紹介します。
データにアクセスするためのクラスや関数が分類されています。Describe 関数やカーソルが代表的です。
プロジェクト ファイル(.aprx)、マップ、レイヤーを操作するために使います。マップ作成、エクスポートを自動化する手順でよく使われます。モジュールの中では一番見慣れた方が多いかと思います。チュートリアルではプロジェクト ファイルの取得から作成したマップのエクスポートまでの一連の流れが解説されています。
ArcPy を使って ArcGIS Pro から ArcGIS Online、もしくは ArcGIS Enterprise にコンテンツをアップロードするために使います。マップやレイヤーだけでなくツールやサービスの公開や共有もできます。
モジュールやジオプロセシング ツール以外にも様々なクラスや関数が提供されています。詳しくは ArcPy クラスや ArcPy 関数を参照してください。 次のセクションからは、ArcPy のツール、関数、クラスのそれぞれのリファレンス ページの読み方を見ていきましょう。
ここでは、属性検索ページを一例として見ていきましょう。
ツール リファレンスの場合は以下のような見出しでページが構成されています。
・サマリー
・使用法
・パラメーター
・ダイアログ
・Python
・環境
・ライセンス情報
・関連トピック
ツールの説明についてはサマリーや使用法から確認できます。ArcPy を使う時はパラメーターの Python を確認します。例えば、今回扱うフィーチャのエクスポートでは以下の図のようになっています。
図の番号順に見ていきましょう。まず 1 番の箇所は使い方の構文です。ツールの場合は基本的に「arcpy.ツールボックスのエイリアス名.ツール名(パラメーター)」の形になっています。
次に 2 番の箇所は各パラメーターの名前と説明です。1 番のパラメーターに「{}」がついているものは「(オプション)」と書かれています。これは必要であれば入力するパラメーターに追加します。必要なければ追加する必要がないので省略することで書く量を減らすことができ、スクリプトがよりシンプルになります。
最後に 3 番の箇所はデータ タイプです。どのような種類のデータが必要かを示しています。スクリプトの途中で変数のデータ タイプを探す時は type 関数を使うことができます。
ツールを実行すると戻り値として Result オブジェクトが返ってきます。Result オブジェクトからツールの操作に関する情報を取得することができます。出力やメッセージなどの操作に関する情報を取得したり、別のパラメーターに使うこともできます。
例えば、次のようにジオプロセシング ツールの属性検索を実行し、結果を Python ウィンドウに送信したとします。
次の画像がツールを実行後 Python ウィンドウに送信したものになります。
今回使用している属性検索は必須パラメーターが in_layer_or_view のみです。オプションのパラメーターについては where_clause以外は全て None やデフォルト値を選択しています。None やデフォルト値を使用する場合は書かなくても動作に影響はありません。次の図のように不要なパラメーターを省略するとよりすっきりした見た目になります。
Python タブを開くと、パラメーターの下にコードのサンプルが表示されます。主に Python ウィンドウで実行するためのスクリプトとスタンドアロン スクリプトがあります。前者は不必要なパラメーターが削られているスクリプトであるため、シンプルなコードを作成する手掛かりにも使えます。
クラスの場合は以下のような見出しでページが構成されています。
・サマリー
・説明
・プロパティ
・方法の概要
・方法
・構文
・戻り値
・コードのサンプル
関数の場合は以下のようになります。
・サマリー
・説明
・構文
・戻り値
・コードのサンプル
前述のツールの場合でも紹介していますが、「{}」がついているものは任意となるのでパラメーターやメソッドを入力する時に自分で調整します。
ここでは最もよく目にするクラスの 1 つである ArcGISProject クラスを見てみましょう。
冒頭からサマリーや説明が書かれていますが、その次にプロパティが現れます。このセクションでは各クラスに含まれるプロパティ、その説明とデータ タイプが書かれています。プロパティが別のクラスになる場合はリンクから辿ることもできます。
その次はクラスに含まれるメソッドの説明が現れます。メソッドについてはまず、「方法の概要」セクションで各メソッドの名前と短い概要が列挙され、その次の「方法」セクションで個別に詳しくメソッドの説明が書かれています。
サンプル コードはクラスや関数により数が異なります。例えば、ArcGISProject クラスでは 8 つのサンプル コードがあります。
ここまで ArcPy リファレンスの構成についてツールと「クラス・関数」に分けて確認しました。ArcPy でスクリプトを作成する際にはリファレンスを見ながら書いていくと思いますが、ArcGIS Pro を使用する場合はツールの履歴画面から「Python ウィンドウに送信」や「ノートブックに送信」を使用してスクリプトの一部を作る方もいると思います。
この手法はツールのみが対象で、ツールにないシンボル設定やエクスポートなどのコマンドはリファレンスを参照し自作する必要があります。例えば ArcPy を利用して ArcGIS Pro 上のフィーチャ レイヤーを ArcGIS Online にフィーチャ サービスとして公開する流れは一部の過程のみツールが対応しているのでリファレンスを見ながらスクリプトを自作する必要があります。次の章ではコマンドの一例としてシンボル変更のスクリプトを見ていきます。
今回はレイヤーの見た目を変更したいと思います。色分けをするレンダラーと色を設定するシンボルを使って変更を行います。
# lyrs はレイヤーのリスト、lyr は一つ一つのレイヤーのオブジェクト
for lyr in lyrs:
if lyr.name == "放置車両":
sym = lyr.symbology
sym.updateRenderer("GraduatedColorsRenderer") # 等級色
sym.renderer.classificationField = "total" #分類するフィールド名
sym.renderer.classificationMethod = "Quantile" # 等量分類
sym.renderer.breakCount = 5 # クラス
lyr.symbology = symまず、レンダラーにアクセスします。Layer クラスの symbology プロパティを取得し、レンダラーにアクセスできるようにします。
sym = lyr.symbology今回はシンボルの変更を行うので、symbology クラスにある updateRenderer メソッドを実行するのですが、ここでリファレンスを見てみましょう。今回は必須のパラメーターが 1 つで、決められた文字列の中から選択して入力します。今回は等級色とするので「GraduatedColorsRenderer」を入力します。五つのパラメーターの項目は図の下にあるリストを参照してください。
sym.updateRenderer("GraduatedColorsRenderer")次に、レンダラーの中身を指定するために symbology クラスの renderer プロパティにアクセスします。
sym.rendererここで 、updateRenderer で指定した GraduatedColorsRenderer オブジェクトを見つけられます。次は GraduatedColorsRenderer クラスのリファレンスを見てみましょう。設定できるプロパティの数が多数ありますが、ここでは色分けに使うフィールド、分類の方法、分類の数を指定したいとしましょう。この 3 つを指定するために必要なプロパティ「classificationField」、「classificationMethod」、「classBreaks」を設定します。「classificationField」は等量分類で分類したいため Quantile を指定します。分類方法に関してはデータの分類方法を参照ください。
sym.renderer.classificationField = "total"
sym.renderer.classificationMethod = "Quantile"
sym.renderer.breakCount = 5最後に Layer クラスの symbology プロパティに、設定を行った symbology オブジェクトを割り当てます。
lyr.symbology = symこのようにメソッドやプロパティを設定してシンボルを変更する一連の流れを示すスクリプトを作ることができました。ここでは「GraduatedColorsRenderer」を指定し、レンダラーを利用したシンボル変更を行いましたが、「SimpleRenderer」を指定し、symbol プロパティを利用して単一のシンボルを設定するやり方にアレンジすることもできます。
for lyr in lyrs:
if lyr.name == "<レイヤー名>":
sym = lyr.symbology
sym.updateRenderer("SimpleRenderer")
sym.renderer.symbol.applySymbolFromGallery("バス ターミナル")
sym.renderer.symbol.color = {"RGB" : [243,32,41,100]}
sym.renderer.symbol.outlineColor = {"RGB" : [0,0,0,100]}
sym.renderer.symbol.size = 21
lyr.symbology = sym上のようなシンボルをスクリプト上で作成したい場合には、symbol のリファレンスを確認しながら作成する必要があります。
本記事では ArcPy のリファレンスの調べ方としてリファレンス ページの構造や見方について解説しました。サンプル コードを自分の環境用にカスタマイズする時や、新たにスクリプトを作成する時に役立つ可能性があります。この記事によって少しでも ArcPy への敷居が下がれば幸いです。