ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

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

ArcGIS Online

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

ArcGIS Desktop

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

ArcGIS Enterprise

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

ArcGIS Developers

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

ArcGIS Solutions

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

ArcGIS Marketplace

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

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

ArcMap

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

Расширение геообработки с помощью модулей Python

Используя Python Distribution Utilities (distutils), наборы инструментов Python и пользовательские наборы инструментов, содержащие инструменты-модели и/или инструменты-скрипты, можно успешно передавать пользователям ArcGIS в форме модулей Python. Процесс создания и распространения наборов инструментов начинается с создания модуля Python. Модулем, который используется в этом упражнении, будет foo.py.

foo.py

Пример кода для создания модуля Python foo:

import os
def hello():
    print('Hello ' + os.getenv('username'))

Чтобы модуль был корректно создан и размещен, должна иметь место особая структура каталогов. Для хранения модуля foo должен быть создан каталог с именем foo. Поскольку распределение требует, чтобы каталог с модулем foo находился в родительском каталоге, то создается каталог с именем src для вмещения каталога foo и модуля foo. Структура каталогов должна быть следующей:

Создается каталог с именем src, в котором будут размещены директория foo и модуль foo.

Чтобы модуль foo инициализировал и автоматически запустил определённый код после его импорта, требуется файл __init__.py. При нахождении файла __init__.py в требуемом местоположении, пользователи смогут работать с модулем foo и импортировать выбранные определения.

__init__.py

Пример кода для создания __init__.py для модуля foo:

from foo import hello

Структура каталогов теперь должна быть следующей:

Требуется файл __init__.py.

С корректной структурой файлов и каталогов модуль foo может быть импортирован через import foo, и может быть вызвана и выполнена foo.hello(). Следующим шагом будет построение пакета распространения (дистрибутива) для модуля foo с тем, чтобы его можно было установить в каталог Python site-packages для удобного совместного использования. Этого можно добиться, написав скрипт setup.py.

setup.py

Пример кода для создания setup.py:

from distutils.core import setup
setup(name='foo',
    version='1.0',
    packages=['foo'],
    package_dir={'foo': 'foo'},
    )

Файл setup.py содержит имя и версию модуля и указывает утилите сборки на каталог пакета. Файл setup.py должен быть сохранен в каталоге src. Здесь структура каталогов должна быть следующей:

Файл setup.py должен быть создан в каталоге src.

Установщик для модуля foo может быть построен посредством запуска из каталога src одной из указанных ниже команд с использованием соответствующей строки операционной системы при правильном размещении структуры каталогов. Этот пример создан в операционной системе Windows.

Примечание:

Убедитесь, что в вашей системе указан путь к python.exe. В ОС Windows, это может быть сделано путем добавления пути вашей инсталляции Python к системной переменной пути в переменных среды ОС Windows.

Windows:

python setup.py bdist_wininst

Linux:

python setup.py bdist_rpm

Построитель Windows создаёт каталоги dist и build в каталоге src. В каталоге dist создается файл foo-1.0.win32.exe. Это исполняемый файл, который может распространяться для установки модуля foo в директорию Python site-packages на компьютере с ОС Windows. Помимо запуска исполняемого файла модуль foo можно установить, напрямую скопировав каталог foo из каталога build/lib в каталог Python site-packages. Если существуют ограничения для пользователей на запуск исполняемых файлов, то копирование каталога foo из каталога build/lib в каталог site-packages приведет к тому же результату, что и установка его посредством запуска исполняемого файла. Когда модуль foo установлен или скопирован в каталог site-packages, структура должна быть следующей:

Модуль foo должен быть установлен или скопирован в каталог site-packages.

Этот процесс может быть реализован с целью расширения возможностей геообработки путем добавления пользовательских наборов инструментов и/или наборов инструментов Python непосредственно в системные наборы ArcGIS. Как любой системный набор инструментов, он находится в списке системных наборов в ArcGIS и может иметь обертки ArcPy для расширения ArcPy. Кроме того, это позволит модулю пользовательского набора инструментов использовать преимущества устоявшейся методологии, которая применяется системными наборами инструментов ArcGIS для распространения сообщений, для основанной на языке справки и для реакции на локализованные настройки. ArcGIS Desktop будет осуществлять поиск в местоположении Python site-packages, чтобы определить, в каждом ли модуле существует каталог с именем esri. Каталог esri содержит пользовательские наборы инструментов вместе с соответствующими файлами справки. Ниже представлена структура каталогов для английского языка:

Каталог esri с пользовательскими наборами инструментов и соответствующими файлами справки.

Пользовательские наборы инструментов (.tbx и .pyt) находятся в папке esri/toolboxes вместе со скриптами, если используются инструменты-скрипты. В директории esri/help/gp хранятся метаданные (.xml) для пользовательских инструментов и наборов инструментов. Правила наименования наборов инструментов – <псевдоним набора инструментов>_toolbox.xml, а для инструмента – <имя инструмента>_<псевдоним набора инструментов>.xml. В каталоге esri/help/gp/messages хранятся файлы сообщений геообработки (.xml). Эти файлы сообщений используются в наборах инструментов Python для интернационализированных сообщений. Замещающие файлы надписей инструментов и наборов инструментов находятся в директории esri/help/gp/toolboxes. Путем создания нового набора инструментов Python SamplePythonToolbox можно продемонстрировать весь процесс расширения геообработки с использованием модулей Python. Для получения дополнительной информации о создании наборов инструментов Python и работе с ними см. Создание нового набора инструментов Python.

Примечание:

Необходимо указывать для набора инструментов Python псевдоним, который будет использоваться в этом процессе.

SamplePythonToolbox.pyt

Пример кода создания набора инструментов Python:

import arcpy
import os
import foo
class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "Toolbox"
        self.alias = "SampleToolbox"
        # List of tool classes associated with this toolbox
        self.tools = [SampleTool]
class SampleTool(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Sample Tool"
        self.description = ""
        self.canRunInBackground = False
    def getParameterInfo(self):
        """Define parameter definitions"""
        params = None
        return params
    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return True
    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return
    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return
    def execute(self, parameters, messages):
        """The source code of the tool."""
        messages.AddMessage(os.getenv("username") + " welcome to the sample tool")
        foo.hello()
        return

В SamplePythonToolbox.pyt был импортирован модуль foo, и метод запуска класса SampleTool вызвал функцию hello из модуля foo. Это эффективный путь использования пользовательского кода Python как модуля и применения его функциональных возможностей в инструментах геообработки ArcGIS. Как только SamplePythonToolbox.pyt создан и справка боковой панели настроена для набора инструментов посредством метаданных, отредактированных в контекстном меню Описание элемента или создан скомпилированный пользователем файл справки (.chm), он и его сопровождающие файлы .xml должны быть скопированы из каталога, где он был создан. С помощью ArcCatalog или окна Каталог скопируйте файлы в каталог esri/toolboxes, расположенный в структуре каталогов. Компоновка файла и каталога esri должна быть следующая:

Файлы справки набора инструментов (боковая панель) в структуре каталогов.

Новая структура каталогов должна быть следующей:

Файлы справки набора инструментов (боковая панель) в каталоге esri directory и компоновке файлов.

Чтобы отразить эти изменения в нашем распределении, нужно отредактировать файл setup.py.

Новый файл setup.py

Пример кода для включения изменений директории setup.py:

from distutils.core import setup
setup(name='foo',
    version='1.0',
    packages=['foo'],
    package_dir={'foo': 'foo'},
    package_data={'foo': ['esri/toolboxes/*.*']},
    )

Новый setup.py отличается от исходного одной строкой, в которой дополнительные данные, находящиеся в каталоге esri, добавляются к пакету. Теперь, когда построитель (builder) для модуля foo запущен и модуль устанавливается, в каталоге Python site-packages будет создана следующая структура каталогов:

Структура каталогов, которая будет создана в каталоге Python site-packages.

С помощью ArcGIS Desktop и Python Distribution Utilities (Distutils) вы можете создать и установить пакет, который расширит возможности геообработки пользовательскими наборами инструментов, которые будут доступны для просмотра и запуска из системных наборов инструментов ArcGIS. Для английского языка больше ничего не требуется. В разделе Интернационализация подробно рассматривается процесс расширения геообработки с использованием той же методологии, которая использовалась Esri, для упаковки этого модуля для распространения на других языках, помимо английского.

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

  • Интернационализация модулей Python

ArcGIS Desktop

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

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Об Esri

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