Мегаобучалка Главная | О нас | Обратная связь


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



2019-12-29 213 Обсуждений (0)
Пример простейшей программы 0.00 из 5.00 0 оценок




       Следующая программа на 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]; // поле в котором буде производиться поиск

OleMapInfo.Do ('Select * From '+Layer+' Where '+Street+' Like "%'+NameStreet+'%" Into Selection'); // SQl запрос на поиск улицы (Выбрать всё из слоя где поле = значению Edit1)

frmStreetFind.Top := 25; // помещаем форму с выводом результата в правый верхний угол, чтобы она не мешала отображению найденного объекта

frmStreetFind.Left := Screen.Width - frmStreetFind.Width;

CentroidX := OleMapInfo.Eval('CentroidX(Selection.Obj)'); //определяем центр найденного объекта по оси Х

CentroidY := OleMapInfo.Eval('CentroidY(Selection.Obj)'); // определяем центр найденного объекта по оси У

OleMapInfo.Do('Set Map Center ('+'"'+CentroidX+'",'+'"'+CentroidY+'")'); // перемещаем найденный окно карты в центр найденного объекта

OleMapInfo.Do('Set Map Scale 1 Units "cm" For 35 Units "m"');

Except

MessageDlg('Указанной улицы нет!', mtInformation, [mbOk], 0);

End;

frmGisFind.StatusBar1.Panels[1].Text := 'Найдено объектов: ' + OleMapInfo.Eval('SelectionInfo(3)') ; // в строку состояния выводим информацию о том сколько объектов найдено

end;

 

Для поиска здания используем следующий код в обработчике событий для кнопки «Найти»:

var

Ndom: String;

NameStreet: String;

CentroidX: String;

CentroidY: String;

Layer: String;

Street: String;

Hom: String;

begin

Try

NameStreet := Edit1.Text; //значение улице присваиваем переменной

Ndom := Edit2.Text; //значение дома присваиваем переменной

Layer := ComboBox1.Items[ComboBox1.ItemIndex]; // выбираем слой с домами

Street := ComboBox2.Items[ComboBox2.ItemIndex]; // выбираем поле улицы в слое с домами

Hom := ComboBox3.Items[ComboBox3.ItemIndex]; // выбираем поле дома в слоек с домами

OleMapInfo.Do ('Select * From '+Layer+' Where '+Street+' Like "%'+NameStreet+'%" and '+Hom+' = "'+Ndom+'" Into Selection'); // составляем SQL-запрос на поиск дома (Выбрать всё из слоя с домами где поле с улицей =Edit1 и поле с домом = Edit 2)

frmSQLdom.Top := 25; // помещаем окно с найденной информацией в правый верхней угол

frmSQLdom.Left := Screen.Width - frmSQLdom.Width;

CentroidX := OleMapInfo.Eval('CentroidX(Selection.Obj)');

CentroidY := OleMapInfo.Eval('CentroidY(Selection.Obj)');

OleMapInfo.Do('Set Map Center ('+'"'+CentroidX+'",'+'"'+CentroidY+'")');

OleMapInfo.Do('Set Map Scale 1 Units "cm" For 5 Units "m"');

Except

MessageDlg('Указанного дома нет!', mtInformation, [mbOk], 0);

End;

frmGisFind.StatusBar1.Panels[1].Text := 'Найдено объектов: ' + OleMapInfo.Eval('SelectionInfo(3)') ;



2019-12-29 213 Обсуждений (0)
Пример простейшей программы 0.00 из 5.00 0 оценок









Обсуждение в статье: Пример простейшей программы

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (213)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)