フィーチャ セットおよびレコード セットの操作

FeatureSet オブジェクトは、フィーチャクラスのシンプルな表現です。これらは、スキーマ (ジオメトリ タイプ、フィールド、空間参照) のみでなく、データ (ジオメトリを含む) も含んだ特殊なデータ エレメントです。RecordSet オブジェクトも同様のものですが、これはテーブルと似ています。スクリプト ツール内で使用する場合は、フィーチャ セットとレコード セットを使用してフィーチャとレコードをインタラクティブに定義できます。

メモ:

サーバー ツールはフィーチャ セットとレコード セットを使用してやり取りを行います。つまり、サーバー ツールを使用する際には、これらのオブジェクトを使用してデータを作成したり、これらのオブジェクトにデータをロードしたりする必要があります。

FeatureSet クラスと RecordSet クラスには、同じ 2 つのメソッドがあります。

プロパティ説明

load

フィーチャクラスを FeatureSet オブジェクトにインポートします。

save

ジオデータベース フィーチャクラスまたはシェープファイルにエクスポートします。

FeatureSet クラス

プロパティ説明

load

テーブルを RecordSet オブジェクトにインポートします。

save

ジオデータベース テーブルまたは dBASE ファイルにエクスポートします。

RecordSet クラス

FeatureSet オブジェクトおよび RecordSet オブジェクトの作成と使用

FeatureSet および RecordSet オブジェクトは、ニーズと適用に応じてさまざまな方法で作成することができます。load メソッドを使用して新しいフィーチャまたは行をオブジェクトに追加でき、save メソッドを使用してフィーチャまたは行をディスクに保存できます。また、入力フィーチャクラスまたはテーブルをクラスの引数として指定することもできます。FeatureSet オブジェクトと RecordSet オブジェクトは両方とも、ジオプロセシング ツールへの入力として直接使用することもできます。

空のフィーチャ セットを作成します。

import arcpy

# Create an empty FeatureSet object
feature_set = arcpy.FeatureSet()

入力フィーチャクラスからフィーチャ セットを構築します。

import arcpy

# Construct a FeatureSet from a feature class
feature_set = arcpy.FeatureSet("c:/base/roads.shp")

GetParameterValue 関数

ツールの入力の具体的なスキーマを指定してフィーチャ セットまたはレコード セットを作成する場合は、GetParameterValue() を使用して、該当するスキーマを持つ空の FeatureSet オブジェクトまたは RecordSet オブジェクトを作成します。

import arcpy

# Add a custom server toolbox
arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal", "servertools")

# Get the default input from a tool
in_recordset = arcpy.GetParameterValue("bufferpoints", 0)

GetParameter 関数の使用

スクリプト ツールを操作する際には、GetParameter() 関数を使用して、FeatureSet オブジェクトと RecordSet オブジェクトをツールから取得できます。

import arcpy

# Get the RecordSet from a script tool
in_recordset = arcpy.GetParameter(0)

GetParameter 関数の詳細

Result クラスの getInput および getOutput メソッド

サーバー ツールを使用する際には、その出力を明示的に要求します。出力がフィーチャ セットまたはレコード セットである場合は、Result クラスの getOutput() メソッドを使用して、ツールの出力を FeatureSet オブジェクトまたは RecordSet オブジェクトに返すことができます。同様に、Result オブジェクトの getInput メソッドを使用して、入力 FeatureSet または RecordSet オブジェクトを取得できます。

import time
import arcpy

# Add a toolbox from a server
arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal",
                    "servertools")

# Use GetParameterValue to get a featureset object with the default
# schema of the first parameter of the tool 'bufferpoints'
in_featureset = arcpy.GetParameterValue("bufferpoints", 0)

# Load a shapefile into the featureset
in_featureset.load("c:/base/roads.shp")

# Run a server tool named BufferPoints with featureset created above
result = arcpy.BufferPoints_servertools(in_featureset, "5 feet")

# Check the status of the result object every 0.2 seconds until it
# has a value of 4 (succeeded) or greater
while result.status < 4:
    time.sleep(0.2)

# Get the output FeatureSet back from the server and save to a
# local geodatabase
out_featureset = result[0]
out_featureset.save("c:/temp/base.gdb/towers_buffer")

例: カーソルおよびメモリ内フィーチャクラスを使用した、フィーチャ セットへのデータの読み込み

import arcpy

arcpy.env.overwriteOutput = True

arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal",
                    "servertools")

# List of coordinates
coordinates = [[-117.196717216, 34.046944853],
               [-117.186226483, 34.046498438],
               [-117.179530271, 34.038016569],
               [-117.187454122, 34.039132605],
               [-117.177744614, 34.056765964],
               [-117.156205131, 34.064466609],
               [-117.145491191, 34.068261129],
               [-117.170825195, 34.073618099],
               [-117.186784501, 34.068149525],
               [-117.158325598, 34.03489167]]

# Create an in_memory feature class to initially contain the coordinate pairs
feature_class = arcpy.CreateFeatureclass_management(
    "in_memory", "tempfc", "POINT")[0]

# Open an insert cursor
with arcpy.da.InsertCursor(feature_class, ["SHAPE@XY"]) as cursor:
    # Iterate through list of coordinates and add to cursor
    for (x, y) in coordinates:
        cursor.insertRow([(x, y)])

# Create a FeatureSet object and load in_memory feature class
feature_set = arcpy.FeatureSet()
feature_set.load(feature_class)

results = arcpy.BufferPoints_servertools(feature_set)