ArcGIS Pro での Python の基本操作

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

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

  1. このチュートリアルのデータ」をダウンロードして、コンテンツを C:\ ドライブ フォルダーに展開します。

    .zip ファイルには [PythonStart] というフォルダーがあります。

    注意:

    別のフォルダーを使用できますが、以降のステップでプロジェクトを作成する際にそのフォルダーを使用する必要があります。

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

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

  3. [新しいプロジェクト] の下の [マップ] をクリックします。

    マップ テンプレート

  4. [新しいプロジェクト] ウィンドウで、プロジェクトの [名前] に「Python Getting Started」と入力します。 [場所]C:\PythonStart フォルダーを参照します。
  5. [このプロジェクトのための新しいフォルダーを作成] チェックボックスをオフにします。

    このプロジェクトのための新しいフォルダーを作成オプションがオフになっている新しいプロジェクトの作成ウィンドウ

  6. [OK] をクリックします。

    プロジェクトが空白のマップで開きます。

  7. [カタログ] ウィンドウがまだ表示されていない場合は、[表示] タブで [カタログ ウィンドウ] をクリックします。
  8. ArcGIS Pro インターフェイスの右側に [カタログ] ウィンドウをドッキングします。
  9. [カタログ] ウィンドウで、[フォルダー] を展開し、[PythonStart] を展開します。

    6 つのシェープファイルを含む PythonStart フォルダーのカタログ ビュー

    フォルダーには、6 つのシェープファイルが含まれます。 このチュートリアルでは、一部のデータセットだけを操作しますが、数が大きくなっても同じコードを使用することができます。

    最初に、単一のフィーチャクラスのフィーチャの数を手動で決定し、次にツールを実行して同じ結果を取得します。 残りのチュートリアルでは、Python を使用して、すべてのシェープファイルのフィーチャの数を特定します。

  10. [ambulances.shp] シェープファイルを右クリックして [現在のマップに追加] を選択します。

    [ambulances] レイヤーのポイントがある、カナダのトロントがマップに表示されます。

  11. [コンテンツ] ウィンドウで、[ambulances] レイヤーを右クリックし、[属性テーブル] を選択します。

    属性テーブルが表示されます。 テーブルの下部にレコード数が表示されます。

    ambulance シェープファイルにあるフィーチャの数の総数

    シェープファイルには 48 のレコードが含まれています。つまり、48 の一意のフィーチャがあります。 次に、ツールを使用して同じ総数を特定します。

  12. 属性テーブルを閉じます。

Python を使用したツールの実行

続いて、ArcGIS Pro でジオプロセシング ツールを実行し、Python コードを使用して同じツールを実行する方法について学習します。

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

    ツール ボタン

    [ジオプロセシング] ウィンドウが表示されます。

  2. [ジオプロセシング] ウィンドウの検索バーで、「カウント」と入力して Enter キーを押します。
  3. [行のカウント] ツールをクリックします。
  4. [行のカウント] ツール ウィンドウで、[入力テーブル] パラメーターとして [ambulances] を選択します。

    行のカウント ツール ウィンドウ

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

    ツールの実行が完了すると、ウィンドウの下部にメッセージが表示されます。

    行のカウント ツールの完了メッセージ

  6. [詳細の表示] をクリックします。

    [メッセージ] タブが開いた状態で [行のカウント (Get Count) (データ管理ツール)] ウィンドウが表示されます。

    行のカウント ツールを実行した結果のメッセージ

    メッセージでは [行数 = 48] であり、属性テーブルを開いて手動で特定したときと同じ総数です。 すべてのシェープファイルで、これらの手順を繰り返すことができますが、データセットが多い場合は時間がかかります。 その代わり、Python スクリプトを開発して、このタスクを実行します。

  7. [行のカウント] ウィンドウを閉じます。

    次に、Python を使用して同じツールを実行します。

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

    解析タブのジオプロセシング グループにある履歴

    [履歴] ウィンドウに実行されたツールのリストが表示されます。 エントリとして、実行した [行のカウント] ツールのみがあります。

    1 つのツールのエントリを表示する履歴ウィンドウ

  9. [解析] タブの [ジオプロセシング] グループで、[Python] ボタンのドロップダウン メニューをクリックして、[Python ウィンドウ] を選択します。

    解析タブでの Python ウィンドウの選択

    [Python] ウィンドウが表示されます。

    空のトランスクリプトとプロンプト セクションを表示する Python ウィンドウ

    [Python] ウィンドウの上部のセクションをトランスクリプトと呼び、下部セクションをプロンプトと呼びます。 最初は、トランスクリプトは空白です。 トランスクリプトは、以前に入力したコードのレコードとその結果を提供します。

    プロンプトは、コードを入力する場所です。 [Python] ウィンドウを最初に開くと、プロンプトのメッセージには [Python インタープリターを初期化しています...] が表示され、コードを受け取る準備が行われます。 数秒後に、メッセージが [ここに Python コードを入力] に置き換わり、コードを入力できるようになります。 メッセージは、[Python] ウィンドウを最初に開いたときに表示されますが、それ以降に操作するセッションで、再度表示されることはありません。

  10. [Python] ウィンドウで、「arcpy.management.GetCount("ambulances")」と入力します。

    履歴ウィンドウからのコードを表示する Python ウィンドウ

    ArcPy は、ArcGIS Pro の機能の多くを Python 内から利用可能にする Python パッケージです。GetCount() は、[データ管理ツール] のツールボックスにある [行のカウント] ジオプロセシング ツールを実行する ArcPy の関数です。

    注意:

    行のカウント」のヘルプ トピックを表示して、[パラメーター][Python] をクリックすると、トピックにコード サンプルが表示されます。 すべてのジオプロセシング ツールのヘルプ トピックには、Python のサンプルが含まれています。

  11. Enter キーを押します。

    コードが実行され、結果は <Result '48'> になります。

    行のカウント ツールの実行結果のトランスクリプト セクションへの出力

    書式設定が少し異なっていますが、以前に特定したときと同じレコードの総数です。 [Python] ウィンドウのコード行を実行すると、ツール ウィンドウを使用してツールを実行した結果と同じ結果が表示されます。 [Python] ウィンドウのコードを実行した結果、[履歴] ウィンドウに新しいエントリが作成されました。

    2 つのツールのエントリを表示する履歴ウィンドウ

    これらの 2 つのエントリは、タイム スタンプ以外は同じで、ツール ダイアログ ボックスを使用するツールと、Python を使用するツールを実行する場合の違いはありません。 ただし、Python を使用するときには、コードを使用してツールの実行方法を制御できます。また、同じツールをさまざまなフィーチャクラスで何度も実行できます。

  12. [Python] ウィンドウで、コードを右クリックして [トランスクリプトのクリア] を選択します。

    Python ウィンドウのトランスクリプトのクリア

    以前のコードで実行されたものはすべてメモリに残ります。 次のセクションでは、[Python] ウィンドウに何も入力されていない状態から作業を始めます。

Python ウィンドウでのコードの実行

[Python] ウィンドウは、Python コードを記述するのに便利な場所です。 すでに [履歴] ウィンドウからコードを送信できることを確認しましたが、通常は [Python] ウィンドウを開いてコードを記述します。

  1. [Python] ウィンドウでプロンプトをクリックし、次のコード行を入力します。

    print("GIS is cool")

    Python ウィンドウのプロンプトに入力されたコード行

    このコード行では、print() が関数です。 Python の関数は特定のタスクを実行します。 この場合、関数はテキストを出力します。 Python のほとんどの関数は、関数の次に括弧で囲んだ引数またはパラメーターが続きます。 この場合の引数は文字列です。 Python の文字列は、一連の文字で構成されます。 文字列は、1 組の引用符で文字を囲んで作成します。

    Python は、文字列を識別するために、一貫して使用する条件で、単一引用符と二重引用符の両方を使用します。 そのため、print("GIS is cool")print('GIS is cool') は、どちらも正しく識別されますが、print("GIS is cool') はエラーになります。 Python では、引用符は直線とします (斜めではない)。 引用符は自動的に、[Python] ウィンドウやその他のコーディング環境でコードを入力するときに、上記に従って書式設定されます。 場合によって、ワープロ ソフトで書式設定や記述をしたコードをコピーしたときに、二重引用符が斜めの引用符で置き換えられる可能性があります。 たとえば、print(“GIS is cool”) の結果はエラーになります。

  2. コード行の末尾をクリックして Enter キーを押します。

    コード行が実行されて、トランスクリプトにコピーされ、その後に結果が表示されます。

    トランスクリプトに出力された文字列

    プロンプトが再び空になって、次のコード行を受け取る準備が整います。

    この例は単純ですが、Python のコードをこの方法で実行するポイントの 1 つの説明になっています。 実行する特定の命令を含む 1 つのコード行を記述します。 Enter キーを押すと、コード行が実行されて命令が実行されます。 この例では、命令はテキストを画面に出力することでしたが、以前のセクションで [行のカウント] ツールを実行したときにすでに見たように、命令を他の多くのタスクで構成することができます。

    次は、もう少しコード行を多くして練習します。

  3. プロンプトで、次のコード行を入力します。

    x = 37

    このコード行では、x が変数です。 変数は値を格納するコンテナーに似ています。 この例では、値が 37 の整数ですが、別の数字や、テキスト、データセットの名前にすることもできます。 コード行は、変数に値を割り当てるため、割り当てとも呼ばれます。 単一等号は、変数が値に等しいことを設定する変数割り当てで使用します。 変数は、後でコード内で使用できるように割り当てられます。

  4. コード行の最後で、Enter キーを押します。

    プリントアウトのないトランスクリプトに移動した割り当て

    コード行は実行されますが、結果は何も出力されません。 変数が割り当てられますが、実行する他の命令は何もありません。

  5. プロンプトで、次のコード行を入力して Enter キーを押します。

    y = 73

    この行は別の割り当てステートメントです。

  6. プロンプトで、次のコード行を入力して Enter キーを押します。

    x * y

    この行は、計算を実行しますが、この場合は xy の値を掛けます。 結果は次のとおり出力されます。

    トランスクリプトに出力された計算の結果

    これまで、各行の正確な記述方法についてあまり心配することなく、コード行を入力しました。 割り当てステートメントを使用する場合、スペースはオプションです。 このため、x = 37x=37 は同じです。 スペースは、一般的に読みやすくするために追加します。

  7. プロンプトで、次のコード行を入力して Enter キーを押します。

    X * y

    この結果は次のエラーです。

    NameError: name 'X' is not defined.

    大文字の X を使用したことによるエラー

    Python では大文字と小文字が区別されるため、Xx とは異なります。 x には値 37 を割り当てて定義しましたが、大文字の X には値が割り当てられていないことが、エラーの説明となります。

    [Python] ウィンドウで連続してコード行を実行すると、すでに実行したコードとその結果がトランスクリプトにすべて表示されます。 トランスクリプトを消去できますが、消去しても割り当てた変数の値は何も消去されません。しかし、ArcGIS Pro のセッションを再起動すると、すべて消去されます。

  8. トランスクリプト内で右クリックして、[トランスクリプトのクリア] をクリックします。

    次は、より実用的な例として、華氏 (F) と摂氏 (C) の温度の変換を考えます。 一般的な公式は次のとおりです。

    F = 9/5 * C + 32

    Python では、これを簡単な計算で記述できます。

  9. プロンプトで、次のコード行を入力して、各行の最後で Enter キーを押します。

    temp_c = 17

    temp_f = temp_c * 9 / 5 + 32

    print(temp_f)

    計算の結果が出力されます。

    計算した温度の値が出力されます。

    このスクリプトは、さらに細かく分解されます。

    コードの最初の行では、変数 temp_c に数値を割り当てます。 2 番目の行では、変数 temp_c を使用して計算を実行し、結果を新しい変数 temp_f に割り当てます。 3 番目の行では、変数 temp_f の値を出力します。 3 番目の行は、temp_f と記述することもできますが、より良い書式設定オプションが提供されますので、print() 関数を使用することが一般的です。

    また、変数を使用しなくても、同じ結果を得ることができます。

  10. プロンプトで、次のコード行を入力して Enter キーを押します。

    17 * 9 / 5 + 32

    結果は、同様に 62.6 です。

    変数の使用には、適切な理由がいくつかあります。 まず、多くの場合に 1 つの値ではなく、多くの値に対して計算を実行する必要があるからです。 2 番目に、コードを記述して計算を実行する必要があっても、あらかじめ使用する値が分かっていないことが頻繁にあるからです。 2 つの変数の関係として計算を記述すると、その計算を再利用できると同時に、1 つの値に依存しません。

Python ウィンドウでのコードの記述のサポート

[Python] ウィンドウには、コードの記述に役立ついくつかの機能があります。 以前の print() 関数を使用した例を考えます。

  1. トランスクリプトを消去します。
  2. プロンプトで、次のコードを入力します。

    pri

    「print」の入力を完了する前でも、ポップアップに print() 関数が表示されます。 文字 F の青いアイコンは、それが関数であることを示します。 これは、オートコンプリートまたはコード補完と呼ばれます。

    print() 関数のポップアップ

  3. print() ポップアップをポイントします。

    この操作で、関数の構文ヘルプが表示されます。

    print() 関数の構文

    print() 関数のヘルプは、関数が利用するパラメーターとその順序の情報を提供します。

    入力を続行することもできますし、ポップアップをクリックして、このコード部分をオートコンプリートすることもできます。

  4. print() ポップアップをクリックします。

    print() 関数が、プロンプトに表示されるようになりました。 1 組の括弧が自動的に追加されています。 ポップアップをクリックしないで入力を続行すると、「print(」を入力した後で、閉じ括弧が自動的に追加されます。 これは、正しい構文の記述をサポートするコード補完の別の例です。

    括弧の中にカーソルがあると、関数の構文ヘルプが再度表示されます。

  5. print() 関数の括弧の中に引用符を 1 つ入力します。

    2 番目の引用符は、自動的に追加されます。

    print() 関数のパラメーターの引用符

    [Python] ウィンドウでは、オートコンプリートのポップアップ、構文ヘルプの対話形式の表示、および構文エラーに関連するヒントが提供されます。

  6. プロンプトでコードを削除します。
  7. アクティブなマップが、[ambulances] という名前のフィーチャ レイヤーを含んでいることを確認します。
  8. プロンプトで、次のコードを入力します。

    arc

    ArcPy パッケージとともに、文字 P の赤いアイコンで示されるポップアップが表示されます。

    パッケージは、Python コードのコア セットを拡張する方法です。 ArcPy は、ArcGIS の機能を Python に追加するパッケージです。

  9. arcpy ポップアップをクリックします。

    ドットに続き、arcpy パッケージがプロンプトで表示されるようになりました。 この例のようにコード部分がとても短い場合は、文字をすべて入力しても短時間ですので、ポップアップをクリックすることで多くの時間を節約することにはなりません。 ただし、長いコード エレメントの場合、コード補完を使用することで時間の節約になり、誤字を防ぎ、構文のサポートが提供されます。

  10. 次のように、「arcpy.」に続けて「Get」を入力します。

    arcpy.Get

    arcpy に論理的に続く Get で始まるコード エレメントのリストが表示されます。

    arcpy.Get で始まるコード エレメントのポップアップ

    コード補完は、状況依存です。 たとえば、コード行の最初で「Get」と入力を始めると (「arcpy.」を入力しない)、表示されるオプションは、arcpy.Get と比べて非常に異なります。

  11. オプションのリストで [GetCount()management] をクリックします。
    注意:

    GetCount() に続く単語 [management] は、GetCount() が一連の [管理 (Management)] ツールの一部であることを表します。

    プロンプトには、次のコードが入力されます。

    arcpy.management.GetCount()

    これは、このチュートリアルで以前に使用したコードと同じで、management[データ管理ツール] ツールボックスを表し、GetCount()[行のカウント] ツールを表します。

    カーソルが括弧内にある状態で、2 つのポップアップが表示されます。

    GetCount の構文

    下のポップアップは、[行のカウント] ツールの構文を表示します。 構文では、唯一のパラメーターは [in_rows] という名前で、入力テーブル ビューまたはラスター レイヤーで構成されることが説明されています。 上のポップアップは、アクティブなマップの ambulances レイヤーの名前を表示しています。 これは、[行のカウント] ツールの [in_rows] パラメーターのコード補完プロンプトです。 言い換えると、[Python] ウィンドウは、アクティブなマップのレイヤーがツールの有効なパラメーターであることを認識します。 このレイヤーを使用するか、または他の何かを入力するかを選択できます。

  12. ambulances ポップアップをクリックします。

    プロンプトには、次のコードが入力されます。

    arcpy.management.GetCount('ambulances')

    この場合のコード補完は、レイヤーの名前の前後に自動的に 1 組の引用符を追加します。 [Python] ウィンドウのコード補完は、適切な構文を学習するのに適した方法です。 コード補完では、単一引用符が追加されますが、二重引用符を使用することもできます。

    このコードは以前に実行したコードと同じですから、実行する必要はありません。

  13. プロンプトでコードを削除します。

ループを使用した反復処理

次に、反復処理を試します。これは同じ手順を複数回繰り返すことを意味します。 値のリストを作成して、リストの各エレメントについて、同じ計算を実行します。

  1. プロンプトで、次のコード行を入力して Enter キーを押します。

    templist_c = [17, 19, 24, 21, 16]

    このコードは、同じタイプの 5 つのエレメントを含む Python リストを作成します。この場合、エレメントは摂氏の気温値です。 リストは、Python では一般的なデータ タイプです。 リストは、角括弧 [ ] (大括弧とも呼ばれる) で囲んだ一連のエレメントで構成され、エレメントはカンマで区切られます。

  2. プロンプトで、次のコード行を入力して Enter キーを押します。

    for temp_c in templist_c:

    for ループ コードの後のプロンプトが Python ウィンドウに入力されています。

    このコード行の最後で Enter キーを押すと、コードは実行しませんが、プロンプトは次の行に移動します。 コード行はコロンで終わっています。これはさらにコードが続くことを意味していて、その行を単独で実行することはできません。

    このコード行から for ループが開始しますが、一般的に次の構造になっています。

    for <エレメント> in <リスト>:

    <複数のコード行の実行>

    for ループは、既存のリストの複数のエレメントを反復して、各エレメントに対応する同じ手順を繰り返すことができます。 for キーワードを含むコード行は、コロンで終わります。 次のコード行はインデントされ、すぐその後に続く同じインデントのコード行は、すべて反復されるたびに実行されます。 繰り返されるコードのブロックは、インデントで識別できます。

    [Python] ウィンドウは、コロンの使用から for ループを認識します。このため、次のコード行がインデントされます。

  3. プロンプトで、次のコード行を入力して Enter キーを押します。

    temp_f = temp_c * 9 / 5 + 32

    このコードは、インデントされたままです。 誤ってインデントを削除した場合は、その行の最初でスペースを 4 つ追加してインデントできます。 スペース 4 つが、コード ブロックのデフォルトのインデント レベルです。

  4. プロンプトで、次のコード行を入力して Enter キーを押します。

    print(temp_f)

    print() を使用することは、ここでは必須ではありませんが、多くのインスタンスで、出力のより良い書式設定が得られます。

    [Python] ウィンドウは、次のように表示されるようになりました。

    実行する前のプロンプト セクションの for ループ

    for ループが完了して、実行する準備ができました。

  5. カーソルがまだ空のままのコード行にある状態で、Enter キーを押します。

    結果が出力されます。

    計算した気温値が出力されます。

    for ループは、リストにあるエレメントをすべて反復して、同じ計算を実行します。 コードを記述する作業は、リストに含まれるエレメントが 5 つの時も 5,000 の時も同じです。そのため、これはプログラミングの非常に強力な概念です。

フィーチャクラスのリストの作成と反復

これで、[Python] ウィンドウでコードを記述して実行する練習が終わったので、元のタスクに戻り、対象フォルダーの各フィーチャクラスのフィーチャの数を特定します。

[行のカウント] ツールを再度使用します。 アクティブなマップが、[ambulances] という名前のフィーチャ レイヤーを含んでいることを確認します。

  1. トランスクリプトを消去します。
  2. 次のコード行を実行します。

    count = arcpy.management.GetCount("ambulances")

    print(count)

    結果は、値 48 です。 このコードは、このチュートリアルでこれまでに実行したことがあるコードとほとんど同じですが、今回は [行のカウント] ツールの結果が変数に割り当てられています。 結果に対しての今回の操作は値の出力だけですが、変数への割り当てにより結果の操作が簡単になります。

    コードは、これまでアクティブなマップで開いているフィーチャ レイヤーの名前を使用しました。 これは便利ですが、それぞれのフィーチャ レイヤーで、すべてのシェープファイルをマップに追加して、コードを手動で実行しなければならないため、それほど実用的ではありません。 その代わり、完全なパスを指定して、ディスクのフィーチャクラスを示すことができます。

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

    count = arcpy.management.GetCount("C:/PythonStart/ambulances.shp")

    print(count)

    同じ結果が出力されます。

    注意:

    [PythonStart] フォルダーをコンピューターの別の場所に保存した場合、それに合わせてパスを更新する必要があります。

    パスの使用については、いくつか注意点があります。 最初に、データを別のフォルダーに展開した場合、このパスを変更する必要があります。 2 番目に、パスは文字列であるため、引用符で囲みます。 また、パスでは通常のバックスラッシュ (\) ではなく、スラッシュ (/) を使用します。 Python ではバックスラッシュをエスケープ文字として使用するため、バックスラッシュはそれ以降の文字の意味を変えることがあります。 そのため、文字列でバックスラッシュを使用すると、予期しない結果になる場合があります。 3 番目に、フィーチャクラスは、.shp ファイル拡張子がその名前の一部であるため ambulances.shp として参照されます。 ambulances だけを使用すると、フォルダー内に ambulances という名前のフィーチャクラスが見つからないため、エラーが返されます。

    完全なパスを指定する代わりに、ワークスペースを設定することができます。 ワークスペースは、ジオプロセシング操作に影響するいくつかある環境設定の 1 つです。 ワークスペースの他、これらの環境にはデフォルトの出力データの座標系、ラスター データの処理のためのデフォルトのセル サイズなどがあります。

  4. 次のコード行を実行します。

    arcpy.env.workspace = "C:/PythonStart"

    count = arcpy.management.GetCount("ambulances.shp")

    print(count)

    同じ結果が出力されます。

    ワークスペースを設定するには、追加のコード行が必要ですが、それに続く ArcPy コードの行が、すべて自動的にこれを使用しますので、ワークスペースを使用することは多くの場合で効果的です。 2 番目のコード行は、完全なパスを必要としません。 ワークスペースが、コードで設定されない場合、プロジェクトのデフォルトのワークスペースが使用されます。

    フォルダーの各フィーチャクラスのフィーチャの数を特定する元のタスクを実行するための最後のステップは、コードを追加してワークスペース内にシェープファイルのリストを作成し、このリストの各エレメントに対して [行のカウント] ツールを実行します。 ワークスペースを設定すると、ArcPy の関数を使用して、そのワークスペース内にフィーチャクラスのリストを作成することができます。

  5. 次のコード行を入力して Enter キーを押します。

    fc_list = arcpy.ListFeatureClasses()

    ListFeatureClasses() 関数は、フィーチャクラスのリストを作成します。 これを変数に割り当てると、他のタスクでリストを使用できます。

    リストのコンテンツは、その値を出力して確認できます。

  6. 次のコード行を実行します。

    print(fc_list)

    結果は次のとおりです。

    ['ambulances.shp', 'boundary.shp', 'fire_stations.shp', 'fire_zones.shp', 'voting_divisions.shp', 'voting_sites.shp']

    次に、リストのエレメントを反復するための for ループを作成します。

  7. 次のコード行を入力して、Enter キーを押し、コードのブロックを開始します。

    for fc in fc_list:

  8. 次のコード行を入力して Enter キーを押します。

    count = arcpy.management.GetCount(fc)

    このコード行は、以前に使用したものと同じ [行のカウント] ツールを使用しますが、ここでは特定のフィーチャクラスの名前ではなく、変数 fc を使用しています。 fc は、反復するたびに更新されて、フィーチャクラスのリスト内にあるその次のフィーチャクラスが使用され、各フィーチャクラス名を格納します。

  9. 次のコード行を入力して Enter キーを 2 回押します。

    print(count)

    結果として、ワークスペース内の各シェープファイルのフィーチャの数が出力されます。

    各シェープファイルのフィーチャの数の結果が出力されます。

    開発したコードは、各シェープファイルのフィーチャをカウントするタスクを実行します。 コードは、多くのシェープファイルのプリントアウトを読み取ることは厄介で、あまり洗練されていません。 コードを追加して、より意味のある出力を作成できます。その場合は、各総数の後にフィーチャクラス名を追加したり、テキスト ファイルに結果を書き込んだり、ワークスペース内のフィーチャの総数を計算したり、ほとんどのフィーチャについてフィーチャクラスを特定したりします。

    [Python] ウィンドウで使用するコードは、「ArcGIS Pro 内の ArcGIS Notebooks」(または「Jupyter Notebook」内、ArcGIS Pro の外部) でも使用できます。 ここではその手順について記載していませんが、[Python] ウィンドウからコードをコピーして、Notebooks 内のセルに貼り付けることができます。

    また、ArcGIS Pro の外部のコードは、次のような操作で Python エディター内で使用することもできます。 コードを、[Python] ウィンドウから Python スクリプト ファイルに保存して、Python エディターで作業を開始できます。

  10. [Python] ウィンドウのトランスクリプトのコードを右クリックして、[トランスクリプトの保存] をクリックします。
  11. [トランスクリプトの保存] ウィンドウで C:\PythonStart フォルダーを参照し、「count_features.py」として作業を保存します。
  12. プロジェクトを保存し、ArcGIS Pro を閉じます。

    Python エディターでスクリプトを開けるようになりました。

Python エディターでのスクリプトの実行

[Python] ウィンドウを使用して、または Notebook 内で ArcGIS Pro 内の Python コードを実行することは便利ですが、ArcGIS Pro 外部でコードを実行することが必要になることもあります。 一般的な例としては、スクリプトの実行を事前設定した時間にスケジュール設定するときに、別のシナリオも同時にある場合です。 たとえば、より複雑なプロジェクトでは連携した複数のコード エレメントを必要とし、通常はそのコードが異なる複数の .py ファイルに整理されていることを意味します。 カスタム ツールを作成するときの一部としてスクリプトを使用できますが、この場合も .py ファイルが必要です。

ArcGIS Pro の外部で Python コードを実行するには、IDE (統合開発環境) とも呼ばれる Python コード エディターが必要です。 このセクションでは、IDLE と呼ばれる IDE を使用します。IDLE は「統合開発環境 (Integrated DeveLopment Environment)」の略称です (大文字の L に注意)。 IDLE は、インストールした Python に必ず付属していますので、Python が設定されたコンピューターであれば IDLE も使用できます。

PyCharm や Spyder など、他にも多くの Python IDE がありますが、出発点としては IDLE が適しています。 PyCharm や Spyder などの IDE は、ダウンロード、インストール、および構成のための追加の手順が必要ですが、IDLE はインストールした Python の一部であり、使用する準備が整っています。

  1. ファイル エクスプローラーを開始します。
  2. C:\PythonStart フォルダーを参照して選択します。
  3. [count_features.py] ファイルを右クリックして、[Edit with IDLE (ArcGIS Pro)] をクリックします。

    ファイル エクスプローラーの Edit with IDLE オプション

    IDLE のスクリプト ウィンドウで Python スクリプトが開きます。 ArcGIS Desktop 10.x をインストールしている場合、[Edit with IDLE] オプションも表示されます。 [Edit with IDLE (ArcGIS Pro)]ArcGIS Pro とともにインストールされている Python のバージョンでスクリプトを開くので、このオプションを使用する必要があります。ArcGIS Desktop 10.x は、Python の以前のバージョンを使用します。

    注意:

    [Edit with IDLE (ArcGIS Pro)] がショートカット メニューに表示されない場合は、[スタート] をクリックして [ArcGIS] を展開し、[Python コマンド プロンプト] を開きます。 [Python コマンド プロンプト] ウィンドウに「idle」と入力して Enter キーを押します。 [IDLE] ([Python 3.9 Shell]) が表示されます。 [File] をクリックして [Open] を選択します。 [count_features.py] ファイルを参照して開きます。

    エクスポートされたコードを表示する IDLE のスクリプト ウィンドウ

    スクリプト ウィンドウの上部は、Python で使用されている IDLE のバージョンを表示します。 これは、ArcGIS Pro アプリケーションとともにインストールされた Python のバージョンです。 Python 3.7 で記述したスクリプトは、Python の以前のバージョン (2.x) では動作しない場合があります。

    コードには、[Python] ウィンドウのトランスクリプトのコンテンツが、その結果とともにすべて含まれています。 結果の前には # シンボルまたはハッシュ記号があり、これらがコメントとして解釈されます。 Python はコメントをすべてスキップしますが、コメントはコードの各部分が何をしているかを文書化するのに非常に有効な方法です。

    このコードを操作する前に、IDLE の Python Shell の機能の概要を確認します。

  4. IDLE の上部のメニューで、[Run] をクリックして、[Python Shell] をクリックします。

    Python Shell (対話型のインタープリター) が開きます。 シンボル >>> はプロンプトと呼びます。 対話型のインタープリターを使用している間、後で引き続き使用するために、[count_features.py] ファイルのスクリプト ウィンドウを開いたままにしておけます。

  5. プロンプト (>>> の後) にカーソルを配置して、次のコードを入力します。

    print("GIS is cool")

    Python Shell ウィンドウのコードの出力

  6. Enter キーを押します。

    結果が次の行に出力されて、新しいプロンプトが表示されます。

    Python Shell の出力結果

    対話型のインタープリターでコードを実行することは、[Python] ウィンドウでラインごとにコードを実行することと同様です。 Enter キーを押すごとにコード行が実行されて、その結果があれば次の行に出力されます。 これらの間には重要な違いが 1 つありますが、それは Python Shell にトランスクリプトとプロンプトの独立した複数のセクションがないことです。それを除くと 2 つのアプローチはほとんど同じです。

    次にスクリプトをクリーン アップして、コードを実行します。

  7. [IDLE 3.9.18 Shell] ウィンドウを閉じ、[count_features.py] スクリプトのスクリプト ウィンドウに戻ります。
  8. arcpy.env.workspace で始まる行の前にあるすべての行を削除してコードをクリーン アップし、コメント コードであることを示す # 記号が付いた結果の行をすべて削除します。
  9. 次の連続する 2 行を削除します。

    count = arcpy.management.GetCount("ambulances.shp")

    print(count)

  10. 次の行を削除します。

    print(fc_list)

    残ったコードは次のようになります。

    
    arcpy.env.workspace = "C:/PythonStart"
    fc_list = arcpy.ListFeatureClasses()
    for fc in fc_list:
        count = arcpy.management.GetCount(fc)
        print(count)

    IDLE でのフィーチャ スクリプトのカウント

  11. 最後の行が、その上の行と一致するように 4 つのスペースでインデントされていることを確認します。
  12. [File] をクリックしてから [Save] をクリックし、スクリプトを保存します。
  13. [Run] をクリックし [Run Module] をクリックしてスクリプトを実行します。

    結果が対話型のウィンドウに出力されます。

    エラー メッセージを表示する Python Shell

    フィーチャ数が出力される代わりに、対話型のウィンドウには次のエラーが出力されます。

    NameError: name 'arcpy' is not defined

    エラーの原因は、ArcPy パッケージを使用しているけれども、コードを ArcGIS Pro 外部で実行していることです。 パッケージを使用するには、スクリプトの上部にインポートする必要があります。

  14. [IDLE 3.9.18 Shell] ウィンドウを閉じます。
  15. 最初のスクリプトの行の先頭の文字の位置にカーソルを置きます。 Enter キーを押します。

    スクリプトの先頭に空の行が追加されます。

  16. スクリプトの最初の行に、次のコードを追加します。

    import arcpy

    最終のスクリプトを表示する IDLE のスクリプト ウィンドウ

  17. スクリプトを保存して実行します。

    結果の総数が対話型のウィンドウに出力されます。

    フィーチャの数が出力された

    スクリプトで ArcPy を最初に使用するときは、Python が ArcPy をインポートするのに数秒かかるので、結果の表示に少し時間がかかることがあります。

    結果は、ArcGIS Pro でコードを実行する場合と同じになりますが、スクリプトの実行のために ArcGIS Pro を開く必要はありません (ただし、使用するコンピューターにインストールしてライセンスが付与されていることが必要)。

    Python エディターを使用してコードを操作すると、いくつかの利点があります。 主な利点の 1 つは、長いスクリプトを記述して、コードを .py ファイルとして保存できることです。 コードをファイルとして保存すると、デバッグや再利用が簡単になります。

Python コードを実行するアプローチの比較

Python コードを記述して実行する 2 つの方法を確認しました。 それぞれのアプローチの利点と欠点のサマリーは次のとおりです。 このチュートリアルで詳細に説明していることは、ここにあるエレメントすべてについてではありませんが、これらの点を覚えておくと Python について引き続き学習するときに役立ちます。

方法利点欠点

ArcGIS Pro の Python ウィンドウ

  • 使用開始が簡単
  • ArcGIS Pro 内部でデータとマップを操作する
  • 直感的なコード補完のサポートが提供される
  • 比較的短いコード部分に制限される
  • 多くのフィーチャの欠落が Python エディターで一般的に起こりやすい
  • スクリプトを保存して整理するために設計されていない
  • ArcGIS Pro でのみ使用できる

Python エディター (IDE)

  • ArcGIS Pro を開いていなくてもコードが実行される
  • より複雑なコードの記述とテストに関しての多くのサポート機能を備えている
  • 作業は、.py ファイルとして保存され、複雑なコード プロジェクトの整理に対応している
  • 各種 IDE は、さまざまなタイプのユーザーやスキル レベルに対応している
  • IDE によっては、多様なプログラミング言語を使用できる
  • 使用する特定の IDE で機能が異なる
  • IDE によっては、コード補完プロンプトが未対応
  • 一部の IDE は、ArcGIS Pro で使用する前にカスタム構成が必要
  • IDE によっては、初心者にとって複雑

注意:

[Python] ウィンドウを含めて ArcGIS Pro で実行するコードでは、import arcpy を使用する必要はありません。 Python エディターなどの ArcGIS Pro の外部で実行するコードでは、ArcPy パッケージの機能を使用可能にするために、import arcpy を使用する必要があります。

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

[Python] ウィンドウと IDLE で、Python コードを記述して実行する方法を学習しました。 変数とループの 2 つの非常に重要な Python の概念を学習しました。 また、Python の環境を設定する方法と、Python の標準の ArcGIS ジオプロセシング ツールを使用する方法について学習しました。 これは ArcGIS Pro 内での Python の使用法の一連のレッスンの始まりです。さらにレッスンを続けましょう。

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

他のチュートリアルについては、チュートリアル ギャラリーをご覧ください。