Разработка модуля для поиска информации в MapInfo с помощью Delphi»

Автор работы: Пользователь скрыл имя, 01 Ноября 2010 в 17:43, Не определен

Описание работы

Разработка и применение прикладных приложений на базе MapInfo

Файлы: 1 файл

Курсовая Шмак-Шмак.doc

— 2.47 Мб (Скачать файл)

     Для интеграции в программе должна присутствовать инструкция, запускающая MapInfo в фоновом режиме. Например, в программе на языке Borland Delphi можно запустить MapInfo вызовом функции CreateObject()/CreateOLEObject(). На примере будет выглядеть так:

OleMapInfo:= CreateOLEObject('MapInfo.Application');

     Программа MapInfo запускается в фоновом режиме незаметно для пользователя, не выводя заставку на дисплей.

     Разрабатываемое приложение осуществляет управление программой MapInfo, конструируя строки, представляющие операторы языка MapBasic, которые затем передаются в MapInfo посредством механизма управления объектами OLE (OLE Automation) или динамического обмена данных (DDE). MapInfo выполняет эти операторы точно так же, как если бы пользователь вводил их с клавиатуры в окно MapBasic.

     Если  необходимо открыть окно Карта, нужно использовать оператор Map языка MapBasic точно таким же образом, как в обычной MapBasic-программе. Однако в приложении с интегрированной картой должны также использовать дополнительные операторы (например, Set Next DocumentParent), чтобы окно Карта могло стать подчиненным (порожденным) окном Вашего приложения. Этот процесс известен как «переподчинение» окна. Можно переподчинить окна Карты, Списка, Графика, Отчета и Легенды. 

Рис.7. Интерфейс пользователя разработанный в Borland Delphi 

     Для отображения карты в приложении необходимо использовать оператор Set Application Window. Этот оператор объявляет, какое окно будет окном приложения. Для всех последующих окон диалогов MapInfo будет считаться, что они порождены этим другим окном. Этот пример используется в интегрированной картографии, когда окна MapInfo показываются из других приложений.

     Обычно  программа, написанная на Borland Delphi, сначала создаёт объект MapInfo Object и затем посылает MapInfo оператор Set Application Window, после чего приложение на Borland Delphi становиться порождающим окном для диалогов MapInfo. Если оператор Set Application Window не был прописан, то становиться очень трудно координировать передачу фокуса между MapInfo и Borland Delphi.

     Пересылка команд в программу  MapInfo

     После запуска программы MapInfo необходимо сконструировать текстовые строки, представляющие операторы языка Map Basic. Если установлена связь с MapInfo, используя механизм управления объектами OLE (OLE Automation), командная строка передаётся программе MapInfo методом Do.

Например:

OleMapInfo.Do ('здесь команда MapBasic');

В компоненте это реализовано процедурой ExecuteCommandMapBasic, но, в сущности, вызывается OleMapInfo.Do.

     При использовании метода Do программа MapInfo исполняет командную строку точно, так как если б ее ввели в окне команд MapBasic. Возможно передать оператор в программу MapInfo, если этот оператор допустим окне MapBasic. Не возможно переслать MapBasic-оператор Dialog, поскольку его использование не разрешено в окне MapBasic.

     Технические аспекты интегрированной  картографии

      Системные требования

- Интегрированная картография возможна только в операционной среде Windows. Можно использовать 16-битовую среду (Windows 3.1, Windows for Workgroups) или 32-битовую среду (Windows 95, Windows NT 3.51 или более поздние версии).

- Интегрированная картография требует наличия программы MapInfo 4.0 или более поздней версии. Можно использовать полную копию MapInfo или исполнительный (runtime) модуль MapInfo (специальная «усеченная» версия MapInfo, поставляемая только в качестве основы для специализированных приложений).

- Компьютер пользователя должен иметь достаточно свободной памяти для одновременной работы Вашей программы-клиента и программы MapInfo.

- Программа-клиент должна быть способна действовать в качестве контроллера механизма управления объектами OLE (OLE Automation controller) или клиента динамического обмена данных (DDE-клиента). Рекомендуется применение механизма управления объектами OLE как более быстрого и надежного метода по сравнению с динамическим обменом данных.

- Программа-клиент должна быть способна создать интерфейсные элементы (окна, формы и т.п.), в которые можно поместить окно Карты и определять Windows HWND окна

    Другие  технические замечания

- Для разработки приложения с интегрированной картой необходимо написать программу на языке, отличном от MapBasic, называемую в дальнейшем программа-клиент. Можно написать программу-клиент, используя различные популярные среды программирования, такие как Visual Basic (версия 3.0 или более поздняя), C, PowerBuilder или Delphi.

- Интегрированная Картография использует механизм управления объектами OLE (OLE Automation), но не использует Внедрение OLE. Когда Вы хотите поместить окно Карта MapInfo в приложение, не осуществляется его внедрение (embedding); напротив, происходит переподчинение окна посредством пересылки программе MapInfo серии командных строк. В результате окна MapInfo отображаются на дисплее как порожденные окна приложения.

- Интегрированная Картография не использует специализированные элементы управления VBX (Visual Basic Custom Control) или OCX. MapInfo Corporation не предоставляет какие-либо заголовочные файлы или библиотеки. (Программное обеспечение MapInfo включает в себя несколько динамически подключаемых библиотек (файлы .DLL), но к ним не обращаются непосредственно; эти библиотеки предназначены для внутреннего использования программой MapInfo).

     Объектная модель механизма  управления объектами OLE

     На  следующей диаграмме приведена схема объектной модели MapInfo (Рис. 8.). 

       

     Рис.8. Схема объектной модели MapInfo. 

- Объект Application (Приложение) представляет работающий экземпляр MapInfo.

- Семейство MBApplications (MapBasic-Приложения) представляет список MapBasic-приложений, работающих в данный момент.

-  Семейство MBGlobals (Глобальные переменные в среде MapBasic) представляет список глобальных переменных, декларированных одним из работающих MapBasic-приложений.

     Пример  простейшей программы

      Следующая программа на Borland Delphi даст представление о том, как легко встроить окно MapInfo в другую программу.

     Сначала, создадим новый проект Delphi. В процедуре FormCreate добавим следующие строки:

     Const

       SW_SHOWNORMAL = 1;

     var

       OleMapInfo: Variant;

       MsgString : String;

       sWinHand : String;

     begin

       OleMapInfo := CreateOLEObject('MapInfo.Application');// запуск MapInfo.

       Str(pnlMap.Handle, sWinHand);// Указываем место где будет отображаться карта.

    MsgString := 'Set Next Document Parent ' + sWinHand + ' Style 1';// переподчинение   окна.

       OleMapInfo. Do(MsgString); //Пересылка команд в программу MapInfo

      MsgString := 'Set Application Window ' + sWinHand; // становление порождающего окна для диалогов MapInfo.

       OleMapInfo.Do(MsgString); //Пересылка команд в программу MapInfo

      OleMapInfo.Do('Set Window Info Parent '+IntToStr(frmGis_Spravka.handle)); // Подключение окна диалога Информация.

    OleMapInfo.Do('Set Window Ruler Parent '+IntToStr(frmGis_Spravka.Handle)); // Подключение окна диалога Рулетка

     end;

     Как только запустили программу на Delphi, она запускает MapInfo, которая создает окно Карты. При этом MapInfo действует как «скрытый» сервер, а окно Карты ведет себя, как порожденное программой Delphi. [3] 
 
 
 

2.2. Разработка  ГИС

     Для разработки интегрированной среды будем использовать язык программирования Borland Delphi 7 и геоинформационную систему MapInfo.

      Delphi является среди широкого круга пользователей популярной системой объектно-ориентированного программирования, основу которой составляет язык Object Pascal.

      Delphi – это система объектно-ориентированного визуального программирования. Приложения (прикладные программы) Delphi являются интерактивными системами, в которых для организации взаимодействия между пользователем и программой используются методы (подпрограммы), управляемые событиями.   

     MapInfo Professional – географическая информационная  система (ГИС), предназначенная для  сбора, хранения, отображения, редактирования  и анализа пространственных данных.

      Разрабатываемая ГИС на основе MapInfo будет решать следующие задачи:

- находить улицы;

- находить дома;

- подписывать дома и улицы;

- выдавать список улиц и список домов принадлежащей улице.

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

    Для интеграции MapInfo и Delphi создадим новый проект Delphi. В процедуре FormCreate добавим следующие строки:

     Const

       SW_SHOWNORMAL = 1;

     var

       OleMapInfo: Variant;

       MsgString : String;

       sWinHand : String;

     begin

       OleMapInfo := CreateOLEObject('MapInfo.Application');// запуск MapInfo.

       Str(pnlMap.Handle, sWinHand);// Указываем место где будет отображаться карта.

    MsgString := 'Set Next Document Parent ' + sWinHand + ' Style 1';// переподчинение   окна.

    LoadMap := ExtractFilePath(Application.ExeName);

    OleMapInfo. Do('Run Application"'+LoadMap+'map\map.wor'+'"'); // загрузка рабочего набора

       OleMapInfo. Do(MsgString); //Пересылка команд в программу MapInfo

      MsgString := 'Set Application Window ' + sWinHand; // становление порождающего окна для диалогов MapInfo.

       OleMapInfo.Do(MsgString); //Пересылка команд в программу MapInfo

      OleMapInfo.Do('Set Window Info Parent '+IntToStr(frmGis_Spravka.handle)); // Подключение окна диалога Информация.

    OleMapInfo.Do('Set Window Ruler Parent '+IntToStr(frmGis_Spravka.Handle)); // Подключение окна диалога Рулетка

     end;

    После создания процедуры FormCreate, запускаем приложение (Рис. 9.).  

      Рис. 9. Готовое приложение 

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

Поиск улиц, зданий

      Искать  дом или улицу будем посредством SQL-запроса в атрибутивных данных карты. К примеру, для поиска улицы напишем следующий код в обработчике событий для кнопки «Найти»:

var

  NameStreet: String;

  CentroidX: String;

  CentroidY: String;

  Layer: String;

  Street: String;

  Hom: String;

begin

  Try

    NameStreet := Edit1.Text;  //информацию введённую в поле поиска улицы внесём в переменную

Layer := ComboBox1.Items[ComboBox1.ItemIndex]; //слой в котором будет производиться поиск

Street := ComboBox2.Items[ComboBox2.ItemIndex]; // поле в котором буде производиться поиск

Информация о работе Разработка модуля для поиска информации в MapInfo с помощью Delphi»