3 (62) 2012 Кастомізація ArcGIS for Desktop 10.x

Іван Мехедов, компанія Esri CIS, e-mail: [email protected], тел.: +7 (495) 988-34-81 доб. 143

Customization of ArcGIS for Desktop 10.x

Починаючи з версії 10.0, новим способом кастомізації ArcGIS for Desktop єнадбудови(англ. add-inns). Надбудова є окремим стислим файлом з розширенням .esriaddin, який не вимагає реєстрації і може одночасно використовуватися кількома програмами. Надбудови можуть бути оформлені у вигляді кнопок, списків, контекстних меню і т.д.

В ArcGIS for Desktop 10.0 налаштування розробляються на .NET або Java, а у версії 10.1 з'явилася можливість створення надбудов мовою Python. Крім того, так само, як і в попередніх версіях ArcGIS for Desktop, Python може використовуватися і для створення скриптів автоматизації обробки просторових даних. Як у скриптів, так і надбудов є свої переваги і недоліки в контексті кастомізації ArcGIS for Desktop. Вибір на користь тієї чи іншої технології залежить від поставленого завдання.

При встановленому ArcObjects SDK, середи розробки Microsoft Visual Studio, Express Edition of Visual Studio та Eclipse включають майстер створення надбудов для ArcGIS for Desktop (Add-Ins Wizard) на VB.NET, C# (MS Visual Studio) і Java (Eclipse) . Для розробки надбудови на Python використовується утиліта Python Add-In Wizard, що безкоштовно розповсюджується.

Починаючи з версії ArcGIS 10.1 кастомізація ArcGIS for Desktop за допомогою VBA не підтримується, а у версії 10.0 засоби розробки на VBA не включені в базову інсталяцію ArcGIS for Desktop, для цього потрібна окрема ліцензія. Разом із переходом на версію ArcGIS 10.1 і вище (а за відсутності окремої VBA-ліцензії – ArcGIS 10.0 і вище) має бути здійсненопереклад кастомізації ArcGIS for Desktop з VBA іншою мовою – Python, .NET-мова або Java.

У цій статті розглядаються приклад створення надбудови на основі конвертації існуючого коду з VBA в VB.NET та приклад створення надбудови на Python «з нуля».

Приклад 1. Переклад проекту VBA на надбудову на VB.NET

Як приклад створення надбудови на основі конвертації існуючого коду з VBA в VB.NET розглянемо форму, яка видає інформацію про регіон (в даному випадку окрузі), вибраний користувачем на карті. Для того, щоб самим спробувати реалізувати таку процедуру, крім ArcGIS for Desktop 10.x вам знадобляться:

  • Microsoft Visual Studio 2008/2010 (з сайту розробника можна завантажити безкоштовну версію Visual Studio 2008 Express Edition SP1)
  • ArcObjects SDK для .NET (включено в ArcGIS for Desktop 10.x)
  • Вихідні матеріали із сайту Esri (www.esri.com/news/arcuser/0311/files/vba2net.zip)

Якщо Visual Studio та ArcGIS for Desktop встановлені на одній машині, у Visual Studio з'являється можливість створити проект ArcGIS Desktop Add-in project (якщо при створенні нового проекту ArcGIS Desktop Add-in project не присутній у можливих для вибору типах проектів, то переконайтеся, що вибрано версію .NET Framework 3.5).

Вихідні матеріали із сайту містять:

  • файли проекту VBA (папка VBA Form)
  • файли проекту VB.NET (папка Code)
  • додаткові файли (папка Extra)

У процесі конвертації проекту з VBA на VB.NET Вам знадобиться:

  • перестворити форму виведення інформації
  • замінити код VBA на VB.NET

  1. Створіть новий проект у Visual Studio (Visual Basic -> ArcGIS -> Desktop Add ins-> ArcMap Add-in). Назвіть його CountyInfoAddIn та натисніть OK;
  2. З'явиться вікно Add-in Wizard (мал. 2). Заповніть у ньому всі необхідні поля та виберіть тип надбудови (у нашому прикладі надбудова має тип «Button» (кнопка)) (рис. 3). Після натискання кнопки Finish буде створено новий проект;
  3. Додайте в проект нову форму (Add - New Item - Windows Form) і назвіть її Form1. Встановіть розміри форми 319 на 223 крапки. Надайте значення наступним властивостям форми: Text = County Info; TopMost = true. Остання властивість повинна мати значенняtrueдля того, щоб форма завжди показувалася поверх основного вікна ArcMap;
  4. Додайте на форму контролі (елементи управління) – написи (Label), які відображатимуть інформацію про обраний округ, назвавши їх таким чином: lblCountyName (назва регіону), lblStateName (назва штату), lblArea (площа), lblPopulation (населення). У кожному контролі залиште значення властивості Text порожнім, а властивості Autosize надайте значенняtrue. Перед кожним контролем розмістіть контрол-напис (Label), у кожній з них надайте відповідне значення властивості Text:County Name(назва регіону),State Name(назва штату),Area(площа),Population(населення);
  5. Додайте форму 2 кнопки – btnRead і btnClose – зі значенням властивості Text -ReadDataіClose, відповідно.

На рис. 4 зліва зображено форму на VBA, а праворуч – переділену форму на VB.NET.

Перестворення форм – найзатратніша за часом частина перекладу коду з VBA до VB.NET, оскільки це доводиться робити вручну. Однак, як показано нижче, код, що не стосується оформлення елементів графічного інтерфейсу, може бути переведений з VBA до VBA.NET безособливих часових витрат.

Переклад коду з VBA до VB.NET

Наступні 4 помилки пов'язані з тим, що VBA властивість контролю label, що зберігає напис, називається Caption, а VB.NET воно називається Text. Для усунення помилок необхідно замінити всі входження .Caption на .Text (ці входження зустрічаються в рядках lblCountyName.Caption = …, lblStateName.Caption = …, lblPopulation.Text = …, lblArea.Text = …).

Нарешті, остання помилка викликана тим, що визначенняThisDocument, доступне з проекту VBA, недоступне у проекті VB.NET. Його потрібно замінити на визначення My.ArcMap.Document.

Після того, як всі помилки будуть виправлені, компілятор видасть попередження (warning): pFCursor is passed before it is assigned. Знайдіть рядок "Dim pFCursor as IfeatureCursor" і додайте в кінці "= Nothing".

На цьому процес перекладу проекту з VBA в VB.NET завершено, після складання проекту (меню Build) у директорії CountyInfoAddIn\bin\Debug з'явиться файл надбудови CountyInfoAddIn.esriAddIn.

Робота з надбудовою

Запустіть ArcMap 10.0 та відкрийте проект USA.mxd, який можна знайти у вихідних матеріалах. Виберіть у меню Customize (Налаштування) Add-In Manager (Менеджер надбудов). У менеджері налаштувань натисніть кнопку Customize (Налаштувати) і в діалоговому вікні натисніть кнопку Add from file (Додати з файлу). Виберіть створену Вами надбудову CountyInfoAddIn.esriAddIn та встановіть її. На вкладці Command (Команда) у списку Categories (Категорії) виберіть Add-In controls, потім у списку Commands (Команда) виберіть графічний елемент My Form Button (мал. 6), відповідний надбудові CountyInfoAddIn, і перетягніть її на панель інструментів ArcMap.

У головному вікні ArcMap виберітьякийсь регіон і натисніть кнопку виклику щойно доданої надбудови. При цьому буде показано форму з кнопками Read Data та Cancel. Натисніть кнопку Read Data, при цьому на формі з'явиться інформація про вибраний округ. Закрийте форму натисканням кнопки Cancel.

Таким чином, в цьому розділі ми розглянули створення найпростішої надбудови для ArcGIS for Desktop 10.x. Звичайно, її функціонал може бути значно розширений та обмежений лише можливостями VB.NET. Більше інформації про створення надбудов можна знайти на веб-сайті Ресурсного центу Esri на сторінці Esri ArcObjects for .NET. До речі, на цьому сайті можна знайти багато іншої корисної інформації щодо системи ArcGIS та її компонентів.

Незважаючи на те, що VBA більше не використовується для створення надбудов над ArcMap, з мінімальними трудовитратами існуючий код на VBA може бути перетворений на код на VB.NET для створення надбудов.

Приклад 2. Створення надбудови за допомогою Python у ArcGIS for Desktop 10.1

Упакований файл надбудови з розширенням .esriaddin, створеної за допомогою мови Python, включає:

За допомогою Python можна створити надбудови таких типів: кнопка; інструмент; випадаючий список; меню; панель інструментів; палітра інструментів; розширення.

Для спрощення розробки надбудов за допомогою Python можна використовувати утиліту Python Add-In Wizard, що безкоштовно розповсюджується.

Після запуску програми addinn_assistant.exe з'являється вікно вибору шляху до директорії, де зберігатиметься проект (рис. 7). Далі необхідно заповнити властивості проекту на вкладці Project Properties (рис. 8). Значення властивостей проекту буде видно при виборі надбудови через менеджер налаштувань в ArcGIS for Desktop 10.1 (рис. 9). Після натискання клавіші Save буде створенодиректорія проекту із зазначеного шляху.

Директорія проекту містить:

  • Файлconfig.xml;
  • Файлmakeaddinn.py– скрипт для пакування файлів проекту у файл надбудови .esriaddin;
  • Файлreadme.txt, який описує структуру директорії проекту;
  • ПапкуInstall, що містить головний виконуваний скрипт Python і, можливо, додатковий файли;
  • ПапкуImages, яка містить усі графічні ресурси надбудови.

Для ілюстрації типового порядку дій розглянемо послідовність кроків, які слід виконати реалізації цієї процедури.

Властивість

Опис

У готовій надбудові доступно в менеджері надбудов:

та на панелі інструментів:

Клас Python (користувацький тип) для опису обробника натискання кнопки.

Ідентифікатор контролю. Має унікальне значення усередині проекту.

Коротка підказка, що спливає при зависанні курсору миші над кнопкою ArcGIS for Desktop.

Детальний опис контролю, що з'являється під короткою підказкою при зависанні курсора миші над кнопкою.

Заголовок довідки про кнопку.

Довідка про кнопку.

Зображення кнопки (16 x 16 пікселів).

*Обов'язкове для заповнення значення властивості

  • Редагування Python скрипта. Відкрийте файл .py, який міститься в папці Install. Знайдіть клас ZoomToSelectedFeatures та відредагуйте обробник події натискання кнопки onClick(self)
    # Implementation of OnClick method of button's class def onClick(self): #Get the current map document and the first data frame. mxd= arcpy.mapping.MapDocument( 'current' ) df = arcpy.mapping.ListDataFrames(mxd)[ 0 ] # Call thezoomToSelectedFeatures() method of the data frame class df.zoomToSelectedFeatures()
  • Додавання кнопки до ArcGIS for Desktop. Запустіть скрипт makeaddinn.py з директорії проекту, який у цій директорії створить файл надбудови з розширенням .esriaddin. Подвійним клацанням по створеному файлу викличте утиліту встановлення надбудови (рис. 12). Після натискання клавіші Install Add-In файл надбудови буде скопійовано в директорію, що містить надбудови ArcGIS for Desktop 10.1 за промовчанням (у Windows Vista та Windows 7: c:\users\ \Documents\ArcGIS\AddIns\Desktop10.1). Після цього можна розмістити кнопку на панелі інструментів ArcGIS for Desktop 10.1, викликавши Менеджер налаштувань (Add-In Manager) із меню Налаштування (Customize).
  • Таким чином, починаючи з версії 10.1, мова Python може використовуватися не тільки для написання скриптів обробки даних в ArcGIS for Desktop, але і для створення надбудов. Під час розробки надбудови вибір на користь тієї чи іншої мови (.NET, Java або Python) залежить від розробника. Варто відзначити, що Python простіше у вивченні та застосуванні і в більшості випадків дозволяє закласти в надбудову той самий функціонал, що і Java/.Net. Виняток становлять два випадки: надбудова, створена за допомогою Python, не дозволяє створювати вікна, що прикріплюються, або налаштовувати користувальницький інтерфейс ArcGIS for Desktop.