【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!④ : データの操作

はじめに

本記事は ArcGIS Pro で ArcPy を使った処理の基本を紹介する「【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事は過去に Esri Community ブログで紹介しました「Python を使って作業の効率化を図ろう!」シリーズ記事を ArcGIS Pro 版で再編集したものです。

前回の記事では ArcPy を使ったジオプロセシング ツールの操作についてご紹介しました。

第 4 回目となる今回は ArcPy を使ったデータの操作についてご紹介します。

データの操作

ArcPy を使用すると、ジオプロセシングオブジェクトやデータ要素 のプロパティ取得や、フィーチャクラスやテーブルに含まれるレコードにアクセスしデータの取得や挿入、更新などができます。ここではデータ プロパティの取得方法と、データの操作方法についてご紹介します。

cursor.png

データ プロパティの取得

プロパティを取得するためには ArcPy の Describe関数を使用します。使い方は、arcpy.Describe(value,{dataType}) の value にジオプロセシングオブジェクトやデータ要素を与えることで実行できます。Describe 関数はフィーチャクラスやラスター レイヤーなど、ジオプロセシングオブジェクトやデータ要素が持つプロパティの情報を取得することができます。

430137_Describe.png

カーソル

第 1 回目の記事で簡単にご紹介しましたが、データを操作するためには ArcPy が保有するデータ アクセスモジュールを使用します。データ アクセス モジュールに含まれているカーソルを使うとデータの操作を行うことができます。カーソルはテーブルに含まれるレコードの位置を示します。カーソルには SearchCursor や、InsertCursorUpdateCursor があり、それぞれレコードの検索(Search)、挿入(Insert)、更新(Update)を行うことが可能です。

SearchCursor

SearchCursor はフィーチャクラスやテーブルから行を検索し、値を読み取りたいときに使用します。取得した行の特定の値を取得したり、ジオメトリの座標を取得することなどが可能です。

次の例では、SearchCursor を使用して、下表のようなデータから name フィールドと users フィールドの値を取得しています。

430138_SearchCursor.png

# SearchCursor クラスを使用して SearchCursor オブジェクトを取得
cur = arcpy.da.SearchCursor(“Station”, [“name”, “users”])

# Cursor から、name (インデックス番号:0) フィールドと users (インデックス番号:1) フィールドの値を表示
for row in cur:
    print(row[0])
    print(row[1])

# オブジェクトを削除して、参照を解放
del cur

>> 永田町駅
>> 10
>> 六本木駅
>> 33
>> 赤坂見附駅
>> 25

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

InsertCursor

InsertCursor はフィーチャクラスやテーブルに新たな行を追加したいときに使用します。

次の例では、InsertCursor を使用して、新たに表参道駅のフィーチャを行として追加しています。

430139_InsertCursor.png

# 追加する値をタプル型で変数に格納
rowValues = (“表参道駅”, (141.324167, 24.786667))

# InsertCursor オブジェクトを取得
cur = arcpy.da.InsertCursor(“Station”, [“name”, “SHAPE@XY”])

# カーソルに新しいレコード値をセットして行を追加
cur.insertRow(rowValues)

# オブジェクトを削除して、参照を解放
del cur

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍※SHAPE@XY はフィーチャの重心を表す X 座標と Y 座標にアクセスすることができます。

UpdateCursor

UpdateCursor はフィーチャクラスやテーブルの行の情報を更新する際に使用します。

次の例では、UpdateCursor を使用して、下表のような永田町駅の属性を持つフィーチャの行に対して users フィールドの値を 10 から 20 に更新しています。

430140_UpdateCursor.png

# 更新対象の永田町駅 を UpdateCursor オブジェクトで取得

cur = arcpy.da.UpdateCursor(“Station”, “users”, “name = ‘永田町駅’”)

# users (インデックス番号:0) フィールドの値を更新
for row in cur:
    row[0] = 20
    cur.updateRow(row)

# オブジェクトを削除して、参照を解放
del cur

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍このように ArcPy のデータ アクセスモジュールに含まれているカーソルを使用すると、データの取得や挿入、更新などをすることができますので、是非試してみてください。

おわりに

本記事では ArcPy を使ったデータの操作についてご紹介しました。次回は、独自のツール作成方法ついてご紹介します。

関連リンク

ArcPy

ArcPy 関数一覧

ArcPy クラス一覧

ジオプロセシング (GIS基礎解説)

ArcGIS 開発者コミュニティ Python を使って作業の効率化を図ろう!④ : データの操作( ArcMap 版)

【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!シリーズ リンク集

第一回:ArcPy の基礎

第二回:マップ・レイヤーの操作

第三回:ジオプロセシング ツールの操作

第五回:独自ツールの作成