Расширение функциональности MapInfo на основе SmartPanels

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


В данной статье речь пойдет об утилите SmartPanels для MapInfo, позволяющей достаточно просто интегрировать в MapInfo пользовательские специализированные приложения или приложения, расширяющие функциональность MapInfo.

Описание

В данной статье речь пойдет об утилите SmartPanels для MapInfo, позволяющей достаточно просто интегрировать в MapInfo пользовательские специализированные приложения или приложения, расширяющие функциональность MapInfo. MapInfo имеет штатный язык программирования MapBasic, который позволяет автоматизировать практически все операции MapInfo. Всем хорош MapBasic, пока дело не доходит до создания с его помощью достаточно развитого пользовательского интерфейса. Тут возникает сразу несколько проблем:

  • большая трудоемкость при создании и размещении элементов управления. В качестве примера можно привести ситуацию, когда в уже созданный диалог с большим количеством элементов управления нужно внести еще один или изменить расположение существующих;
  • невозможность создавать немодальные окна;
  • ограниченный набор элементов управления состоящий всего из 15 элементов.

С другой стороны, существует достаточно широкий класс задач, где развитой пользовательский интерфейс просто необходим. В качестве характерного примера можно привести тот же кадастровый учет, в котором необходимо отображать большое количество разнообразной информации, привязанной к одному участку. Предпринимались различные попытки обойти указанные ограничения MapBasic. К ним можно отнести создание визуальных редакторов диалогов (своеобразные IDE), реализация функционала MapInfo в среде MS Access с использованием MapX, динамическое связывание MapInfo и MS Access посредством механизма DDE и т.п. Но какого-то универсального инструмента не существовало. Точнее он был, но необходимо было быть специалистом в тонкостях создания библиотек DLL, подключения их в MapBasic, вызовам из них внешних подпрограмм и т.п., что, согласитесь, для прикладного программиста MapBasic не является характерным. Данная ситуация продолжалось до тех пор, пока не вышла версия MapInfo 9.5, которая была реализована уже на платформе .NET. В соответствующей версии MapBasic была реализована поддержка данной платформы. Но всё равно задача создания и подключения внешних библиотек оставалась нетривиальной. Все изменилось с выходом утилиты SmartPanels, разработанной специалистами компании ЭСТИ МАП, которая является официальным дистрибьютером MapInfo в России и СНГ. С её помощью стало возможным быстро подключать (регистрировать) к MapInfo пользовательские приложения, созданные на любом из языков семейства .NET. SmartPanels служит своеобразным посредником между MapInfo и внешним приложением. Для разработки прикладного решения не требуется установленного компилятора MapBasic, все что необходимо - это установленная утилита SmartPanel и среда разработки MS Visual Studio.

Примеры реализации

Для наглядного представления о том, что представляет из себя SmartPanels, приведем примеры четырех плагинов. Первые два поставляются в качестве примеров вместе со SmartPanels и представляет собой плагины общего назначения, т.е. расширяющие стандартные возможности MapInfo. Первый из них - «Вкладки» вносит полезное дополнение к пользовательскому интерфейсу MapInfo. Так при развернутых окнах, в верхней части окон появляются вкладки с именами документов и переключения между ними становится намного удобнее (в MapInfo 16 версии это уже штатный функционал, но там и режим отображения окон документов только один – во все окно). Вторым дополнением к пользовательскому интерфейсу, но который обеспечивает непосредственно SmartPanels, является возможность «прикреплять» панели к одной из сторон окна MapInfo с помощью соответствующих инструментов, отображающихся при перемещении панелей. Если ко одной стороне будет прикреплено несколько панелей, то они также будут отображаться в виде вкладок.

SmartPanels img1.png

Второй плагин – «Информация». Его задачей является отображение и редактирование информации по выбранному объекту в настраиваемой пользователем форме. При первом запуске он ничем не отличается от стандартного окна информации MapInfo.

SmartPanels img2.png

Но вызвав с помощью правой клавиши мыши контекстное меню, можно открыть визуальный редактор экранной формы и настроить представление информации в соответствии со своими потребностями. Кроме этого он позволяет определять для полей списки предопределенных значений, т.е. определять словари. Причем эти списки можно создавать как непосредственно в дизайнере форм, так и в обычных таблицах MapInfo или таблицах базы данных, указывая при этом ссылку на них в дизайнере форм. Это значительно ускоряет ввод и редактирование данных, помогая избежать многих ошибок.

SmartPanels img3.png

Остальные два плагина были созданы под конкретные проекты. Первый из них предназначен для отображения данных переписи населения. Задача состояла в представлении данных переписи населения в различных разрезах. В MapInfo имелся слой с населенными пунктами и имелась база данных с результатами переписи. Плагин выполняет две основные задачи:

  • получает от MapInfo уникальный код населенного пункта (код ОКАТО), осуществлял выборку данных из БД их интерпретацию и представление.
  • передает MapInfo команду на позиционирование окна карты в центре с выбранным пользователем в иерархическом списке населенным пунктом.

SmartPanels img4.png

При использовании специального инструмента «Информация» при выборе населенного пункта на карте происходит отображение информации в различных разрезах

SmartPanels img5.png

SmartPanels img6.png

SmartPanels img7.png

И еще один пример. В данном случае был разработан плагин для отображения панорам Yandex и Google при выборе точки на карте и использования поискового сервиса Yandex.

SmartPanels img8.png

SmartPanels img9.png

Пример создания плагина для SmartPanel

Особый интерес, конечно же, представляет возможность создания собственных плагинов. В качестве примера рассмотрим создание приложения, которое будет не просто приветствовать этот мир, но реализовать полезную функцию – клонировать окно отчета. В стандартном MapIinfo такая возможность отсутствует, в отличие от окна карты. Для начала необходимо скачать и установить SmartPanel. Утилита является абсолютно бесплатной и скачать ее можно по ссылке [1]. В терминах SmartPanel все подключаемые пользовательские приложения носят названия плагинов. В качестве примеров вместе с самой утилитой распространяются также бесплатные плагины – «Вкладки» и «Расширенная панель информации». Подробное описание этих плагинов можно найти по той же ссылке. После установки в основном меню MapInfo появится новый пункт – SmartPanel. Данный пункт содержит два элемента: Настройки и Панели. Пункт «Настройки» предназначен для основных действий с плагинами – их настройка, удаление и добавление в SmartPanel. Второй пункт просто отображает список всех зарегистрированных панелей и позволяет их скрывать и отображать.

SmartPanels img10.png

Теперь все готово для добавления своего собственного плагина. Для его создания необходимо установить MS Visual Studio. Вполне подойдет и бесплатная версия этой IDE – Community [2]. После запуска загрузчика рекомендуется выбрать пункт «Разработка классических приложений .NET»

SmartPanels img11.png

После установки MS VisualStudio можно приступать непосредственно к созданию нашего проекта: Файл – Проект – Cоздать – Библиотека классов (.NET Framework)

SmartPanels img12.png

В созданном проекте нужно указать ссылку на библиотеку SmarPanels.dll. Данная библиотека находится в корневом каталоге установки SmartPanel. Если при установке утилиты были использованы настройки по умолчанию, то эта библиотека будет находится в каталоге C:\Program Files\ESTI MAP\SmartPanels. Для создания ссылки необходимо в панели «Обозреватель решения» вызвать диалог добавления ссылки путем нажатия правой клавиши мыши на пункте «Ссылки» и далее «Добавить ссылку…». После инициализации проекта был создан класс по умолчанию Class1. Название класса можно оставить без изменений, а можно переименовать, но в любом случае этот класс должен реализовывать интерфейс SPNet.IMiPlugin. Это и есть предопределенный шаблон плагина. В контексте этого интерфейса наш класс должен реализовывать пять свойств и три метода.

  • PluginName - название плагина, которое будет отображаться в списке установленных плагинов.
  • PluginDescription - описание плагина.
  • PluginUID – глобально уникальный идентификатор плагина.
  • PluginVersion - версия плагина.
  • RestoredPanels - список панелей, местоположение которых SmartPanels будет автоматически
  • сохранять и восстанавливать при запуске.
  • Методы:
  • Init - производит инициализацию плагина.
  • LoadPluginSettings - загружает состояние плагина.
  • Dispose - освобождение используемых ресурсов при завершении приложения.

Для краткости не будем здесь приводить подробное описание этих свойств и методов. В состав дистрибутива SamrtPanel входит полная документация разработчика, где все подробно описано. Для генерации PluginUID можно воспользоваться соответствующим пунктом меню VisualStudio: Средства - Создать GUID . В конечном итоге проект должен выглядеть аналогично снимку ниже.

SmartPanels img13.png

На данном этапе плагин создан и готов к добавлению в SmartPanels, но он еще не имеет визуального представления. Добавим в проект панель для размещения на ней элементов управления: Проект – Добавить пользовательский элемент управления… . В качестве имени задайте LayoutControl.cs. На созданном элементе управления разместите группирующую панель (Panel в разделе Контейнеры панели Элементы управления), элемент управления «ListBox» и две кнопки. (раздел Стандартные элементы управления). Новый элемент управления должен выглядеть примерно так:

Файл:SmartPanels img14.png