ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Справка
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Картографическая платформа вашей организации

ArcGIS Desktop

Полноценная профессиональная ГИС

ArcGIS Enterprise

ГИС предприятия

ArcGIS for Developers

Инструменты для встраивания приложений с местоположениями

ArcGIS Solutions

Бесплатные шаблоны карт и приложений для отрасли

ArcGIS Marketplace

Получение приложения и данных для вашей организации.

  • Документация
  • Поддержка
Esri
  • Войти
user
  • Мой профиль
  • Выход

ArcMap

  • На главную
  • Начало работы
  • Карта
  • Анализ
  • Управление данными
  • Инструменты
  • Дополнительные модули

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

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

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

Инструменты, созданные в наборе инструментов Python, дают множество преимуществ:

  • Создание набора инструментов Python позволяет вам воспользоваться преимуществами языка Python и быстро разработать прототипы и полнофункциональные версии инструментов геообработки.
  • Созданный инструмент является неотъемлемой частью геообработки, как и любой другой системный инструмент. Вы можете открыть его из окна Поиск (Search) или Каталог (Catalog), использовать его в ModelBuilder и в окне Python), а также вызвать его из других скриптов.
  • Вы можете записывать сообщения в окно Результаты (Results) и диалоговое окно, отображающее ход процесса.
  • Используя встроенные инструменты документирования, вы можете подготовить необходимую документацию.
  • Когда скрипт запущен как инструмент-скрипт, arcpy получает уведомление, из какого приложения (например, ArcMap) он был вызван. Настройки приложения, такие как arcpy.env.overwriteOutput и arcpy.env.scratchWorkspace, доступны из ArcPy в инструменте-скрипте.

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

Чтобы создать набор инструментов Python, щелкните правой кнопкой мыши папку, в которой необходимо создать новый набор инструментов, а затем нажмите последовательно Новый (New) > Набор инструментов Python (Python Toolbox).

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

Приступая к работе

Приступая к работе

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

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

Определение вашего инструмента

Определение инструмента

Определение параметров вашего инструмента

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание:

Чтобы использовать этот инструмент, необходимо скопировать и вставить код из примера в любой текстовый редактор, например Блокнот, и сохранить файл с расширением .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): #optional
        return True

    def updateParameters(self, parameters): #optional
        if parameters[0].altered:
            parameters[1].value = arcpy.ValidateFieldName(parameters[1].value,
                                                          parameters[0].value)
        return

    def updateMessages(self, parameters): #optional
        return

    def execute(self, parameters, messages):
        inFeatures  = parameters[0].valueAsText
        fieldName   = parameters[1].valueAsText
        
        if fieldName in ["#", "", None]:
            fieldName = "sinuosity"

        arcpy.AddField_management(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.CalculateField_management(inFeatures,
                                        fieldName,
                                        'getSinuosity(!shape!)',
                                        'PYTHON_9.3',
                                        expression)

Связанные разделы

  • Краткий обзор процесса создания инструментов с помощью Python
  • Сравнение пользовательского набора инструментов и набора инструментов Python

ArcGIS Desktop

  • На главную
  • Документация
  • Поддержка

ArcGIS Platform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Об Esri

  • О нас
  • Карьера
  • Блог Esri
  • Конференция пользователей
  • Саммит разработчиков
Esri
Расскажите нам, что вы думаете.
Copyright © 2020 Esri. | Конфиденциальность | Правовая информация