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

Эта документация ArcGIS 2.8 была перемещена в архив и более не обновляется. Ресурсы и ссылки могут быть устаревшими. См. самую последнюю документацию.

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

Примечание:

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

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

СвойствоОписание

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

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

import arcpy

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

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

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

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

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)