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
  • Мой профиль
  • Выход

Справка

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

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

Используя инструменты распространения Python (Python Distribution Utilities) и информацию документации Python, Модули размещения Python, наборы инструментов 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 к системной переменной пути (Path) в переменных среды ОС Windows.

Windows:

python setup.py bdist_wininst

Linux:

python setup.py bdist_rpm

Построитель (builder) 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 for 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 (Creating a new Python toolbox).

Примечание:

Необходимо указывать для набора инструментов 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 создан и справка боковой панели настроена для набора инструментов посредством метаданных, отредактированных в контекстном меню Описание элемента (Item Description) или создан скомпилированный пользователем файл справки (.chm), он и его сопровождающие файлы .xml должны быть скопированы из каталога, где он был создан. С помощью ArcCatalog или окна Каталога скопируйте файлы в папку esri/toolboxes, которая появляется в структуре каталогов. Компоновка файла и каталога esri должна быть следующая:

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

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

Файлы справки боковой панели для набора инструментов включены в компоновку файла и каталога esri.

Чтобы отразить эти изменения в нашем распределении, нужно отредактировать файл 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 for Desktop и Python Distribution Utilities (Distutils) вы можете создавать и устанавливать пакет, который расширит геообработку пользовательскими наборами инструментов, просматриваемыми и запускаемыми из системных наборов ArcGIS. Для английского языка больше ничего не требуется. Раздел Интернационализация дополняет процесс расширения геообработки с использованием той же методологии Esri для упаковки модуля с использованием других языков.

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

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

ArcGIS Desktop

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

ArcGIS Platform

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

Об Esri

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