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

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

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

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

Файлы: 1 файл

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

— 2.47 Мб (Скачать файл)
y">    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)') ;

Создание  подписей для домов  и улиц

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

begin

  try

    layerStr := ComboBox1.Items[ComboBox1.ItemIndex]; // выбор слоя для подписи улицы

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

    PoleStr := ComboBox2.Items[ComboBox2.ItemIndex]; // выбор поля для подписи улицы

    PoleHom := ComboBox4.Items[ComboBox4.ItemIndex]; // выбор поля для подписи дома

    OleMapInfo.Do('Set Map Layer '+layerStr+' Label Font ("Arial CYR",1,9,16711680) With '+PoleStr+''); // посылаем команду ( подписать на слое улицы шрифтом Arial CYR, жирным красным цветом) информацию для подписи взять из поля подписи улицы

    OleMapInfo.Do('Set Map Layer '+layerStr+' Label Auto On'); // включить подпись

    OleMapInfo.Do('Set Map Layer '+layerHom+' Label Font ("Arial CYR",1,9,255) With '+PoleHom+''); // посылаем команду ( подписать на слое дома шрифтом Arial CYR, жирным синим цветом) информацию для подписи взять из поля подписи домов

    OleMapInfo.Do('Set Map Layer '+layerHom+' Label Auto On'); // включить подпись

    Close;

  except

end;

Получение списка улиц и списка домов принадлежащей данной улице

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

var

  sMsgString  : String;

  sWinHand,s  : String;

  d,i           : byte;

begin

  ListBox1.Items.Clear;

  sMsgString:='Select '+ComboBox2.Items[ComboBox2.ItemIndex]+' from '+ComboBox1.Items[ComboBox1.ItemIndex]+' group by '+ComboBox2.Items[ComboBox2.ItemIndex]+' order by '+ComboBox2.Items[ComboBox2.ItemIndex]+' into TMP';

  oleMapInfo.Do(sMsgString); // запрос на получение списка из таблицы и поля, результат отсортировать по имени

  s:=olemapinfo.eval('TableInfo("TMP", '+inttostr(8)+')');

  d:=strtoint(s);

  for i:=1 to d do

  begin

    oleMapInfo.Do('Fetch Rec '+ IntToStr(i) +' From TMP');

    sMsgString := 'tmp.'+ComboBox2.Items[ComboBox2.ItemIndex]+'';

    S := oleMapInfo.Eval(sMsgString);

    listbox1.Items.Add(s); // вывести результат запроса в таблицу

  end; 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.3. Инструкция  пользователя

     Для поиска необходимого дома выбираем на панели инструментов кнопку . В открывшемся окне указываем в поле «Таблица» указываем нужную таблицу, по которой мы будем искать нужный нам дом. В «Поле улицы» указываем нужную улицу. Затем указываем «Поле дома». В значениях мы пишем «Название улицы» и «Номер дома». Затем нажимаем кнопку «Найти» и у нас отображается найденный дом выделенным цветом. (Рис. 10.) 

     

Рис. 10 Окно с найденным домом 

     Для поиска необходимой улицы выбираем кнопку и в открывшемся окне в поле «Таблица» указываем таблицу. Затем указываем поле улицы по которому мы будем искать. В значениях указываем улицу. Далее нажимаем кнопку «Найти» и на экране у нас отображается найденная улица в центре окна. (Рис. 11.)

Рис. 11. Окно с найденной улицей 

     Для того чтобы подписать улицы и дома нажимаем кнопку . Указываем в настройках шрифта таблицу с улицами. Затем указываем поле в которой которой хранится информация для подписей. Для подписей домов узазываем таблицу с домами и указываем из какого поля будут подписываться дома. Затем нажимаем кнопку «OK» и мы видим, что улицы подписываются красным цветом, а дома синим. При повторном нажатии на кнопку подписи исчезают. (Рис. 12.)

     

     Рис. 12. Окно с подписями 

      Чтобы вывести список улиц, нажимаем кнопку , затем указываем с какого слоя нам брать список, и указываем поле. После этого в списке выбираем любую улицу, и она отображается у нас на экране. (Рис. 13.) 

          

Рис. 13. Окно со списком улиц

     Для того чтобы вывести список с домами также нажимаем кнопку , затем выбираем, с какого слоя нам брать список, и указываем поле. После этого в списке выбираем улицу и у нас будут отображаться дома, принадлежащей указанной улице. (Рис. 14.)

      

     

     Рис. 14. Окно со списком домов 

Вывод:

      Пакетом MapInfo можно управлять, используя  языки программирования, отличные от языка MapBasic (встроенного в MapInfo языка программирования). Написать интегрированное приложения можно на нескольких языках программирования, например, C/C++, Visual Basic, Borland Delphi.

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

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

 

Заключение 

     Геоинформационные технологии  бурно развивающееся  направление современных информационных технологий.

     С помощью ГИС решается ряд задач:

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

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

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

- С помощью ГИС определяются взаимосвязи между различными параметрами (например, почвами, климатом и урожайностью сельскохозяйственных культур), выявляются места разрывов электросетей.

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

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

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

Список  литературы 

1. Бугаевский Л. М. Геоинформационные системы / Л. М. Бугаевский, В. Я. Цветков. – Учебное пособие для вузов. – М.:  «Златоуст», 2000. - 222с.: ил. 28.

2. Капралов Е. Г. Геоинформатика / Е. Г. Капралов, А. В. Кошкарев, В. С. Тикунов / Под редакцией В. С. Тикунова. – М.: Издательский центр «Академия», 2005. – 480с., с. цв. ил.:ил.

3. Руководство пользователя Map Basic

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