Управление промежуточными (временными) данными в общедоступной модели и инструментах-скриптах

Временные данные — это данные, используемые инструментом и удаляемые после завершения работы инструмента. В ModelBuilder временные данные называются промежуточными данными. Данные, которые помечаются как промежуточные (intermediate) в ModelBuilder, автоматически удаляются после завершения работы инструмента-модели. Однако в скриптах разработчик сам несет ответственность за удаление временных данных.

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

Если доступ к инструменту предоставляется в рамках пакета или сервиса геообработки, нет необходимости изменять модели или скрипты для управления промежуточными или временными данными. Методы, описанные ниже, применимы только при предоставлении общего доступа к пользовательскому набору инструментов, то есть когда общий доступ предоставляется не к пакету или к сервису, а к набору инструментов (файл .tbx). В этом случае необходимо убедиться, что инструменты могут записывать промежуточные и временные данные в местоположение, которое существует на любом компьютере, где запускается этот инструмент.

Если доступ предоставляется к набору инструментов, содержащему модель и инструменты-скрипты, необходимо место — папка или база геоданных — в которую инструменты смогли бы записывать промежуточные и временные данные. Существует две среды, доступные только для чтения, временная база геоданных (Scratch GDB) и временная папка (Scratch), доступные для записи промежуточных и временных данных. Эти две среды были представлены в ArcGIS 10.1.

Промежуточные данные в моделях

Все промежуточные данные должны быть помечены соответствующим образом и записаны или во временную папку, или во временную базу геоданных. На приведенной ниже иллюстрации показана переменная данных Пересечение центров тяжестей, помеченная как промежуточная, и ее выходное местоположение во временной базе геоданных (%scratchGDB%). Знаки процентов (%) означают замену переменной — значение scratchGDB расширяется при выполнении инструмента модели, и класс poly_Intersect записывается во временную базу геоданных. Аналогичным образом используется %scratchFolder% для записи данных на основе файлов, например файлов .lyr или .txt.

Использование %scratchGDB% в моделях

При записи промежуточных классов объектов может возникнуть желание записать шейп-файлы во временную папку. Однако этого следует избегать, данные объектов необходимо записывать во временную базу геоданных, так как шейп-файлы имеют достаточно жесткие ограничения и могут повлиять на гибкость разрабатываемых инструментов. Дополнительные сведения о шейп-файлах и связанных с ними ограничениях см. в разделе Особенности геообработки с выходными данными в формате шейп-файла.

Можно также записать промежуточные данные в рабочую область, расположенную в оперативной памяти.

Дополнительные сведения о рабочей области в оперативной памяти

Управление временными данными в инструментах-скриптах

Временные данные в инструментах-скриптах должны быть записаны или во временную базу геоданных, или во временную папку. В приведенном ниже коде показано копирование класса объекта во временную базу геоданных и удаление этого класса после завершения обработки.

import arcpy
import os
inFC = arcpy.GetParameterAsText(0)

tempFC = arcpy.env.scratchGDB + os.path.sep + "tempFC"
arcpy.CopyFeatures_management(inFC, tempFC)

# Do some work here...

# Clean up when done...
#
arcpy.Delete_management(tempFC)

При работе скрипта можно также записывать данные в рабочую область, расположенную в оперативной памяти. Например:

import arcpy

table = arcpy.CreateTable_management("in_memory", "table1")
arcpy.AddField_management(table, "Field1", "TEXT", field_length=20)

cursor = arcpy.da.InsertCursor(table, ["Field1"])
cursor.insertRow(["Hello World"])

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

Временная рабочая область

Параметр среды Временная рабочая область используется преимущественно приложением ModelBuilder для размещения промежуточных и выходных данных. Эта среда может быть задана разработчиком (или пользователем инструмента) как любое местоположение: папка, база геоданных или даже набор классов объектов в базе геоданных. Использование среды временной рабочей области для общедоступных инструментов не рекомендуется, так как пользователь инструмента может задать в качестве среды временной рабочей области папку, базу геоданных или набор классов объектов. Например, разработчик ожидал определения в качестве временной рабочей области папку, в которую можно выкладывать файл слоя, однако пользователь инструмента задал в качестве временной рабочей области базу геоданных. При выполнении инструмент завершит работу со сбоем, так как не сможет записать файл слоя в базу геоданных. Основная причина, по которой временная база геоданных и временная папка были введены в версии 10.1 — предоставить специальную базу геоданных и специальную папку для записи данных.

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

9/11/2013