Cтатьи и комментарии

Быстрая разработка ГИС-приложений с помощью GIS ToolKit или собственная ГИС за час

Д.А. Вицко системный аналитик, ведущий программист ЗАО КБ "Панорама"

В современной сфере разработки программного обеспечения огромное распространение получила концепция быстрой разработки приложений RAD (rapid application development). Это концепция создания средств разработки программных продуктов, уделяющая особое внимание быстроте и удобству программирования, созданию технологического процесса, позволяющего программисту максимально быстро создавать компьютерные программы. GIS ToolKit полностью вписывается в процесс разработки, строящийся в соответствии с принципами концепции RAD.

GIS ToolKit, как средство разработки, отвечает основным требованиям RAD, а его компоненты могут в виде отдельных блоков быть интегрированы в схему бизнес-логики разрабатываемой системы.

Давайте потратим час времени и построим свою геоинформационную систему на базе GIS ToolKit!

В GIS ToolKit есть два компонента доступа к электронной карте - это MapView и его брат-близнец MapScreen. Данные компоненты выполняют открытие картографической информации, ее визуализацию, пересчет координат и т.д.

Практически все компоненты из состава GIS ToolKit осуществляют доступ к пространственной информации именно через MapView (или MapScreen). Поэтому в первую очередь на форму помещаем компонент MapView (MapScreen).

Примечание: здесь и далее компоненты и классы GIS ToolKit будут называться обобщенными именами, например, MapView, тогда как в GIS ToolKit Active этот компонент называется axMapView, а в GIS ToolKit для Borland - TMapView. Однако, смысл повествования от этого не меняется.

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

Кстати, открыть карту в MapView и установить некоторые параметры отображения можно уже в режиме дизайна, даже не компилируя приложение, а просто, установив значения определенных свойств компонента MapView.

Добавим функциональности - перенесем на нашу форму еще несколько компонент GIS ToolKit.

Каждый компонент GIS ToolKit - это "кирпичик" в фундаменте нашего ГИС-приложения, и каждый из них отвечает за определенную роль. Например, MapObj - это компонент доступа и управления отдельно взятым векторным объектом электронной карты, MapFind - компонент поиска объекта на карте, MapConvertor - средство импорта/экспорта векторной карты в обменные форматы (в том числе формат SXF) и т.д.

Всего в Вашем распоряжении почти полсотни компонентов на все случаи жизни, около сотни классов и более тысячи функций API-доступа к ГИС-ядру GIS ToolKit. Поэтому не будем тратить время на их подробное рассмотрение. Все компоненты взаимодействуют с главным компонентом доступа к пространственным данным MapView (или MapScreen), а также между собой. Инициация выполнения заложенных в них операций в коде программы занимает всего несколько строк, или, как в случае с нашим OpenMapDialog, - вообще всего одну инструкцию.

Такие компоненты-"полуфабрикаты" как MapObj или MapFind предоставляют свои сервисы программисту посредством своих методов, свойств и событий. Но, наибольший функционал содержится, само собой, в компонентах вызова специализированных картографических диалогов. Каждый такой диалог - это практически отдельный функциональный модуль в проектируемом ГИС-приложении. И эти функциональные модули предназначены для решения типичных задач, связанных с пространственными данными, что называется "от начала и до конца".

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

Мы пока ограничимся следующими компонентами:

MapSection - Компонент построения профиля рельефа;
Map3DNavigator - Компонент формирования трехмерной модели местности;
MapMiniMap - Компонент навигации по карте;
MapSelectDialog - Компонент выбора условий поиска/отображения;
MapRsc - Компонент доступа к классификатору объектов электронной карты;
MetricDialog - Диалог создания и редактирования метрики объекта карты;
SemanticDialog - Диалог визуализации и изменения семантики выделенных объектов карты или объектов слоя классификатора;
MtrLegendTree - Компонент легенды матричной карты;
MapThematic - Компонент построения тематических карт;
MapPrintDialog - Диалог настройки параметров и печати карты;
MapObj - Компонент доступа к объекту векторной карты;
MapFind - Компонент поиска объектов векторной карты.

По мере их добавления в наш проект будем их связывать с нашим MapView

Добавляем для каждого режима свой элемент управления в интерфейсе (например, кнопки в панели управления нашего приложения).

И в обработчике соответствующего элемента управления описываем лаконичный код вызова нужного режима.

Помимо диалогов, реализованных в виде отдельных компонентов, в GIS ToolKit имеется множество диалогов, вызываемых посредством обращения к определенным методам компонентов и классов или просто отдельно взятыми функциями.

Так, например, такие востребованные задачи, как установка собственных параметров проекции и системы координат для отображения карты или работа в местной системе координат, также доступны в GIS ToolKit. Установка параметров для этих задач тоже выполняется с помощью диалогов, а их вызов осуществляется соответствующими методами MapView (в данном случае это методы CurrentProjectionParametersDialog и WorkSystemParametersDialog).

Не будем описывать процессы вызова каждого из диалогов или старта режимов. Все они в той или иной степени схожи между собой и не представляют особой сложности даже для не очень опытного программиста. Давайте посмотрим, что же у нас получилось в итоге.

Мы научили наше приложение:

- выполнять открытие и отображение пространственных данных (MapView или MapScreen) с возможностью настройки состава отображения (MapSelectDialog);
- выполнять поиск объектов на карте (MapFind или MapSelectDialog) и осуществлять доступ к их метрике, семантике и внешнему виду (MapObj);
- редактировать координаты объектов (MetricDialog), их семантические характеристики (SemanticDialog) и внешний вид (MapSelectObjectRsc);
- настраивать классификатор объектов векторной карты (MapRsc);
- выводить всю или отдельный участок карты на печать с настройкой параметров печати (MapPrintDialog);
- использовать интерактивные средства навигации по карте (MapMiniMap);
- выполнять сортировку объектов карты (MapView);
- выполнять экспорт картографических данных в формат SXF/TXF (MapConvertor);
- выполнять импорт картографических данных из формата SXF/TXF (MapConvertor);
- выполнять обновление картографических данных из файла формата SXF/TXF (MapView);
- выполнять добавление к открытой электронной карте дополнительных пространственных данных: растровых космических и аэрофотоснимков, матриц рельефа, матриц качеств и слоев, картографической информации в векторном виде (MapView и OpenMapDialog);
- осуществлять построение трехмерных моделей местности (Map3DNavigator), при этом в составе открытой карты желательно наличие матрицы рельефа;
- строить профиль рельефа по заданной линии-разрезу (MapSection, в составе карты должна быть открыта матрица рельефа);
- формировать и показывать легенду матрицы (MtrLegendTree).

Мы также добавили в наше приложение возможность построения тематических карт (MapThematic). Тематическое картографирование - это наиболее наглядное представление различных статистических данных, имеющих пространственную привязку. Данные могут быть взяты как из самой карты (например, из семантики объектов), так и из внешней базы данных. Поддерживаются такие базы данных как Oracle, Microsoft SQL Server, MS Access, MS Excel, dBase, Paradox и другие.

Но, даже такой насыщенный и с первого взгляда сложно реализуемый модуль, как тематическое картографирование, в приложение добавляется также легко, как и всех рассмотренных выше, - на "раз-два-три":

1. положили компонент на форму;
2. связали его с компонентом доступа к карте (MapView);
3. инициировали старт режима в обработчике элемента управления.

Запуск тематического картографирования выполняется всего одной инструкцией в коде программы: "axaxMapThematic.ExecDialog()".

Резюме.
Итак, мы потратили час времени, написали порядка 30 строк программного кода и получили на выходе вполне серьезную геоинформационную систему. Конечно же, далеко не всегда перед разработчиками стоят такие типовые задачи, как были описаны, но мощности и возможностей ГИС-инструментария GIS ToolKit хватит на реализацию самых хитроумных желаний Ваших заказчиков. При этом тратить силы и время на простые и типичные проблемы Вам не придется, а все возникающие вопросы можно обсудить непосредственно с разработчиками GIS ToolKit на форуме или обратившись в техподдержку ЗАО Конструкторского бюро "Панорама".

Примечание.
В данной статье показан пример создания приложения с помощью GIS ToolKit 11 версии. В предыдущих версиях GIS ToolKit некоторых описанных возможностей нет.
В примере использовался GIS ToolKit Active в среде программирования Microfost Visual Studio 2008. Однако, описанные возможности полностью справедливы и для версии GIS ToolKit для Delphi, Builder, Borland Developer Studio и Code Gear.