Работа с наборами объектов и записей
Объекты FeatureSet являются упрощенными представлениями класса пространственных объектов. Они представляют собой особый элемент данных, который содержит не только схему (геометрический тип, поля, пространственная привязка), но и данные, включая саму геометрию. Аналогичным образом устроены объекты RecordSet, но они сопоставимы с таблицами. В инструменте-скрипте наборы объектов и записей могут использоваться для интерактивного определения объектов и записей.
Инструменты сервера взаимодействуют с помощью наборов объектов и записей; это значит, что данные должны создаваться с помощью инструментов сервера или загружаться в эти объекты тогда, когда эти инструменты используются.
Классы FeatureSet и RecordSet имеют два одинаковых метода.
Свойство |
Описание |
---|---|
load |
Импорт класса объектов в объект FeatureSet. |
save |
Экспорт в класс объектов базы геоданных или шейп-файл. |
Свойство |
Описание |
---|---|
load |
Импорт таблицы в объект RecordSet. |
save |
Экспорт в таблицу базы геоданных или файл dBASE. |
Создание и использование объектов 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
При работе с инструментами-скриптами объекты 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.getOutput(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)