UKR  ENG  Портал магистров ДонНТУ  ДонНТУ                     
     

Примостка Александра Сергеевна

 

Институт горного дела и геологии

Кафедра геоинформатики и геодезии

Специальность: Геоинформационные системы и технологии

 

Тема выпускной работы: "Исследование компьютерных технологий отображения пространственной информации"

Научный руководитель: профессор кафедры, доктор технических наук Шоломицкий Андрей Аркадиевич

 

АвтобиографияСсылкиБиблиотекаОтчет о поискеИндивидуальный раздел

АВТОРЕФЕРАТ

Введение:

 

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

 

Актуальность:

 

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

Задачей магистерской работы является исследование современных методов отображения картографической информации, разработка собственного картографического компонента.

 

Обзор современного состояния изученности проблемы:

 

Картографический компонент для встраивания карты в другие программы - программный компонент карты, предназначенный для совместной работы с другим программным обеспечением посредством SDK и API, используя OLE функции и Active-X компоненты. Картографический SDK (Software Development Kit)  управляет картами и их содержимым с помощью функций API, а также позволяет создавать различные приложения — от простых интерактивных схем проезда к офису до сложных геоинформационных сервисов. Картографический компонент позволяет отображать на карте базы данных.

Программа несет в себе все необходимые средства разработки картографических систем, то есть все инструменты для редактирования и обработки карт.

Одним из таких картографических компонент, в частности, является MapObject.

Цели исследования:

1) Изучить компьютерные технологии построения изображения;

2) Освоить методы построения изображения при помощи графической библиотеки OpenGL;

3) Изучить структуру ГИС;

4) Исследовать современные картографические компоненты.

Задачи исследования:

1) Создать картографический компонент;

2) Разработать ГИС при помощи картографического компонента.

Рассмотрим, что такое пространственные данные, и из чего они состоят.

Пространственные данные (географические данные, геоданные) — данные о пространственных объектах и их наборах. Пространственные данные составляют основу информационного обеспечения геоинформационных систем.

Пространственные данные обычно состоят из двух взаимосвязанных частей: координатных и атрибутивных данных.

Координатные данные определяют позиционные характеристики пространственного объекта. Они описывают его местоположение в установленной системе координат.

Атрибутивные данные представляют собой совокупность непозиционных характеристик (атрибутов) пространственного объекта. Атрибутивные данные определяют смысловое содержание (семантику) объекта и могут содержать качественные или количественные значения.

Форматы данных определяют способ хранения информации на жестком диске, а также механизм ее обработки. Модели данных и форматы данных определенным способом взаимосвязаны.

Существует большое количество форматов данных. Можно отметить, что во многих ГИС поддерживаются основные форматы хранения растровых данных (TIFF, JPEG, GIF, BMP, WMF, PCX).

Все системы поддерживают обмен пространственной информацией (экспорт и импорт) со многими ГИС и САПР через основные обменные форматы: SHP, E00, GEN (ESRI), VEC (IDRISI), MIF (MapInfo Corp.), DWG, DXF (Autodesk), WMF (Microsoft), DGN (Bentley). 

Так для хранения пространственной информации в картографическом компоненте, который планируется создать, в качестве формата пространственных данных выбран SHAPE, в силу его распространенности и простоты структуры и хранения в нем информации. Растровые данные будут храниться в формате TIFF.

Пространственные данные могут отображаться при помощи GDI.

GDI (Graphics Device Interface, Graphical Device Interface) — один из трёх основных компонентов или «подсистем», вместе с ядром и Windows API составляющих пользовательский интерфейс (оконный менеджер GDI) Microsoft Windows.

GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры.

Наряду с GDI применяется OpenGL (Open Graphics Library — открытая графическая библиотека) — спецификация, определяющая независимый от языка программирования кросс-платформенный программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.

Основные графические операции, которые  выполняет OpenGL для вывода изображения на экран. 

 1. Конструирует фигуры из геометрических примитивов, создавая математическое  описание объектов (примитивами в OpenGL считаются точки, линии, полигоны, битовые  карты и изображения). 

2. Позиционирует объекты в трехмерном пространстве и выбирает точку наблюдения  для осмотра полученной композиции. 

3. Вычисляет цвета для всех объектов.

4. Преобразует математическое описание объектов и ассоциированной с ними цветовой  информации в пиксели на экране. Этот процесс называется растеризацией (или  растровой разверткой).

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

Как уже говорилось ранее, одной из возможностей картографического компонента служит сохранение проекта карты, т.е. сохранение слоев с заданными им параметрами и растра. В качестве формата такого проекта выбран XML-формат.

XML (англ. eXtensible Markup Language) — рекомендованный Консорциумом Всемирной паутины язык разметки. XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), а также для создания на его основе более специализированных языков разметки.

Визуально структура может быть представлена как дерево элементов. Элементы XML описываются тэгами.

Названия загруженных тем в проект, их параметры (цвет, толщина линий  и т.д.), адреса загруженных тем сохраняются в файле проекта, который имеет формат XML. Такой файл имеет следующую структуру:

 

<XMLdoc>

<HEADER>

       <name_project> имя проекта    </name_project>

       <MinX> Мин. Х ограничивающей рамки текущего вида  </MinX>

       <MaxX> Макс. Х ограничивающей рамки текущего вида  </MaxX>

       <MinY> Мин. Y ограничивающей рамки текущего вида  </MinY>

       <MaxY> Макс. Y ограничивающей рамки текущего вида  </MaxY>

</HEADER>

 

<BODY>

       <Points>

          <Point1>

                 <name_point> имя точечной темы </name_point>

                 <address_point> адрес хранения точечной темы </address_point>

                 <size_point> размер точки </size_point>

                 <color_point > цвет точки </color_point>

                 <visible_point > отображается ли точечная тема в Виде </visible_point>

           </Point1>

              ……………………

           <PointN>

                 <name_point> имя точечной темы </name_point>

                 <address_point> адрес хранения точечной темы </address_point>

                 <size_point> размер точки </size_point>

                 <color_point > цвет точки </color_point>

                 <visible_point > отображается ли точечная тема в Виде </visible_point>

           </PointN>

      </Points >

 

       <Lines>

          <Line1>

                 <name_line> имя линейной темы </name_ line >

                 <address_ line > адрес хранения линейной темы </address_ line >

                 <size_ line > толщина линии </size_ line >

                 <color_ line > цвет линии </color_ line >

                <visible_line> отображается ли линейная тема в Виде </visible_line>

           </ Line 1>

              ……………………

           <LineN>

                 <name_ line > имя линенйо темы </name_ line t>

                 <address_ line > адрес хранения линеной темы </address_ line >

                 <size_ line > толщина линии</size_ line >

                 <color_ line > цвет линии</color_ line >

                 <par_ line > тип линии (сплошная или штриховая) </par_ line >

                 <factor_ line > параметры штриха </factor_line >

                 <pattern_ line > параметры штриха  </pattern_ line >

                 <visible_line> отображается ли линейная тема в Виде </visible_point>

           </ LineN>

      </Lines >

 

       <Polygons>

          <Polygon1>

                 <name_polygon> имя полигональной темы </name_ polygon >

                 <address_polygon> адрес хранения полигональной темы </address_polygon >

                 <size_ polygon > толщина границы </size_ polygon >

                 <color_border_polygon > цвет границы </color_border_polygon >

                 <color_ polygon > цвет заливки полигона  </color_ polygon >

                 <visible_ polygon > отображается ли полигональная тема в Виде </visible_ polygon >

           </ Polygon 1>

              ……………………

          <PolygonN>

                 <name_polygon> имя полигональной темы </name_ polygon >

                 <address_polygon> адрес хранения полигональной темы </address_polygon >

                 <size_ polygon > толщина границы </size_ polygon >

                 <color_border_polygon > цвет границы </color_border_polygon >

                 <color_ polygon > цвет заливки полигона  </color_ polygon >

                 <visible_ polygon > отображается ли полигональная тема в Виде </visible_ polygon >

           </ PolygonN>

      </Polygons >

 

 

</BODY>

</XMLdoc>

 

Cтруктуры исходных данных:

Название массива

Описание

Тип данных

Размер массива

Для точечных тем

Name_t_tem

Название точечной темы

Аrray of string

Количество открытых точечных тем

N_t

Количество точек в теме

Array of integer

Количество открытых точечных тем

X_t

Координаты X точек

Array of array of double

Двумерный массив:[0.. Количество открытых точечных тем-1;0.. Количество точек в теме]

Y_t

Координаты Y точек

Array of array of double

Двумерный массив:[0.. Количество открытых точечных тем-1;0.. Количество точек в теме]

Для линейных тем

Name_l_tem

Название олинейной темы

Аrray of string

Количество открытых линейных тем

N_l

Количество линий в теме

Array of integer

Количество открытых линейных тем

K_lin

Количество линий в мультилинии

Array of array of integer

Двумерный массив:[0.. Количество открытых линейных тем-1;0.. Количество линий в теме-1]

K_t_l

Количество точек в мультилинии

Array of array of integer

Двумерный массив:[0.. Количество открытых линейных тем-1;0.. Количество линий в теме-1]

In_l

Индексы первых точек линий в мультилинии

Array of array of integer

Трехмерный массив:[0.. Количество открытыхлинейных тем-1;0.. Количество линий в теме-1;0.. Количество точек в мультилинии]

X_l

Координаты X линии

Array of array of array of double

Трехмерный массив:[0.. Количество открытых линейных тем-1;0.. Количество линий в теме-1;0.. Количество точек в мультилинии]

Y_l

Координаты Y линии

Array of array of array of double

Трехмерный массив:[0.. Количество открытых линейных тем-1;0.. Количество линий в теме-1;0.. Количество точек в мультилинии]

Для полигональных тем

Name_p_tem

Название полигональной темы

Аrray of string

Количество открытых полигональных тем

N_p

Количество полигонов в теме

Array of integer

Количество открытых полигональных тем

K_pol

Количество полигонов в мультиполигоне

Array of array of integer

Двумерный массив:[0.. Количество открытых полигональных тем-1;0.. Количество полигонов в теме-1]

K_t_p

Количество точек в мультиполигоне

Array of array of integer

Двумерный массив:[0.. Количество открытых полигональных тем-1;0.. Количество полигонов в теме-1]

In_p

Индексы первых точек полигонов в мультиполигоне

Array of array of integer

Трехмерный массив:[0.. Количество открытых полигональных тем-1;0.. Количество полигонов в теме-1;0..Количество точек в мультиполигоне]

X_p

Координаты X полигонов

Array of array of array of double

Трехмерный массив:[0.. Количество открытых полигональных тем-1;0.. Количество полигонов в теме-1;0..Количество точек в мультиполигоне]

Y_p

Координаты Y полигонов

Array of array of array of double

Трехмерный массив:[0.. Количество открытых полигональных тем-1;0.. Количество полигонов в теме-1;0..Количество точек в мультиполигоне]

Для того чтобы разработать компонент в Delphi предварительно необходимо объявить класс.

Классами в Delphi называются специальные типы, которые содержат поля, методы и свойства.

Класс служит лишь образцом для создания конкретных образцов реализации, которые называются объектами. Класс состоит из полей, методов и свойств. Поля – инкапсулированные данные в классе. Процедуры и функции в классе называются методами, а свойствами – специальные атрибуты класса.

Компонент должен регистрироваться в среде Delphi, т.е. присутствовать на палитре компонент Delphi.

Разрабатываемый класс TGeoMap будет содержать следующие поля, методы и свойства.

Поля:

Layers – список слоев карты. Возможно обращение по номеру слоя

Методы:

MoveTo(X,Y:Double) – переносит центр карты в точку с заданными координатами.

LoadLayer – загрузить слой

DeleteLayer – удалить слой

NewProject – создать новый проект

SaveProject – сохранить проект

LoadProject – загрузить готовый проект

LoadTIFF – загрузить растр

DeleteTIFF – удалить растр

SetExtent – установить заданный экстент как текущий

ScaleIn, ScaleOut – изменение масштаба карты

Refresh – перерисовать карту

ShowThemeTable – отобразить атрибутивную таблицу слоя

ChangeLegend – изменить легенду слоя

SetExtentTheme – установить граничную рамку слоя как текущий экстент

Векторная алгебра карт:

Union – объединение слоев

Intersect – пересечение слоев

Clip – вырезание слоев

Свойства:

GetX,GetY – возвращает текущие координаты центра карты

GetExtent – возвращает текущий экстент карты

LayerName – возвращает имя слоя

LayerVisible – возвращает значение видимости слоя

LayerObjectCount – возвращает количество объектов на слое

 

Рис. 1 - Иллюстрация основных этапов работы приложения

(Анимация: объем - 129 КБ, размер 320х200, количество кадров - 8, задержка между кадрами - 100мс,

количество циклов повторения - неограничено)

 

Выводы и перспективы исследования:

 

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

На данном этапе выполнено чтение и отображение SHAPE-файлов средствами OpenGL. Также осуществляется работа с изображением (масштабирование, перенос, изменение экстента), работа с проектом (т.е. сохранение и чтение XML-документа).

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

 

СПИСОК ЛИТЕРАТУРЫ

1.Открытые настольные ГИС: обзор текущей ситуации. М.Ю. Дубинин, Д.А. Рыков

2. OPENGL. Суперкнига. Ричард С. Райт-мл, Бенджамин Липчак. Москва, 2006

3. Encyclopedia of GIS. Shashi Shekhar, Hui Xiong

4. Перевод спецификации Extensible Markup Language (XML) 1.0 (Second Edition) (W3C Recommendation) на русский язык

5. Валерий Фараонов "Искусство создания компонентов в Delphi"

6. OpenGL Graphics, through Applications. Robert Whitrow

7. http://sharifa.uz/static/101 Теория и практика создания ГИС