Наборы объектов и записей

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

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

Примечание:

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

У классов FeatureSet и and RecordSet есть два сходных метода.

СвойствоОбъяснение

load

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

save

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

Класс FeatureSet

СвойствоОбъяснение

load

Импорт таблицы в объект RecordSet.

save

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

Класс RecordSet

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

Объекты FeatureSet и RecordSet можно использовать напрямую в качестве входных параметров инструмента геообработки. Есть несколько способов создания объектов, выбор которых зависит от потребностей и сферы применения; от аргументов, добавляемых в конструктор классов или от разных значений, описанных в примерах ниже. Метод load можно использовать для загрузки разных наборов объектов или строк в объект, а метод save можно использовать для сохранения объектов или строк на диске. Иногда конструкторы класса и методы класса load принимают разные источники данных, как это описано в разделах FeatureSet и RecordSet.

Создайте пустой объект FeatureSet.

feature_set = arcpy.FeatureSet()

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

feature_set = arcpy.FeatureSet("c:/base/roads.shp")

Загрузите набор объектов, используя выражение SQL, в объект FeatureSet.

feature_set.load("c:/base/roads.shp", "CITY = 'Redlands'")

GetParameterValue

Чтобы создать объект FeatureSet или RecordSet с заданной схемой входных параметров инструмента, используйте функцию 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, то объект 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")

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

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_class)

results = arcpy.BufferPoints_servertools(feature_set)