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

6561
0
11-21-2018 06:16 PM

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

はじめに

この記事は ArcPy を使った処理の基本を紹介する「Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事で使用するデータや関連資料は ESRI ジャパンの GitHub で公開していますので是非ご覧ください。また、本シリーズ記事では ArcGIS Desktop (ArcMap) を利用した操作をご紹介します。

 

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

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

 

データの操作

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

 

データ プロパティの取得

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

 

カーソル

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

 

SearchCursor

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

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

 


 

# 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 を使用して、新たに表参道駅のフィーチャを行として追加しています。

 

 

# 追加する値をタプル型で変数に格納
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 に更新しています。

 

 

# 更新対象の永田町駅 を 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 クラス一覧

Version history
Last update:
‎11-12-2020 11:01 PM
Updated by:
Contributors