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

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)

GetParameterValue 関数についての詳細

GetParameter 関数の使用

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

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

GetParameter 関数についての詳細

結果クラスの 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.getOutput(0)
out_featureset.save("c:/temp/base.gdb/towers_buffer")

Result クラスに関する詳細

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

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)

関連トピック

5/10/2014