Работа с наборами объектов и записей

Объекты FeatureSet являются упрощенными представлениями класса пространственных объектов. Они представляют собой особый элемент данных, который содержит не только схему (геометрический тип, поля, пространственная привязка), но и данные, включая саму геометрию. Аналогичным образом устроены объекты RecordSet, но они сопоставимы с таблицами. В инструменте-скрипте наборы объектов и записей могут использоваться для интерактивного определения объектов и записей.

ПримечаниеПримечание:

Инструменты сервера взаимодействуют с помощью наборов объектов и записей; это значит, что данные должны создаваться с помощью инструментов сервера или загружаться в эти объекты тогда, когда эти инструменты используются.

Классы FeatureSet и RecordSet имеют два одинаковых метода.

Свойство

Разъяснение

загрузить

Импорт класса объектов в объект FeatureSet.

сохранить

Экспорт в класс объектов базы геоданных или шейп-файл.

Класс FeatureSet

Свойство

Разъяснение

загрузитьт

Импорт класса объектов в объект RecordSet.

сохранить

Экспорт в таблицу базы геоданных или файл dBASE.

Класс RecordSet

Создание и использование объектов FeatureSet и RecordSet

Объекты FeatureSet и RecordSet можно создавать различными способами в зависимости от потребностей и того, как они будут применяться. Метод load (загрузить) может использоваться для добавления в объект новых объектов или строк в объект, а метод save (сохранить) – для сохранения объектов или строк на диске. Помимо этого, могут также быть добавлены входной класс объектов или таблица в качестве аргументадля этого класса. Оба этих объекта –и FeatureSet, и RecordSet можно использовать непосредственно в качестве входных данных для инструмента геообработки.

Создание пустого набора объектов.

import arcpy

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

Создание набора объектов из входного класса объектов.

import arcpy

# Construct a FeatureSet from a feature class
#
featSet = 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
#
inRecSet = arcpy.GetParameterValue("bufferpoints", 0)

Более подробно о функции GetParameterValue

Использование функции GetParameter

При работе с инструментами-скриптами объекты FeatureSet и RecordSet можно получить из инструмента с помощью функции GetParameter().

import arcpy

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

Более подробно о функции GetParameter

Методы getInput/getOutput класса Result

При использовании инструмента сервера необходимо обязательно запрашивать его выходные данные. Если выходными данными является набор объектов или набор записей, то для получения выходных данных инструмента в объекте FeatureSet или RecordSet можно использовать метод getOutput() класса Result. Также, для того, чтобы получить входные объекты FeatureSet или RecordSet, может быть использован метод getInput объекта Result.

Более подробно о получении результатов от инструмента геообработки

import arcpy
import time

# 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'
#
inFeatureSet = arcpy.GetParameterValue("bufferpoints", 0)

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

# Run a server tool named BufferPoints with featureset created above
#
result = arcpy.BufferPoints_servertools(inFeatureSet, "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
#
outFeatSet = result.getOutput(0)
outFeatSet.save("c:/temp/base.gdb/towers_buffer")

Более подробно о классе Result

Пример. Загрузка данных в набор объектов с помощью курсоров и класса объектов из памяти компьютера.

import arcpy
from arcpy import env

env.overwriteOutput = True

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

# List of coordinates
#
coordinateL = [[-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
#
fc = arcpy.CreateFeatureclass_management("in_memory",
                                         "tempfc",
                                         "POINT").getOutput(0)

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

# Create a FeatureSet object and load in_memory feature class
#
featSet = arcpy.FeatureSet()
featSet.load(fc)

results = arcpy.BufferPoints_servertools(featSet)

Связанные темы

9/11/2013