Создание надстройки Python в виде дополнительного модуля приложения
Дополнительный модуль приложения может использоваться разными способами для добавления дополнительной функциональности в приложения ArcGIS for Desktop.
- Дополнительный модуль приложения часто используется для группировки связанного набора функций, которые имеют схожее назначение. Примерами дополнительных модулей в ArcMap могут служить модули ArcGIS 3D Analyst, Business Analyst и так далее.
- Дополнительные модули обычно используются для наблюдения за различными событиями в основном приложении и для реагирования на них. Так, событие регистрируется при добавлении или удалении слоя, в свою очередь дополнительный модуль реагирует на него автоматически, сохраняя документ карты.
- Дополнительные модули приложения используются для согласования действий между другими компонентами — такими, как кнопки и инструменты — внутри содержащей их надстройки. Например, дополнительный модуль может активировать набор инструментов лишь в том случае, когда на карту добавлен определенный набор слоев.
В этом разделе будет рассмотрен процесс создания дополнительного модуля приложения. Прежде, чем начать этот процесс, убедитесь, что вы создали проект надстройки ArcMap и указали параметры проекта. Более подробная информация доступна в разделе Создание проекта надстройки. В данном руководстве описывается процесс создания меню для ArcMap. Тем не менее, процесс создания меню для любого другого приложения ArcGIS for Desktop аналогичен. В этом разделе будет рассмотрен процесс создания расширения, которое добавляет базовый слой в ArcMap каждый раз, когда открывается документ или создается новый документ. После этого класс Python, созданный мастером надстроек Python, будет рассмотрен более подробно, с целью исследовать свойства и методы, которые обеспечивают функциональность дополнительного модуля.
Создание надстройки в виде дополнительного модуля приложения состоит из двух этапов:
-
Создание дополнительного модуля.
После ввода необходимых параметров проекта щелкните закладку Содержимое надстройки (Add-In Contents). Для того, чтобы начать, нажмите правой кнопкой мыши на ДОПОЛНИТЕЛЬНЫЕ МОДУЛИ (EXTENSIONS) и выберите Новый дополнительный модуль (New Extension).
Дополнительный модуль содержит ряд параметров, которые вам необходимо ввести. Ниже представлен список всех параметров с описанием каждого из них. Эти свойства сохраняются в файле config.xml вашего проекта.
Свойство Описание Название(обязательный)
Содержит название вашего дополнительного модуля. На представленном ниже снимке экрана название используется в диалоговом окне Дополнительные модули (Extensions) для настольных приложений.
Название класса(обязательный)
Класс Python, представляющий ваш модуль. Вся бизнес-логика вашего модуля находится в классе Python. Этот класс особенно важен, поскольку он вызывается каждый раз, когда дополнительный модуль используется в настольном приложении. При создании класса используйте соглашения о наименовании, принятые в Python. Классы Python используют нотацию CapWords, при которой каждое слово пишется с большой буквы. В этом примере мы создадим класс, названный AddBaseLayer.
ID(обязательный)
Это уникальное название для идентификации вашего расширения. Вы можете создать более одного дополнительного модуля в проекте, и этот идентификатор позволит вам отличать модули друг от друга. В идеальном случае вы должны заменить идентификатор по умолчанию на более понятное значение. Идентификатор не должен содержать пробелов. Вы можете использовать символ подчеркивания для того, чтобы соединять слова. Нельзя использовать ключевые слова Python. Список зарезервированных слов доступен в документации Python. Пространство имен надстройки будет приставлено к ID. Пространство имен хранится в файле config.xml.
Описание(дополнительный)
Описывает назначение вашего дополнительного модуля. Например, дополнительный модуль 3D Analyst предоставляет инструменты для моделирования поверхностей и 3D визуализации. Описание отображается в нижней части диалогового окна Дополнительные модули.
Загружается автоматически(дополнительный)
Позволяет загружать дополнительный при запуске настольного приложения. По умолчанию эта опция включена. Когда эта опция включена, для включенного свойства в скрипте Python будет установлено значение True.
Как только вы установили все параметры, нажмите на кнопку Сохранить (Save) в нижней части мастера. Все необходимые файлы и папки будут созданы в вашей рабочей папке.
- Редактирование скрипта Python.
Следующим шагом является редактирование скрипта Python и обновление класса Python с целью добавления функциональности, которая позволит добавлять базовый слой каждый раз, когда открыт или создан документ карты. Скрипт выполняет это посредством регистрирования и реагирования на события ArcMap openDocument и newDocument. Для добавления функциональности к модулю приложения выполните следующие шаги:
- Отредактируйте скрипт Python, находящийся в папке Install, расположенной в рабочей папке, которую вы создали при помощи мастера.
В скрипте находится класс с таким же названием, какое вы ввели в мастере. Не изменяйте название этого класса, поскольку это название содержится в файле config.xml. Более подробная информация о каждой функции в классе дополнительного модуля доступна в разделе Класс дополнительного модуля.
- Отредактируйте функции событий newDocument и openDocument как показано ниже.
Этот код предоставляет функциональность, позволяющую добавлять базовый слой на активный фрейм данных, если он еще не существует.
def newDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ # Provide a layer file and the layer name as it would appear in the Table of contents. base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return def openDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return
- Удалите все функции, не выполняемые в этом скрипте.
Вы должны удалить все функции, не выполняемые в этом скрипте. Таким образом, они не будут вызваны приложением.
- Сохраните скрипт.
- Отредактируйте скрипт Python, находящийся в папке Install, расположенной в рабочей папке, которую вы создали при помощи мастера.
- Проверьте работоспособность дополнительного модуля.
После того, как вы создали дополнительный модуль и добавили код скрипта, важно создать файл надстройки и проверить его работоспособность, прежде, чем передавать его конечным пользователям. Для этого выполните шаги, описанные в разделе Тестирование надстройки.
- Передайте дополнительный модуль конечным пользователям.
Более подробные сведения о размещении и предоставлении общего доступа к надстройкам доступны в разделе Общий доступ к надстройкам.