Что такое набор инструментов 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, в котором содержится один инструмент. Инструмент 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