プロジェクトの設定とデータセットの確認

Python コードを記述する前に、データセットをダウンロードしてプロジェクトを作成し、使用するデータセットを確認します。

  1. このチュートリアルのデータをダウンロードして、お使いのコンピューター上の場所にコンテンツを展開します。

    .zip ファイルには NotebookStart という名前のフォルダーが含まれています。

    このチュートリアルでは、C:\Tutorials\NotebookStart\ にデータが表示されます。 別のフォルダーを使用できますが、以下の手順でそのパスを必ず調整してください。

  2. ArcGIS Pro を起動します。 サイン インを求められたら、ライセンスが割り当てられた ArcGIS 組織アカウントを使用してサイン インします。
    注意:

    ArcGIS Pro へのアクセス権限または組織アカウントがない場合は、ソフトウェア アクセスのオプションをご参照ください

  3. [別のプロジェクトを開く] をクリックします。

    別のプロジェクトを開く

  4. [プロジェクトを開く] ウィンドウで、[NotebookStart.zip] ファイルから展開したフォルダーを参照し、[Notebooks Getting Started.aprx] をクリックして選択したら [OK] をクリックします。

    プロジェクトが開きます。 現在のマップに、カナダのトロント市の境界線が表示されます。 このマップにいくつかのフィーチャクラスを追加します。

  5. [カタログ] ウィンドウが表示されていない場合は、[表示] タブをクリックし、[カタログ ウィンドウ] をクリックします。
  6. [カタログ] ウィンドウをマップの右側にドッキングします。
  7. [カタログ] ウィンドウで、[フォルダー] を展開し、[NotebookStart] を展開します。
  8. [Toronto.gdb] ジオデータベースを展開します。

    Toronto ジオデータベースを展開してフィーチャクラスを表示

    このジオデータベースには、いくつかのフィーチャクラスが格納されています。

  9. [etobicoke] フィーチャクラスを右クリックして [現在のマップに追加] をクリックします。

    これらのポリゴンはトロント市内の複数のコミュニティを表します。

  10. [fire_stations] および [greenspace] フィーチャクラスを同じマップに追加します。

    これらのフィーチャクラスは、それぞれトロント市内の消防署と緑地の位置を表します。 これらのフィーチャクラスを使用して、Python で各種のジオプロセシング ツールを実行します。

  11. NotebookStart フォルダーには、Notebooks Getting Started.gdb という名前のジオデータベースも含まれています。これは、プロジェクトのデフォルト ジオデータベースであり、現在は空です。

ノートブックの作成と Python コードの実行

このセクションでは、ArcGIS Pro でノートブックを作成し、そのノートブックを使用して Python コードを実行します。

  1. リボンの [解析] タブをクリックし、[ジオプロセシング] グループで、[Python] ボタンのドロップダウン矢印をクリックして [Python ノートブック] をクリックします。

    ArcGIS Pro で新しい Python ノートブックを開きます。

    [Python] ボタンをクリックした場合も、新しいノートブックが開きますが、ドロップダウン メニューを使用すると、Python ノートブックPython ウィンドウのどちらかを選択できることがわかります。 Python ウィンドウは、ArcGIS ProPython コードを実行するもう 1 つの方法です。

    新しいノートブックが表示されるまでに少し時間がかかる場合があり、待っている間に [カーネルを初期化します] というメッセージが画面上に表示されることがあります。 これは、ArcGIS Pro がノートブックでのコードの実行を準備していることを意味します。 カーネルは、バックグラウンドで動作しているソフトウェアであり、ノートブックで入力された Python コードを実行します。

    ノートブックが開くと、ArcGIS Pro のメイン ウィンドウの新しいビューとして表示されます。

    新しいノートブックは、プロジェクトのホーム フォルダーに *.ipnyb ファイルとして保存されます。 新しいノートブックは、[カタログ] ウィンドウの [Notebook] フォルダーの下にも表示されます。

  2. ノートブックで空のセル内をクリックします。

    新しいノートブックが ArcGIS Pro に表示され、セルをクリックすると、緑色に変わります。

    アウトラインが緑色に変わります。

  3. 次のコード行を入力します。

    print("Hello Notebook!")

    Hello Notebook! を出力するコードを追加

    このコードは、括弧内の単一の入力パラメーターに対する print 関数を呼び出します。 このパラメーターは、引用符で囲まれているため、文字列です。 文字列は、Python で使用できる重要かつ有用なデータ タイプです。

  4. セルの上にあるツールバーの [Run] ボタンをクリックします。

    Run ボタンをクリックします。

    セル内のコードが実行され、結果がセルの下に出力されます。 print 関数が文字列値 "Hello Notebook!" に対して実行され、その値が出力されます。 引用符は文字列の一部ではなく、値を文字列として指定するだけのものなので出力されません。 セルの左側の角括弧内に数字 1 が表示されます。 新しい空のセルが下に追加されます。

    Hello Notebook がセルの下に表示され、新しいセルが追加されます。

    Ctrl + Enter キーを押して、現在選択されているセルを実行することもできます。

    各行の後に Enter キーを押して、1 つのセル内に複数のコード行を追加できます。 Enter キーを押すとコード行が実行されるような、Python ウィンドウや、Python エディターの対話型のウィンドウでのコードの実行に慣れているユーザーにとっては、直感に反することかもしれません。

  5. Hello Notebook コードの下のセルに、次のコード行を入力します。

    a = 5
    b = 7
    c = 9
    print(a * b * c)

    このコードは 3 つの変数 abc を作成し、数値 579 に等しい値をそれらに割り当てます。 最後の行でこれらの変数を乗算した結果を出力します。

    3 つの変数のセットとそれらを乗算するための行を含むセル

  6. Ctrl + Enter キーを押します。

    2 つ目のセルの実行後の結果

    セルの実行後に、値 315 がそのセルの下に表示されます。 セルの左側の角括弧内に数字 2 が表示され、これが 2 度目に実行したセルであることを示します。

  7. ノートブックの最上部の [Insert] メニューをクリックし、[Insert Cell Below] をクリックします。

    Insert Cell Below

    新しいセルが、現在選択されているセルの下に追加されます。

  8. 新しいセルに、次のコード行を入力します。

    a * b * c

    このセルを実行するとどのような結果になると思いますか?

  9. セルを実行して、結果を確認します。

    結果は予想どおりでしたか?

    変数 abc の値は、設定された後にメモリーに格納されるため、別のセルで利用できます。

    a x b x c

    セルを実行すると、abc に格納された値を乗算した結果が出力されます。

    ノートブック、Python ウィンドウ、および Python インタープリターでは、Python がシンプルな式ステートメントを評価してその値を出力するため、print ステートメントは不要です。

  10. Ctrl + Enter キーを押してセルを実行した場合は、そのセルの下に新しいセルを挿入します。

    Run ボタンを押してセルを実行した場合は、そのセルの下に新しいセルがすでに存在しています。

  11. 新しいセルに、次のコード行を入力します。
    a * t

    このセルを実行するとどのような結果になると思いますか?

  12. セルを実行して、結果を確認します。

    結果は予想どおりでしたか?

    変数 a は数値 5 に設定されていますが、新しい変数 t はまだ設定されていません。 その結果として、エラーが発生します。 Python では、変数に値を割り当てるまで、その変数を使用することはできません。

    エラーには name t is not defined (名前 t が未定義です) が示されます。

  13. セル内のコードを次のように編集します。

    a * "t"

    このセルを実行するとどのような結果になると思いますか?

  14. セルを実行して、結果を確認します。

    結果は予想どおりでしたか?

    文字列 t の a 倍した結果

    t を引用符で囲むと、Python が t を文字列として扱うように指定したことになります。 Python は、文字列 t の 5 倍と式を評価し、結果として新しい文字列値 'ttttt' を出力します。

  15. 新しいセルを追加して、次のコードを入力します。

    t = 10
    a * t

    このセルを実行するとどのような結果になると思いますか?

  16. セルを実行します。

    結果は予想どおりでしたか?

    t を設定して、a と t を乗算する

    セル内の 1 行目で変数 t を数値 10 に等しいと定義しているため、Python は変数 a に格納されている値を変数 t に乗算することができました。

ArcGIS Pro で新しいノートブックを開き、Python の基本コードを追加して実行しました。 次は、ノートブックの関数を使用して、セル内のコードを管理します。

セル内のコードの管理

Notebooks のコードはセル内で実行されます。 セルの実行後に、実行された順序がセルの横の数字で示されます。 Notebooks には、セルを管理するためのツールがあります。 では、このような側面からノートブックでの Python の操作を確認していきます。

  1. 次の空のセル (必要に応じて新しいセルを追加してください) に、次のコード行を入力して、セルを実行します。

    mylist = [1, 2, 3, 4, 5]

    何が起こったのでしょう?

    このコードは新しい変数を定義し、その変数の値を設定していますが、何も出力されませんでした。

    変数 mylist が定義されています。

    変数 mylist は、角括弧で示されているようにリストです。 リストは、エレメントのシーケンスで構成される、Python の重要なデータ タイプです。 この例では、エレメントは数値ですが、リストには他のデータ タイプを含めることもできます。 リスト内のエレメントはカンマで区切られます。

  2. 次の空のセルに、次のコードを入力して、セルを実行します。

    mylist[-1]

    何が起こったのでしょう?

    インデックス位置 -1 にある変数 mylist

    リスト内のエレメントには 0 番から始まるインデックスが付けられます。 それらのインデックス番号を使用してリスト内の特定のエレメントを取得できます。 インデックス番号 -1 は、リストの末尾から最初のエレメント、つまり、最後のエレメントを意味します。 その結果として、数値 5 が返されます。

    見てわかるとおり、セルの入力プロンプトと出力プロンプトには、セルの実行後に数字が表示されます。 この数字は 1 から始まり、セルの追加に応じて増加します。 この数字は、以前に実行したセルを再度実行したときも含め、セルを実行するたびに増加します。 これらの数字を使用すると、セルが実行された順序を把握できます。

  3. mylist 変数を定義しているセル内のコードを、エレメントの追加によって次のように変更します。ただし、セルを実行しないでください。

    mylist = [1, 2, 3, 4, 5, 6, 7, 8]

    mylist を再定義するコードがまだ実行されていません。

  4. このセルの下にある、コード mylist[-1] を含むセルをクリックしてから [Run] ボタンをクリックします。

    予想どおりの結果が出力されましたか?

    最後の項目を返すコードを再度実行します。

    結果は数値 5 です。 数値 8 でないのはなぜでしょうか?

    ノートブックのコードはセルごとに入力され、以前に使用された変数はすべてメモリーに格納されます。

    mylist 変数を再定義するコードを含むセルを実行するまで、mylist の値は、依然として、メモリーに格納された値 [1, 2, 3, 4, 5] のままであり、そのリスト内で位置 -1 にある値は 5 のままです。

  5. mylist = [1, 2, 3, 4, 5, 6, 7, 8] を含むセルをクリックして実行します。
  6. mylist[-1] を含むセルをクリックして実行します。

    これで、リストの最後の位置にある値は 8 になります。

    リスト変数を更新して、最後のインデックス位置を出力します。

    セルを個別に実行する代わりに、複数のセルを選択して同時に実行することができます。または、[Cell] メニューをクリックして [Run All] をクリックし、ノートブックのすべてのセルを実行できます。

    つながりのあるコード行を同じセルにまとめることをお勧めします。 たとえば、上記の 2 つのセルを 1 つのセルに結合してみることには価値があります。 1 つのセルから別のセルへ手動でコードをコピーして貼り付けることができますが、セルを結合することもできます。

  7. mylist 変数を定義するセルをクリックします。

    このセルには mylist = [1, 2, 3, 4, 5, 6, 7, 8] が含まれています。

  8. [Edit] メニューをクリックし、[Merge Cell Below] をクリックします。

    Merge Cell Below

    結果として、結合されたコード行を含む 1 つのセルが示されます。 セルの下にあった結果は削除されました。 マージされた 2 つのセルのコード行の間に空白行が追加されますが、必要に応じてセルを編集してこの行を削除できます。

  9. マージされたセルを実行します。

    マージされたセルを実行します。

    [Edit] メニューには、ノートブックでセルを操作するための便利な方法が他にも多数用意されています。 セルをコピー、貼り付け、削除、分割、マージでき、また、他のセルを基準に選択したセルを上下に移動できます。

    その他のツールが、[View][Insert][Cell] メニュー オプションで提供されています。

    最も広く利用されているツールが、ノートブック ツールバーのボタンとしても提供されています。

    ノートブック ツールバー

    次に例を示します。

    • insert cell below
    • cut selected cells
    • copy selected cells
    • paste cells below
    • move selected cells up
    • move selected cells down

    さらに多くのツールが [command palette] にあります。

  10. [command palette] ボタンをクリックします。

    command palette ボタンをクリックします。

    コマンドのリストが表示されます。

    コマンドをクリックして実行できます。 コマンドに応じて、ノートブックで選択したセルまたはすべてのセルにコマンドが適用されます。

  11. [command palette] で、[clear all cells output] をクリックします。

    clear all cells output をクリックします。

    すべてのコードは同じ状態のままですが、すべての出力が削除されました。 いずれのセルも実行されていないため、入力プロンプトと出力プロンプトは空白になります。 セルを実行すると、プロンプトは再び 1 から始まります。

    [command palette] には、多くのタスクのショートカットも表示されます。

  12. [command palette] ボタンをクリックし、[insert cell below] が現れるまで下にスクロールします。

    command palette の insert cell below

    このコマンド用のキーボード ショートカットが、コマンドの右側に表示されています。 ノートブックのセルがコマンド モードの場合、ショートカットは英字の B になります。

  13. パレットの外側 (ただし、ノートブック内) をクリックして、[command palette] を非表示にします。
  14. 2 つ目のセルの左側の空間をクリックします。すると、セルが青色に変わります。

    セルの左側をクリックしてコマンド モードで選択します。

    コード セクション内をクリックしないようにしてください。クリックすると、セルが緑色に変わります。

    セルの枠線が青色の場合、セルがコマンド モードであることを示します。

  15. キーボードの B キーを押します。

    新しいセルが選択したセルの下に追加されます。

    新しいセルが選択したセルの下に挿入されます。 選択したセルが緑色であった場合は、セル内のコードに英字「b」を追加されます。

    これらのショートカットでは大文字と小文字が区別されないため、b と B の機能は同じです。

    これらのコマンドを覚えておく必要はありませんが、経験豊富なプログラマーはこれらのコマンドのいくつかを記憶および利用して、作業の迅速化を図っています。 ほとんどの基本タスクで、ノートブックのボタンとメニュー オプションは十分な効果を発揮します。

    特定のタスク用のコマンドを探している場合は、[command palette] の上部にある検索バーを使用して検索できます。

  16. [command palette] を開いて、[検索] ボックスに「run」と入力します。

    command palette で run を検索します。

    リストがフィルタリングされ、名前に run を含むツールが表示されます。 一部のコマンドにはショートカットがあります。 たとえば、[run selected cells] のショートカットは Ctrl + Enter キーです。

  17. パレットの外側 (ただし、ノートブック内) をクリックして、[command palette] を非表示にします。
  18. ノートブックを閉じます。

    ノートブックを閉じます。

ノートブックのセルに Python コードを入力して編集する方法と、ノートブックを操作してコードを実行および管理する方法を確認しました。 次は、ArcGIS Pro でノートブックを使用してジオプロセシング ツールを実行します。

ノートブックでのジオプロセシング ツールの実行

ノートブックでコードを入力する練習をしたので、今度は、いくつかのジオプロセシング ツールを実行してみます。 新しいノートブックから開始します。

  1. [解析] タブをクリックし、[ジオプロセシング] グループの [Python] をクリックします。
    解析をクリックし、Python をクリックします。

    新しいノートブックが開きます。

  2. [カタログ] ウィンドウで [Notebook] セクションを展開します。
  3. 新しいノートブックである [新しい Notebook (1).ipynb] を右クリックして、[名前の変更] をクリックします。

    ノートブックの名前を変更します。

  4. geoprocessing_demo」と入力して、Enter キーを押します。

    新しいノートブックの名前が変更されます。 [カタログ] ウィンドウで、その名前に *.ipynb ファイル拡張子が自動的に追加されたことがわかります。 ノートブック タブに [geoprocessing_demo] と表示されるようになります。

    次のステップでは、マップとノートブックを左右に並べて表示すると便利です。

  5. [geoprocessing_demo] ノートブック タブを、下図に示すドッキング対象にドラッグします。

    ノートブック タブをマップの下にドッキングします。

    ノートブック タブがマップの下にドッキングされます。 これで、ノートブックで Python を使用してマップ上のフィーチャクラスを操作しながら、コードの結果を確認できるようになります。

  6. 空のセルに、次のコード行を入力して、セルを実行します。

    import arcpy

    このコード行で ArcPy パッケージをインポートします。 ArcPy は、ジオプロセシングをはじめとする ArcGIS Pro の多くの機能を Python 内から使用できるようにする Python パッケージです。

    ArcGIS Pro 内でこのノートブックを使用しているため、ArcPy をインポートしていない場合でも、ジオプロセシング ツールを使用するコードでエラーは発生しません。 ただし、ジオプロセシング コードの先頭に import arcpy を常に含めることをお勧めします。そうすることで、ArcGIS Pro の外部で実行するときも、コードが正常に動作するようになります。

  7. 同じセルに、新しい行を追加して次のコードを入力します。

    arcpy.GetCount_management("fire_stations")

    このコードは、ArcPy を使用して [行のカウント] ツールを実行し、fire_stations フィーチャクラスのフィーチャの数を特定します。

  8. セルを実行します。

    ノートブックで実行された行のカウント ツール

    GetCount は、[データ管理ツール] ツールボックスにある [行のカウント] ジオプロセシング ツールを実行する ArcPy の関数です。

    結果がコードのセルの下に表示されます。 このフィーチャクラスには 84 行 (フィーチャ) が含まれています。 ここに表示された結果は、ArcGIS Pro でツール ダイアログ ボックスを使用してツールを実行した後に表示されるメッセージとほぼ同じです。Notebooks は、ArcGIS Pro のジオプロセシング フレームワークに統合されています。 このため、ノートブックでツールを実行することは、ツール ダイアログ ボックスを使用してツールを実行することと同様です。 ノートブックで実行したすべてのツールは、[履歴] ウィンドウにも表示されます。

  9. リボンの [解析] タブをクリックします。 [ジオプロセシング] グループで、[履歴] をクリックします。

    ツールがジオプロセシング履歴に表示されます。

    ツールがジオプロセシング履歴に表示されます。

  10. [履歴] ウィンドウを閉じます。
  11. arcpy.GetCount コード行を次のように編集します。

    arcpy.GetCount_management("ambulances")

  12. セルを実行します。

    このコードは失敗して、エラー メッセージが表示されます。 メッセージの最後に、次の情報が表示されます。

    ExecuteError: Failed to execute. Parameters are not valid.
    ERROR 000732: Input Rows: Dataset ambulances does not exist or is not supported
    Failed to execute (GetCount).

    消防署の数を取得するコードは正常に動作したのに、なぜこのコードは失敗したのでしょうか?

    fire_stations フィーチャクラスはアクティブなマップ上のレイヤーです。 ツールのグラフィカル ユーザー インターフェイスを使用してジオプロセシング ツールを対話形式で実行する場合と同様に、ノートブックでは、アクティブなマップ内のレイヤーの名前によってデータセットを参照できます。

    ambulances フィーチャクラスは、アクティブなマップ内のレイヤーとして存在しておらず、プロジェクトのデフォルト ジオデータベースに含まれるフィーチャクラスでもありません。 アクティブなマップやデフォルト ジオデータベースに含まれないフィーチャクラスを参照するには、その絶対パスを指定します。

    次に、ambulances フィーチャクラスへのパスを検索します。

  13. [カタログ] ウィンドウで、[データベース] セクションを展開し、[Toronto.gdb] を展開します。
  14. [ambulances] を右クリックして、[パスのコピー] をクリックします。

    パスのコピー

    ambulances フィーチャクラスのファイル パスがコピーされます。 このパスにはフィーチャクラス名も含まれます。

    この例では、次のようなパスになります。

    C:\Tutorials\NotebookStart\Toronto.gdb\ambulances

    ユーザーのコンピューター上のパスは、データを含む *.zip ファイルを展開した場所と方法によって異なります。 たとえば、 C ドライブのフォルダーや Tutorials という名前のフォルダーにデータを保存しなかった可能性もあります。 次のステップでは、ユーザーのコンピューター上のパスを使用する必要があります。

  15. ノートブックのセルをクリックし、ambulances をハイライト表示します。 コピーしたパスを貼り付けます。
    arcpy.GetCount_management("C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")

    セルを実行する準備がもう少しで完了します。 このパスは正しいように見えますが、間違っています。 何かが欠けています。

  16. 開き括弧の直後 (先頭の引用符の直前) をクリックして、英字「r」を入力します。
    arcpy.GetCount_management(r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")

    文字 r を追加して、このパスが raw 文字列であることを Python に知らせる必要があります。 Windows コンピューターでは、パス区切り文字としてバックスラッシュ文字を使用します。 Python では、バックスラッシュ文字は、エスケープ文字 (文字列中でその他の文字の隣に置かれると、タブ文字、改行文字、他の特殊文字をエンコードする) を意味します。 したがって、パス内で \NotebookStart の \N が示される場合、Python はこの文字列を改行文字を含む文字列として読み取ります。 文字列の前に r を配置することで、エスケープ文字を無視するように Python に伝えます。

  17. セルを実行します。

    [行のカウント (Get Count)] ツールが実行され、このフィーチャクラスに 48 のフィーチャが含まれることを示すメッセージが返されます。

    Python コードでは、パス区切り文字としてスラッシュ (/) 文字を使用することも、二重バックスラッシュ文字を使用することもできます。

    このパスの次の記述方法は Python ですべて有効です。

    r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances"
    "C:/Tutorials/NotebookStart/Toronto.gdb/ambulances"
    "C:\\Tutorials\\NotebookStart\\Toronto.gdb\\ambulances"

    スラッシュ (/) または二重バックスラッシュ (\\) をパス区切り文字として使用する場合は、パス文字列の前に r を追加しないでください。

    バックスラッシュで区切られた Windows パスに慣れたユーザーにとって、初めは、この方法が少し奇妙に感じるかもしれませんが、重要なので覚えておいてください。

    ツールの絶対パスを指定する必要をなくすには、ワークスペースを設定する方法があります。

  18. コードを編集して、import arcpyarcpy.GetCount で始まる 2 つの行の間に新しい行を追加します。 次の行を追加します。
    arcpy.env.workspace =

    ワークスペースを定義する行頭を追加します。

    この行は、環境クラスのプロパティである arcpy.env をある値と等しくなるように設定します。 次に、Toronto.gdb へのパスを切り取り、このコードの後に貼り付けてパスを設定します。

  19. *.gdb 拡張子を含むジオデータベースへのパスを arcpy.GetCount 行から切り取って、等号の後に貼り付けます。
    arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb

    もう少しで完了する環境設定の行

    ユーザーのパスは、ここに表示されているものと異なる場合があることにご注意ください。 ユーザー自身のコンピューターのパスを使用してください。

    まだ、変更する必要がある部分があります。 それを見つけることができますか?

    今すぐコードを実行すると、次のような構文エラーが表示されます。

    EOL 構文エラー

    EOL は行末を意味し、このメッセージは、Python が行 2 の文字列の処理中にコードの行末に達したことを示しています。 このパス文字列を終了させるには、もう 1 つの引用符が必要です。

  20. 引用符を追加して文字列を終了させます。

    行は次のようになります。

    arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb"

    閉じられた文字列

    これで、正しい 2 番目の行が完成しました。 他に変更が必要な部分がわかりますか?

  21. ambulances の前のバックスラッシュ文字を引用符に変更します。

    ambulances が文字列になったので、実行できます。

    コードを実行する準備ができました。

  22. セルを実行します。

    セルが正常に実行され、ambulances フィーチャクラスのフィーチャの数が報告されます。

    Toronto ジオデータベースにはいくつかのフィーチャクラスが存在しています。 これで、どのフィーチャクラスでも行をカウントできます。

  23. ノートブックで新しいセルを挿入して、GetCount 行をコピーして新しいセルに貼り付けます。名前を「bikeways」に変更してセルを実行します。
    arcpy.GetCount_management("bikeways")

    bikeways の行をカウントします。

    ジオデータベースの各フィーチャクラスのカウントを把握することもできます。 セルをコピーして、フィーチャクラスの名前を編集できますが、Python を使用すると、すべてのフィーチャクラスのリストを取得して、それらに対して GetCount 関数を実行できます。

  24. ノートブックで新しいセルを挿入して、次のコードを追加します。
    # List the feature classes in a workspace
    # works on the current workspace or a path
    fc_list = arcpy.ListFeatureClasses()
    # Print the list
    print(fc_list)
    
    # use a loop to set the variable fc to be
    # equal to each feature class name in the list
    for fc in fc_list:
        # Run Get Count on the current fc from the list
        # Set the variable count equal to the result of Get Count
        count = arcpy.GetCount_management(fc)
        # Print out the name of the feature class and the count
        print(fc, count)

    ワークスペース内のフィーチャクラスをリストして、そのフィーチャをカウントするコード

    このコードには、各ステップで実行される内容を説明したコメントが含まれています。 コメントは # 記号の後に表示されるテキストです。 コメントである行は実行されません。コードの実行内容を理解するのに役立つように記述されています。

    リストとリスト インデックスは前述のセクションで使用しました。 このコードは、fc_list という名前の新しい変数を作成して、現在のワークスペース Toronto.gdbarcpy.ListFeatureClasses を実行した結果と等しくなるようにその変数を設定します。 前述のリストには整数が含まれていました。 今回のリストには、フィーチャクラスの名前を示す文字列が含まれています。

    このコードは、次にそのリストを出力します。 リストの出力は不要ですが、変数が予想どおりの結果だったか確認することをお勧めします。 問題が発生した場合、その変数に含まれる内容を知ることが助けになります。

    コードの次の部分では for ループが使用されています。 for ループは入力のセットとインデントされたコードのブロックを受け取り、それぞれの入力に対してコード ブロックを実行します。

    この例では、入力はリスト内の名前であり、変数 fc がそれぞれの入力に設定されます。次にインデントされたブロック内のコードが fc に対して実行されます。

    コード ブロックは count という名前の変数を作成し、リストの現在の項目に対して GetCount を呼び出した結果と等しくなるようにその変数を設定します。

    次に、コード ブロックはフィーチャクラス名 (fc 変数の内容) とカウント (count 変数の内容) を出力します。

    コメントを除けば、コードはほんの数行です。

    
    fc_list = arcpy.ListFeatureClasses()
    print(fc_list)
    for fc in fc_list:
        count = arcpy.GetCount_management(fc)
        print(fc, count)

  25. セルを実行します。

    結果には、ジオデータベースのフィーチャクラスのリストと各フィーチャクラスのフィーチャ数が表示されます。

    コードの実行結果

ノートブックを使用した解析の実行

次は、ノートブックを使用して GIS 解析作業を実行します。 たとえば、エトビコ行政区画内のどのエリアが消防署から最も遠いかを突き止めることに関心があるとします。 ノートブックでジオプロセシング ツールを使用して、これらのエリアを特定できます。

  1. 現在のセルの下に新しいセルを追加します。
  2. セル内にカーソルを置いて、次のように入力を開始します。

    arcpy.

  3. Tab キーを押します。

    Tab キーを押してオプションを表示します。

    すべての使用可能な ArcPy オプションのリストが表示されます。

    下にスクロールし、アイテムをクリックしてリストから選択するか、入力を続行できます。

  4. 大文字の「B」を入力します。

    リストがフィルタリングされ、B オプションが表示されます。

  5. [Buffer_Analysis] をクリックします。

    セルに arcpy.Buffer_analysis が表示されます。

    一部のコードの入力を開始してから Tab キーを押して一致するオプションを表示および選択するこのプロセスを、タブ補完と呼びます。これは、必要なコマンドを検索してより迅速にアクセスするのに役立ちます。

  6. カーソルをコードの行末に置いたまま、Shift + Tab キーを押します。

    Buffer analysis のシグネチャ

    Buffer_analysis ツールの構文のヒントを含むウィンドウが表示されます。 矢印ボタンをクリックすると、トピック全体を展開して読むことができます。

  7. 閉じるボタンをクリックして、シグネチャ ウィンドウを閉じます。
  8. 開き括弧を入力します。

    括弧が付加されたバッファー

    閉じ括弧も追加され、括弧の間にカーソルが置かれます。 この場所に、Buffer_analysis ツールのパラメーターを追加できます。

  9. 引用符を入力します。

    引用符が付加されたバッファー

    2 番目の引用符が追加されます。 Python では、文字列を引用符で囲む必要があるため、対応する引用符が追加され、その間にカーソルが置かれます。

    Buffer_analysis ツールに必要な 3 つのパラメーターは入力フィーチャクラス、出力フィーチャクラス、バッファーの距離です。 他のオプション パラメーターもありますが、これらのパラメーターのみが必須です。

    fire_stations フィーチャクラスをバッファー処理して、出力フィーチャクラスに fire_buffer という名前を指定し、ツールによる消防署のバッファー処理を 1000 メートルの距離で実行します。

  10. 次のようにしてコード行を完成させます。
    arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1000 METERS")

    1000 メートル内をバッファー処理します。

    ツールの 3 つのパラメーターは文字列です。 fire_stations フィーチャクラスがマップ上のレイヤーであり、ワークスペースがすでに Toronto.gdb に設定されているため、ツールは、fire_stations フィーチャクラスを検索するためにその名前のみを使用できます。 ワークスペースが設定されているため、ツールは、出力フィーチャクラスを書き込むために名前 "fire_buffer" のみを使用できます。 ツールには、文字列 "1000 METERS" 内のバッファー距離の値と計測単位を検出するためのロジックが設定されています。

  11. ツールを実行します。

    マップ上の 1000 メートル分のバッファー

    出力フィーチャがマップに追加されます。

    結果には、消防署から 1000 メートル (1 キロメートル) の範囲内にあるエリアと範囲外のエリアが表示されます。 ノートブックとマップの両方を同時に開いておくと、別の選択をした場合の結果を簡単に確認できます。

  12. バッファー距離を 1750 メートルに変更して、セルを再度実行します。
    arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")

    マップ上の 1750 メートル分のバッファー

    注意:

    エラー メッセージ「ExecuteError: 実行できません。 パラメーターが不正です」が表示された場合、fire_buffer はすで存在し、ArcGIS Pro 環境設定のジオプロセシング オプションは、既存のフィーチャクラスの上書きを許可するように設定されていません。 この問題を解決するため、セルの arcpy.Buffer_analysis 行の前に新しい行を挿入します。 新しい行に、次のコードを追加します。

    arcpy.env.overwriteOutput = True

    これにより、[バッファー] ツールが前の出力を上書きできるようになります。 セルは次のようになります。

    arcpy.env.overwriteOutput = True
    arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")

    セルを実行します。

    これらのバッファーの外側のエリアは消防署からの距離がより遠いため、消防車が出動要請に応えるまでの時間が長くなる可能性があります。 影響を受けない部分ではなく、影響を受けるエリアを見つけるには、イレース ツールを使用して、バッファー内のエリアをエトビコ行政区画から削除します。

  13. 別のセルを追加して、次のコードを入力します。
    arcpy.PairwiseErase_analysis("etobicoke", "fire_buffer", "no_service")

    このコードは、etobicoke フィーチャクラスに対して PairwiseErase_analysis ツールを呼び出して、そのフィーチャクラスから fire_buffer フィーチャクラスの範囲内のエリアを消去し、"no_service" という名前の新しいフィーチャクラスに結果を書き込みます。

    [ペアワイズ イレース] は、[イレース] ツールの代替バージョンであり、別のライブラリのセットを使用して、[イレース] とは異なる方法で頂点のトポロジ リレーションシップを処理します。 入力データセットの品質に関して疑問がある場合は、[ペアワイズ イレース] を実行する前に、データに対して最初に [ペアワイズ インテグレート] を実行する必要がありますが、 この単純な例では、その必要はありません。

  14. セルを実行します。
  15. [コンテンツ] ウィンドウで、[fire_buffer][greenspace][etobicoke][boundary] レイヤーをオフにします。
  16. [no_service] レイヤーを右クリックして、[レイヤーにズーム] をクリックします。

    no_service レイヤーが、消防署からの距離が遠い場所を表します。

    [no_service] レイヤーが、消防署からの距離が遠い場所を表します。

  17. [arcpy.PairwiseErase_analysis] セルをクリックし、[ノートブック] ウィンドウの [Edit] メニューをクリックして [Merge Cell Above] をクリックします。

    現在のセルをその上のセルとマージします。

    セルがマージされます。

    セルがマージされます。

    Notebooks と一般的な Python コードのメリットは、ツールのシーケンスを迅速に実行できることにあります。 この例では、シーケンスは 2 つのツールのみで構成されていますが、その概念を説明しています。

  18. 距離の値を 1750 から 2500 に変更して、セルを実行します。

    距離を変更して、再度実行します。

  19. 新しい [fire_buffer] レイヤーをオフにして、新しい [no_service] レイヤーを表示します。

    残りのより小さなエリアを表示するために、レイヤーにズームする必要があるかもしれません。

    結果として生成されたエリアは、消防という観点から最も危険な状態にある可能性があります。 この更新された結果は、ノートブックで複数のコード行を 1 つのセルとして実行して取得できました。 ツールのグラフィカル ユーザー インターフェイスからツールを使用していたら、更新された結果を取得するのに、[バッファー] ツールと [ペアワイズ イレース] ツールの両方を再度実行する必要があったでしょう。

    2 つのツールだけでは節約できる時間はわずかですが、多くのワークフローはツールのより長いシーケンスで構成されています。 さらに、Python は、1 つまたは複数のツールをループ内で実行する機能を備えているため、複数の入力に対して同じプロセスを実行する必要がある場合に有用です。

  20. プロジェクトを保存します。

Notebooks 内と Notebooks 外での Python コードの実行

ノートブックを作成する方法と、ノートブックで Python コードを記述し、実行する方法を学習しました。 Notebooks を使用することには、次のような複数のメリットがあります (そのすべてをこのチュートリアルで説明しているわけではありません)。

  • Notebooks は、Python コードの記述をすばやく開始できる方法です。Python エディターのインストールや構成は不要です。
  • ArcGIS Pro で直接、データとマップを操作できます。 したがって、コードの実行結果をすぐに確認できます。
  • Notebooks は、ArcGIS Pro のジオプロセシング フレームワークに統合されています。 このため、ツールを実行する環境は、ツール ダイアログ ボックスを使用してツールを実行する場合と同様です。 結果はアクティブなマップに追加され、実行されたツールはジオプロセシング履歴に表示されます。
  • ArcGIS ProNotebooks は、正しいコードの記述を容易にするコード補完機能をいくつか備えています。
  • Notebooks は、特定の Python エディターや Jupyter Notebook など、ArcGIS Pro の外部でも実行できます。
  • Notebooks には組み込みの視覚化ツール (マップ ウィジェットなど) が含まれています。
  • すべてのコンテンツは *.ipynb ファイルとして保存され、他のユーザーと共有することができます。
  • NotebooksArcGIS Enterprise または ArcGIS Online 上でホストできます。 このため、*.ipynb ファイルを組織内の他のユーザーが利用できるようになります。

NotebooksPython コードを実行することにはいくつかの潜在的なマイナス面もあります。

  • Notebooks には、構文チェックやデバッグなど、他の Python IDE にある機能のいくつかが欠けています。
  • コード補完支援機能は、キーボード ショートカットの使用を必要とし、他の Python エディターほど直感的でも、包括的でもありません。
  • すべての Jupyter Notebook 機能が ArcGIS Pro で動作するわけではありません (改善を続けています)。

Python コードを実行するには、Notebooks でのコードの実行、コマンド ラインを使用したスクリプトの実行、オペレーティング システムからスクリプトが実行されるようにするスケジューリングなど、他にもいくつかの方法があります。 これらについては、他のチュートリアルで説明しています。

ArcGIS Pro のノートブックで Python コードを記述して実行する方法を学習しました。 変数とループという、Python で重要な 2 つの概念について学習しました。 また、Python の環境を設定する方法と、Python の標準の ArcGIS ジオプロセシング ツールを使用する方法について学習しました。 これは、ArcGIS Pro での Python の使用方法に関する一連のチュートリアル (今後も順次公開される予定です) の 2 番目にあたります。

また、「Esri Press」から出版されている Paul A. Zandbergen 博士による『Python Scripting for ArcGIS Pro』、『Advanced Python Scripting for ArcGIS Pro』についても、ぜひお読みください。