3 (62) 2012 Персонализиране на ArcGIS for Desktop 10.x

Иван Мехедов, Esri CIS, e-mail: [email protected], тел.: +7 (495) 988-34-81 вътр. 143

Персонализиране на ArcGIS for Desktop 10.x

Започвайки с версия 10.0,добавките(eng. add-inns) са нов начин за персонализиране на ArcGIS for Desktop. Добавката е единичен компресиран .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 на 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 (ако проектът за добавка ArcGIS Desktop не присъства в избираемите типове проекти, когато създавате нов проект, уверете се, че е избрана версията на .NET Framework 3.5).

Изходните материали от сайта съдържат:

  • VBA проектни файлове (папка VBA Form)
  • Проектни файлове на VB.NET (папка с код)
  • допълнителни файлове (допълнителна папка)

В процеса на конвертиране на проект от VBA към VB.NET ще ви трябва:

  • пресъздайте изходната форма
  • заменете VBA кода с VB.NET.

  1. Създайте нов проект във Visual Studio (Visual Basic -> ArcGIS -> Добавки за настолен компютър-> ArcMap добавка). Наименувайте го CountyInfoAddIn и щракнете върху OK;
  2. Ще се появи прозорецът на съветника за добавки (Фигура 2). Попълнете всички задължителни полета в него и изберете типа на добавката (в нашия пример добавката има тип „Бутон“ (бутон)) (фиг. 3). След натискане на бутона "Край" ще бъде създаден нов проект;
  3. Добавете нов формуляр към проекта (Add -> New Item -> Windows Form) и го наименувайте Form1. Задайте размера на формата на 319 на 223 точки. Задайте стойности на следните свойства на формуляра: Текст = Информация за окръг; най-горе=вярно. Последното свойство трябва да бъде зададено наtrue, за да може формата винаги да се показва в горната част на главния прозорец на ArcMap;
  4. Добавете контроли (controls) към формата - етикети (Label), които ще показват информация за избрания окръг, като ги наименувате по следния начин: lblCountyName (име на регион), lblStateName (име на щат), lblArea (област), lblPopulation (население). Във всяка контрола оставете стойността на свойството Text празна и задайте свойството Autosize наtrue. Преди всяка контрола поставете контролен етикет (Label), във всеки от тях задайте подходящата стойност на свойството Text:Име на окръг(име на регион),Име на щат(име на щат),Площ(област),Население(население);
  5. Добавете 2 бутона към формата - btnRead и btnClose - със стойността на свойството Text - съответноReadDataиClose.

На фиг. Фигура 4 показва VBA формуляр отляво и модифициран VB.NET формуляр отдясно.

Повторното изграждане на формуляри е най-трудоемката част от превода на код от VBA към VB.NET, защото трябва да се направи ръчно. Въпреки това, както е показано по-долу, не-GUI кодът може да бъде преведен от VBA към VBA.NET безспециални времеви разходи.

Превод на код от VBA към VB.NET

Следващите 4 грешки се дължат на факта, че във VBA свойството на етикет контролата, която съхранява надписа, се нарича Caption, а във VB.NET се нарича Text. За да елиминирате грешки, е необходимо да замените всички срещания на .Caption с .Text (тези събития се срещат в редовете lblCountyName.Caption = ..., lblStateName.Caption = ..., lblPopulation.Text = ..., lblArea.Text = ...).

И накрая, последната грешка е причинена от факта, че дефинициятаThisDocument, налична от проекта VBA, не е налична в проекта VB.NET. Тя трябва да бъде заменена с дефиницията My.ArcMap.Document.

След като всички грешки бъдат коригирани, компилаторът ще издаде предупреждение: „„pFCursor“ се предава, преди да бъде присвоен“. Намерете реда „Dim pFCursor като IfeatureCursor“ и добавете „= Нищо“ в края му.

Това завършва процеса на превод на проекта от VBA към VB.NET, след като проектът бъде изграден (меню Build), файлът на добавката CountyInfoAddIn.esriAddIn ще се появи в директорията CountyInfoAddIn\bin\Debug.

Работа с добавка

Стартирайте ArcMap 10.0 и отворете проекта USA.mxd, намерен в изходния код. От менюто Персонализиране извикайте диспечера на добавките. В мениджъра на настройките, който се отваря, щракнете върху бутона Персонализиране и в появилия се диалогов прозорец щракнете върху бутона Добавяне от файл. Изберете добавката CountyInfoAddIn.esriAddIn, която сте създали, и я инсталирайте. В раздела Команди, в списъка Категории, изберете Контроли за добавки, след това в списъка Команди изберете графиката на бутона My Form (Фигура 6), съответстваща на добавката CountyInfoAddIn, и я плъзнете в лентата с инструменти на ArcMap.

В основния прозорец на ArcMap изберетенякой регион и щракнете върху бутона за повикване за новодобавената добавка. Това ще покаже формуляр с бутони Четене на данни и Отказ. Щракнете върху бутона Четене на данни и формулярът ще покаже информация за избрания окръг. Затворете формата, като щракнете върху бутона Отказ.

Такав този раздел видяхме как да създадем проста добавка за приложение ArcGIS for Desktop 10.x. Разбира се, неговата функционалност може да бъде значително разширена и е ограничена само от възможностите на VB.NET. Повече информация за създаването на добавки можете да намерите на уебсайта на Esri Resource Center на страницата Esri ArcObjects за .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). След това трябва да попълните свойствата на проекта в раздела Свойства на проекта (фиг. 8). Стойностите на свойствата на проекта ще бъдат видими, когато добавката бъде избрана чрез мениджъра на настройките в ArcGIS for Desktop 10.1 (Фигура 9). След като натиснете бутона Запиши, aдиректория на проекта по посочения път.

Директорията на проекта съдържа:

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

За да илюстрирате типичен курс на действие, помислете за последователността от стъпки, които трябва да се следват, за да се приложи тази процедура.

Свойство

Описание

В готовата добавка, налична в мениджъра на добавки:

и на лентата с инструменти:

Python клас (персонализиран тип) за описание на манипулатора за щракване върху бутон.

Контролен идентификатор. Има уникална стойност в рамките на проект.

Кратка подсказка, показвана, когато курсорът на мишката се задържи над бутон в ArcGIS for Desktop.

Подробно описание на контролата, която се появява под кратката подсказка, когато курсорът на мишката задържи над бутона.

Помощно заглавие на бутона.

Помощ за бутон.

Изображение на бутон (16 x 16 точки).

*Необходима стойност за свойството

  • Редактиране на скрипт на Python. Отворете файла .py, който се намира в папката Install. Намерете класа ZoomToSelectedFeatures и редактирайте манипулатора на събития при щракване върху бутона onClick(self)
    # Реализация на метода OnClick от класа на Button def onClick(self): #Вземете текущия документ на картата и първия кадър с данни. mxd= arcpy.mapping.MapDocument( 'current' ) df = arcpy.mapping.ListDataFrames(mxd)[ 0] # ИзвикайтеzoomToSelectedFeatures() метод на класа рамка на данни df.zoomToSelectedFeatures()
  • Добавяне на бутон в ArcGIS for Desktop. Стартирайте скрипта makeaddinn.py от директорията на проекта, който ще създаде файл с добавка с разширение .esriaddin в същата директория. Щракнете двукратно върху създадения файл, за да извикате помощната програма за инсталиране на добавката (фиг. 12). След натискане на бутона Инсталиране на добавката, файлът на добавката ще бъде копиран в директорията, съдържаща добавките по подразбиране ArcGIS for Desktop 10.1 (на Windows Vista и Windows 7: c:\users\\Documents\ArcGIS\AddIns\Desktop10.1). След това можете да поставите бутона в лентата с инструменти на ArcGIS for Desktop 10.1, като извикате диспечера на добавки от менюто Персонализиране.
  • По този начин, започвайки с версия 10.1, езикът Python може да се използва не само за писане на скриптове за обработка на данни в ArcGIS for Desktop, но и за създаване на добавки. Когато разработвате добавка, изборът на кой език (.NET, Java или Python) зависи от разработчика. Струва си да се отбележи, че Python е по-лесен за научаване и използване и в повечето случаи ви позволява да поставите същата функционалност в добавката като Java / .Net. Има две изключения: добавка, създадена с Python, не ви позволява да създавате докинг прозорци или да персонализирате потребителския интерфейс на ArcGIS for Desktop.