Skip to main content

Что такое набор инструментов Python

Наборы инструментов Python являются наборами инструментов геообработки, созданными в Python. Набор инструментов Python и его инструменты выглядят и действуют точно так же, как инструменты и наборы инструментов, созданные любым другим способом. Набор инструментов Python представляет собой файл Python с расширением .pyt, определяющий набор инструментов и один или несколько инструментов.

После создания инструменты в наборе инструментов Python предоставляют следующее:

  • Создаваемый вами инструмент-скрипт является неотъемлемой частью геообработки, как любой другой системный инструмент – вы можете открыть его на панели Каталог, использовать его в ModelBuilder и в окне Python, а также вызвать его из другого скрипта.

  • Вы можете записывать сообщения в окно История геообработки и диалоговое окно инструмента.

  • Используя встроенные инструменты документации, вы можете предоставить документацию.

  • Когда скрипт запущен как инструмент-скрипт, ArcPy получает уведомление, из какого приложения он был вызван. Настройки приложения, такие как arcpy.env.overwriteOutput и arcpy.env.scratchWorkspace, доступны из ArcPy в инструменте-скрипте.

Создать набор инструментов Python

Для создания набора инструментов Python щелкните правой клавишей мыши папку, где вы хотите создать набор инструментов, а затем Новый > Набор инструментов Python.

Изначально набор инструментов Python включает два класса Python: класс Toolbox, определяющий характеристики набора инструментов, и класс Python Tool, в котором хранится сам код инструмента геообработки.

Следующая таблица описывает действия и ссылки на информацию по созданию инструмента в наборе инструментов Python:

Начало работы

Шаг

Информация

Начало работы

Создание нового набора инструментов Python

Редактирование набора инструментов Python

Задание инструмента

Задание инструмента

Задание параметров инструмента

Определение параметров в наборе инструментов Python

Определение типов данных параметров в наборе инструментов Python

Настройка поведения инструмента

Настройка поведения инструмента в наборе инструментов Python

Обновление схемы в наборе инструментов

Управление поведением лицензии в наборе инструментов Python

Проверка в постобработке в наборе инструментов Python

Запись исходного кода инструмента

Доступ к параметрам в наборе инструментов Python

Создание сообщений в наборе инструментов Python

Документация инструмента

Документирование пользовательского инструмента геообработки

Пример набора инструментов Python

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

Примечание:

Чтобы использовать этот инструмент, скопируйте код из примера в любую среду разработки, поддерживающую Python (IDE), или в Notepad и сохраните файл с расширением .pyt.

import arcpy
class Toolbox(object):
 def __init__(self):
     self.label =  "Sinuosity toolbox"
     self.alias  = "sinuosity"
     # List of tool classes associated with this toolbox
     self.tools = [CalculateSinuosity]
class CalculateSinuosity(object):
 def __init__(self):
     self.label       = "Calculate Sinuosity"
     self.description = "Sinuosity measures the amount that a river " + \
                        "meanders within its valley, calculated by " + \
                        "dividing total stream length by valley length."
 def getParameterInfo(self):
     #Define parameter definitions
     # Input Features parameter
     in_features = arcpy.Parameter(
         displayName="Input Features",
         name="in_features",
         datatype="GPFeatureLayer",
         parameterType="Required",
         direction="Input")
     in_features.filter.list = ["Polyline"]
     # Sinuosity Field parameter
     sinuosity_field = arcpy.Parameter(
         displayName="Sinuosity Field",
         name="sinuosity_field",
         datatype="Field",
         parameterType="Optional",
         direction="Input")
     sinuosity_field.value = "sinuosity"
     # Derived Output Features parameter
     out_features = arcpy.Parameter(
         displayName="Output Features",
         name="out_features",
         datatype="GPFeatureLayer",
         parameterType="Derived",
         direction="Output")
     out_features.parameterDependencies = [in_features.name]
     out_features.schema.clone = True
     parameters = [in_features, sinuosity_field, out_features]
     return parameters
 def isLicensed(self):
     return True
 def updateParameters(self, parameters):
     if parameters[0].altered:
         parameters[1].value = arcpy.ValidateFieldName(parameters[1].value,
                                                       parameters[0].value)
     return
 def updateMessages(self, parameters):
     return
 def execute(self, parameters, messages):
     inFeatures  = parameters[0].valueAsText
     fieldName   = parameters[1].valueAsText
     if fieldName in ["#", "", None]:
         fieldName = "sinuosity"
     arcpy.management.AddField(inFeatures, fieldName, 'DOUBLE')
     expression = '''
import math
def getSinuosity(shape):
 length = shape.length
 d = math.sqrt((shape.firstPoint.X - shape.lastPoint.X) ** 2 +
               (shape.firstPoint.Y - shape.lastPoint.Y) ** 2)
 return d/length
'''
     arcpy.management.CalculateField(inFeatures,
                                     fieldName,
                                     'getSinuosity(!shape!)',
                                     'PYTHON_9.3',
                                     expression)
 def postExecute(self, parameters):
     return

Отладка

Наборы инструментов Python можно отладить с помощью интегрированной среды разработки (IDE).

Дополнительные сведения об отладке скриптов Python