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

Объекты 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)