RUS  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

Координати 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 ..;0.. Кількість ліній в темі-1; 0 .. Кількість точок у мультилиний]

X_l

Координати X лінії

Array of array of array of double

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

Y_l

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

Array of array of array of double

Тривимірний масив: [0 .. Кількість відкриттів лінійних тим-1; 0 ..;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 Теорія і практика створення ГІС