Визуализация геофизических данных

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования

«Гомельский государственный университет имени Франциска Скорины»

Математический факультет

Кафедра математических проблем управления


КУРСОВАЯ РАБОТА

Визуализация геофизических данных


Исполнитель:

Британов Евгений Александрович


Гомель 2014

Содержание


Введение

Постановка задачи

. Назначение разработанных программных средств

.1Визуализации иклинометрии

.2 Визуализация каротажа

.Встроенные типы данных Oracle

. Структура баз данных, используемых в приложении

.1 Структура базы данных, разработанной для визуализации каротажа

.2 Структура баз данных для визуализации инклинометрии

. Взаимодействие пользователя с приложением. Алгоритм работы приложения

.1 Взаимодействие пользователя с экранной формой для каротажа

.2 Взаимодействие пользователя с экранной формой для инклинометрии

Список использованных источников

Приложения


Введение


В настоящее время с помощью современных технологий осуществляются геофизические исследования скважин.

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

Они требует тщательной проработки полученных данных о скважине и получении по средствам этого дополнительных необходимых сведений, облегчающих дальнейшую работу.


Постановка задачи

программный иклинометрия каротаж oracle

Целью курсовой работы являлось разработать приложение в среде Delphi, взаимодействующее с базами данных в СУБД Oracle, которая содержит различные геофизические данные и отображает их в виде графиков. В частности, требовалось разработать две экранные формы: форма инклинометрии и для каротажа.

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

Данные инклинометрии скважины используются:

для обеспечения бурения скважины в заданном направлении

при определении истинных глубин залегания геологических объектов,

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

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

В ходе выполнения курсовой работы были решены следующие задачи:

) Разработана база данных для каротажа

) Проработана структура базы данных для инклинометрии

) Добавлена таблица в базу данных для инклинометрии, содержащая поля, необходимые для отображения карты

) Разработаны алгоритмы отображения графиков для инклинометрии

) Разработан алгоритм отображения графиков для каротажа

) Разработан алгоритм отображения глубин для инклинометрии в зависимости от видимой для пользователя области части графика

) Для перечисленных выше задач разработаны собственные компоненты и классы с собственными методами и свойствами.

) Была налажена работа между приложением и СУБД Oracle.


1. Назначение разработанных программных средств


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


1.1Визуализации иклинометрии


Инклинометрия представлена в приложении в виде двух графиков, определяющий положение скважины в пространстве, отображенные в декартовой системе координат на плоскости.

Для определенности обозначим ось абсцисс скважины ОХ, ось ординат - ОY, ось аппликат - OZ.

Первый график отображается следующим образом. Ординаты графика представляют собой ось OZ, т.е. непосредственно глубины скважины. Абсциссы представлены смещениями скважины от перпендикуляра к плоскости земли, осями OX и OY.

Второй график представлен проекцией пространства XYZ на плоскость XY, где ОX соответствует оси абсцисс графика, а ОY - ординатам графика.

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

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

отображать их рядом с соответствующей им точкой

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

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

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

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


.2 Визуализация каротажа


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

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

Также реализована возможность, в случае отсутствия характеристик для определенного метода каротажа, при помощи диалога с пользователем, указать местоположение текстового файла с нужной информацией.

Обе части приложения, как было сказано раннее, получают данные для работы из таблиц баз данных. Базы данных находятся в СУБД Oracle.

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


Рисунок 1


2.Встроенные типы данных Oracle


VARCHAR2 (размер) [BYTE|CHAR]

Символьное поле переменной длины с максимальной длиной до 4000 байт, минимальная длина 1 байт. Модификатор CHAR означает, что для определения длины строки используется так называемая символьная семантика; BYTE означает, что для этой цели используется байтовая семантика.

NVARCHAR2 (размер)

Поле переменной длины с максимальным размером 4000 байт.

NUMBER (p,s)

Числовой столбец с заданными разрядностью (p) и масштабом (s). Разрядность может изменяться в диапазоне от 1 до 38, а масштаб - от -84 до 127.

LONG

Поле данных переменной длины, размер поля до 2 Гбайт

DATE

Значения дат, начиная с 1 января 4712 г. до н.э. и заканчивая 31 декабря 9999 г.

BINARY_FLOAT

-битовое число с плавающей точкой.

BYNARY_DOUBLE

-битовое число с плавающей точкой.

TIMESTAMP (точность секунд)

Представляет дату и время (год, месяц, число; часы, минуты, секунды и доли секунд). Значение точности секунд может изменяться от 0 до 9; другими словами, обеспечивается точность до одной миллиардной секунды. Значение по умолчанию равно 6 (одна миллионная секунды).

TIMESTAMP (точность_секунд) WITH TIME ZONE

Содержит значение TIMESTAMP, к которому добавлено смещение, связанное с часовым поясом.

TIMESTAMP (точность_секунд) WITH LOCAL TIME ZONE

Этот тип данных похож на TIMESTAMP (точность секунд) WITH TIME ZONE за исключением того, что:

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

) При выборке данных пользователь будет видеть эти данные в пересчете на часовой пояс сеанса.

INTERVAL YEAR (разрядность_года) TO MONTH

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

INTERVAL DAY (разрядность_дней) TO SECOND (точность секунд)

Хранит значение интервала времени, выраженное в днях, часах, минутах, секундах и долях секунды. Значение разрядность дней лежит в интервале от 0 до 9. Значение по умолчанию равно 2. Значение точность секунд аналогично значению точность секунд для типа данных TIMESTAMP. Оно также лежит в интервале от 0 до 9, а значение по умолчанию равно 6.

RAW (размер)

Поле переменной длины (до 2000 байт).

LONG RAW

Поле переменной длины (до 2 Гбайт), используемое для хранения двоичных данных.

ROWID

Представление (в кодировке base-64) в виде строки уникального адреса строки соответствующей таблицы. Этот адрес должен быть уникальным для всей базы данных.

UROWID [(размер)]

Строка (в кодировке base-64), представляющая логический адрес строки индекс-таблицы; длина до 4000 байт.

CHAR (размер) [BYTE|CHAR]

Символьное поле фиксированной длины, определяемой значением размер.

Минимальное значение длины равно 1 байт, максимальное - 2000 байт. Параметры BYTE и CHAR указывают на применение байтовой или символьной семантики, как и VARCHAR2.

NCHAR (размер)

Поле для размещения символов фиксированной длины (состоящих из нескольких байтов). Максимальный размер поля - 2000 байт. Значение по умолчанию - 1 байт.

CLOB

Символьный большой объект, содержащий однобайтовые или многобайтные символы; поддерживает как однобайтные, так и многобайтные наборы символов. Максимальный размер объекта равен (4 Гбайт-1)*DB_BLOCK_SIZE.

Аналогичен CLOB за тем исключением, что в базу данных вместо символов из наборов символов фиксированной длины или переменной длины записываются символы Unicode. Максимальный размер объекта равен (4 Гбайт - 1)*DB_BLOCK_SIZE.

Двоичный большой объект. Максимальный размер объекта равен равен (4 Гбайт - 1)*DB_BLOCK_SIZE.

BFILE

Указатель на большой двоичный файл, хранящийся вне базы данных. Двоичные файлы должны быть доступны с сервера, на котором выполняется экземпляр Oracle. Максимальный размер объекта равен 4 Гбайт.


3 Структура баз данных, используемых в приложении


В результате выполнения курсовой работы, была разработана база данных karotaj, разработана её структура и структура самих таблиц.

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


3.1 Структура базы данных, разработанной для визуализации каротажа


Состав таблиц базы данных

В данной таблице перечислены все таблицы базы данных:


Наименование таблицыОписаниеWELL_VIDСодержит сведения о видах каротажаWELL_METODСодержит сведения о методе каротажаWELL_KRIVСодержит сведения о графиках, отображающих характеристики каротажа. Связана с WELL_VID и WELL_METOD

Структура разработанных таблиц


Таблица WELL_VID:

Наименование поляТип поляОписаниеCODNUMBERПервичный ключ. Идентификатор записиNAMEVARCHAR2Наименование вида отображения каротажа

Таблица WELL_METOD:

Наименование поляТип поляОписаниеCODNUMBERПервичный ключ. Идентификатор записиMETODVARCHAR2Наименование метода каротажаGLUBNUMBERНачальная глубинаSHAGNUMBERРасстояние, через которое выполняется каждое измерение определенной характеристики скважиныNUMNUMBERКоличество измерений характеристик скважиныMASBLOBСодержит различные данные об полученных характеристиках скважины

Таблица WELL_KRIV:

Наименование поляТип поляОписаниеCODNUMBERПервичный ключ. Идентификатор записиCOD_VIDNUMBERВторичный ключ. Код соответствующего вида каротажаCOD_METODNUMBERВторичный ключ. Код соответствующего метода каротажа

.2 Структура баз данных для визуализации инклинометрии


Состав таблиц базы данных

В данной таблице перечислены все таблицы базы данных:


Наименование таблицыОписаниеFIELD_HDRСодержит сведения о месторожденияхMAPСодержит сведения о карте местностиWELL_HDRСодержит сведения о скважинахWELL_INCRСодержит данные инклинометрии

Структура таблицы MAP:

Наименование поляТип поляОписаниеCODNUMBERПервичный ключ. Идентификатор записиNUMNUMBERКоличество точек в элементе картыCOLORNUMBERЦвет элемента изображенияKOOR_XBLOBКоординаты точек элемента картыKOOR_YBLOBКоординаты точек в элементе карты

4. Взаимодействие пользователя с приложением. Алгоритм работы приложения


4.1 Взаимодействие пользователя с экранной формой для каротажа


Экранная форма для каротажа представляет собой следующее:


Рисунок 2


Экранная форма содержит панель меню типа TMain Menu с пунктами «Данные»(с подпунктом «Загрузить из базы данных»), «Графики»(с подпунктом «Построить») и панель типа TPanel Log (наследован от TPanel), на которой будут отображаться графики. Причем для пунктов меню «Загрузить из базы данных» и «Построить» предусмотрены горячие клавиши. Подпункт меню «Построить» в начале работы приложения не доступен для пользователя, т.к. пока приложение не имеет сведения, по которым строить графики.

График представлен типом TChart Log(наследован от TChart), каждый из которых содержит одну серию типа TLine Series Log (наследован от TLine Series). В приложении объекты типа TChart Log объединены в список типа TObject List.

При нажатии пункта меню «Получить из базы данных» данные из базы данных заносятся в созданный объект, содержащий поля для хранения этих данных. Взаимодействие с базой данных осуществляется при помощи объекта типа TADO Query, который посылает sql-запрос к таблице WELL_METOD для получения данных, чтобы в дальнейшем занести их в объект типа TLogging, содержащий поля для хранения метода каротажа и его характеристик.

Хочется уделить внимание полю, хранящему характеристики. Оно имеет тип Blob. Поэтому для чтения из этого поля создается поток типа TMemory Stream, в который загружается содержимое blob-поля, а потом методом чтения из потока содержимое потока заносится в соответствующие поля объекта типа TLogging.

Если sql-запрос, возвращает поле, содержащее необходимые характеристики, пустым - то приложение принимает попытку прочитать эти характеристики из файла, находящегося в папке data, название которого соответствует методу каротажа. Если это не удалось, приложение выводит информационное сообщение и просит пользователя указать необходимый файл. Диалог для открытия файла осуществляется объектом типа TOpen Dialog. После чего нужно занести прочитанные данные в blob-поле.

Для записи в blob-поле (что возможно будет осуществлено в описанном немного позже), также создается поток типа TMemory Stream, в который заносятся данные, прочитанные из файла, а потом sql-запросом содержимое потока заносится в соответствующую таблицу.

После нажатия на подпункт меню «Получить из базы данных» подпункт меню «Построить» становится доступным для пользователя.


Рисунок 3


При нажатии на эту кнопку происходит следующее (Рисунок 3):

) Посылается sql-запрос к таблице WELL_KRIV, возвращающий её содержимое.

) Создается нужное количество компонентов (равное количеству строк в результате sql-запроса из предыдущего пункта) для отображения графиков. Реализовано добавлением в список типа TObjectList созданных объектов типа TChartLog. Причем при создании этих объектов создаются объекты типа TLineSeriesLog, в которые добавляются необходимые точки из объекта типа TLogging. И каждый созданный объект типа TChartLog получает заголовок, соответствующий методу каротажа.

) Идет размещение компонент типа TChartLog на панели таким образом, чтобы каждый компонент занимал равное пространство и распределены компоненты были равномерно по панели.

Примечание.

Описание разработанных классов и методов находится в приложении А.

4.2 Взаимодействие пользователя с экранной формой для инклинометрии


Экранная форма для икнлинометрии представляет собой следующее:


Рисунок 4


Экранная форма содержит панель меню типа TMain Menu и два компонента типа TChartIncr (наследован от TChart).

Графики инклинометрии отображаются на разработанных компонентах типа TChartIncr, тип которых может выбирается пользователем в визуальном свойстве этих компонентов Type Chart, который может быть View Cut, View Top.

Панель меню имеет следующие пункты меню: «Данные» с подпунктом «Загрузить из базы данных», «Графики» с подпунктами «Построить профиль скважины», «Построить проекцию на плоскость», «Вид» с подпунктами «Глубины» и «Карта», которые в свою очередь имеют подпункты: «Включить глубины», «Включить абсолютные глубины», «Выключить глубины» для «Глубины» и «Добавить элемент из файла» для «Карта». Для некоторых из подпунктов предусмотрены горячие клавиши.

При загрузке приложения доступен только пункт меню «Данные», чтобы избежать некорректных для программы действий пользователя, поэтому для дальнейшей работы необходимо нажать на «Загрузить из базы данных». В результате в объект типа TIncr (с помощью компонента типа TADO Query посылающего sql-запрос к базе данных, возвращающий координаты скважины), заносятся необходимые данные для построения графиков. Также становится доступен пункт меню «Графики».

После этого можно построить первый (Рисунок 5) или второй (Рисунок 6) графики, выбрав соответствующие пункты меню. После выборов одного из этих пунктов, соответствующие поля из объекта типа TIncr добавляются в серию типа TLine Series Incr, добавленную в компонент типа TChartIncr при его создании.

Также при выборе пункта меню «Построить скважину в виде сверху» происходит динамическое создание компонентов типа TLabelIncr (наследован от TLabel), которые добавляются в список типа TObject List Label (наследован от TObject List). Происходит оно по следующему алгоритму:

) Если ранее объекты типа TLabelIncr не создавались, то вычисляется максимальная ширина для каждого из них (берется максимальная или минимальная высота и проверяется, какая из них делает ширину объекта типа TLabelIncr больше). Стоит заметить, что при создании этих объектов их свойство Autosize установлено в True.

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

) Динамически создаются метки, которые заносятся в список типа TObject List Label. Причем количество создаваемых меток определяется вот как: если число подсчитанных меток в предыдущем пункте превышает число ранее созданных меток, то создается «число подсчитанных меток»- «число ранее созданных меток». В противном случае не создается ни одной метки.

) Вычисляются и присваиваются координаты размещения меток на графике.

После этого в серию типа TLine Map (наследован от TLine Series) загружаются записи из базы данных, несущие информацию о карте местности, на которой расположена скважина. Эта информация содержит координаты линий карты, а также её цвет. Цвет определяется в соответствии с перечисляемым множеством TLine Color, содержащие цвета, предусмотренные для отображения линий. Координаты же содержатся в базе данных в blob-поле, поэтому перед добавлением их в серию создается два потока типа TMemory Stream, в который с помощью посланного компонентом типа TADO Query sql-запроса, заносятся данные из blob-поля. После чего из каждого из потоков читаются координаты X и Y.


Рисунок 5

Рисунок 6


Описанный выше алгоритм происходит не только в начале работы пользователя с программой, но также при скроллинге и приближении графика. Это реализовано перекрытием обработчиков события собственным обработчиком событие. И поэтому при изменении отображаемой области происходит перерисовка меток (Рисунок 7).


Рисунок 7

В приложении также предусмотрено регулировка отображения глубин, что предусмотрено подпунктами меню в подпункте «Глубины».

Примечание. Описание разработанных классов и методов находится в приложении Б.


Список использованных источников


1. А.Я. Архангельский. Программирование в Delphi 7. Москва: Издательство Бином 2003. - 1152 стр.

. Кевин Луни, Боб Брила. Oracle Database 10g Настольная книга администратора баз данных. Москва: Издательство Лори. 2008. - 729 стр.


Приложение А


Описание разработанных классов и методов для отображения каротажа

Класс TLogging, предназначенный для хранения полученных данных из таблицы WELL_METOD и манипуляции ими.


type TLogging=Class(TObject)

private

State: Boolean; //определяет, создавался ли ранее объект класса

Cod: array of Integer; //идентификаторы записей в таблице

Glub: array of Single; //начальные глубины: array of Single; //интервалы между измерениями характеристик

Num: array of Integer; //количества измерений характеристик

Count: Integer; //количество записей в таблице

Mas: array of array of Single; //характеристики измерений:array of String; //наименования методов каротажа

publicGetCod(i: Integer): Integer;GetGlub(i: Integer): Single;GetShag(i: Integer): Single;GetNum(i: Integer): Integer;GetCount: Integer;GetMas(i,j: Integer): Single;GetMetod(i: Integer): String; GetData;

procedure LoadMasFromFile(FileNameMas : string;k : Integer); LoadMasFromBlob(k : integer);

procedure SetMasToBlob(k : integer);

Constructor Create;Destroy; override;;

procedure GetData;


Метод загружает содержимое полей из базы данных в соответствующие поля класса TLogging. Реализовано с помощью компонента типа TADO Query. Который сначала посылает запрос на получение из базы всех полей кроме blob-поля (MAS). Заполняются все массивы, соответствующие полям в базе данных, предварительно распределив для них память. Далее посылается запрос к базе данных на возвращение всех записей, в которых поле MAS не заполнено, объединенный с запросом, возвращающим все записи, в которых поле MAS заполнено (в результате выполнения запроса приложение получает не только коды записей, но и метки 1 или 0 для каждой записи, соответствующие заполненному и незаполненному полю). В соответствии с результатом запроса для каждой записи в классе выполняется либо метод Load Mas From File и Set Mas To Blob (в случае если метка равна 0), либо Load Mas From Blob (в случае равенства метки единице).

procedure Load Mas From File (File Name Mas : string;k : Integer);

Метод получает имя файла File Name Mas и номер записи k в классе. Из указанного файла читается Num[k] чисел типа Single, которые заносятся в k-тую строку массива Mas. Set Mas To Blob(k : integer);

Метод, который в результате выполнения sql-запроса заполняет k-тую запись поле MAS k-той строкой массива Mas. Предварительно содержимое k-той строки массива Mas заносятся в созданный поток. Который и загружается в соответствующий параметр запроса.

procedure Load Mas From Blob(k : integer);

Метод, который в результате выполнения sql-запроса заполняет k-тую строку массива Mas содержимым поля MAS k-той записи в базе данных. Предварительно содержимое поля MAS сохраняется в созданный поток. Из которого потом и считываются элементы для заполнения массива Mas


Класс TLine Series Log.

type TLine Series Log = class (TLine Series)

public

procedure Draw Graph (i : Integer;Logging :TLogging);

end;

procedure Draw Graph (i : Integer; Logging : TLogging);


Метод заносит в серию точки, соответствующие i-тым строкам в массивах полей объекта Logging. Предварительно свойство сортировки по оси абсцисс устанавливается в loNone, т.е. сортировка отсутствует.


Класс TChartLog= class(TChart) : TLineSeriesLog; //серия, добавляемая при вызове конструктора

constructor Create(AOwner : TComponent); override;Destroy; override;

Класс TPanelLog= class(TPanel): TObjectList;: Boolean; : Integer; //количество отображаемых компонент типа TChartLog

public

constructor Create(AOwner : TComponent); override;

destructor Destroy; override;GetNumGraph;Execute(Logging : TLogging);

end; GetNumGraph;


Метод, который с помощью sql-запроса, возвращающего записи из таблицы WELL_KRIV, заносит в поле класса Num Graph количество записей, возвращенных запросом.

procedure Execute(Logging : TLogging);

Метод занимается размещением компонент типа TChart Log на описываемом компоненте. Вначале вычисляется общая ширина для каждого из объектов, получаемая из ширины панели и количества компонент. Далее в список типа TList Chart добавляется Num Graph создаваемых компонент и для каждой из них задаются соответствующие им координаты на панели.

Также приложение использует модуль UString Log, с находящимися в нем строковыми константами, необходимыми для sql-запросов.


Приложение Б


Описание разработанных классов и методов для отображения каротажа


Класс TIncrTIncr=Class(TObject),Y,Z: array of Real; //координаты точек: Integer; //количество точек

public

destructor Destroy; override;GetNum: Integer;GetX(i : Integer): Real;GetY(i : Integer): Real;GetZ(i : Integer): Real;GetData;; GetData;


Метод, который с помощью sql-запроса возвращает все координатами из таблицы WELL_INCR. В результате полю Num присваивается количество возвращенных записей. Далее распределяется память для Num элементов динамических массивах X,Y,Z.

Модуль UWork содержит следующееTTypeChart=(ViewCut,ViewTop); //множество тип отображения инклинометрии

type TColorLine=(Red,Blue,Gray,Green,Yellow,Black,Silver); //множество цветов отображаемых элементов карты

Класс TLabelIncr. С помощью объектов этого типа отображаются глубины скважины

type= class(TLabel)Create(AOwnew : TComponent); override;;

Класс TObjectListLabel. Список объектов типа TLabelIncr

type= class(TObjectList): integer; //количество объектов

FChart : TChart;

WLabel,HLabel : Integer; //величины связанные с переводом координат из координат положения объектов типа TLabelIncr на компоненте типа TChart в координаты положения точек серии компоненте типа TChart

FIncr : TIncr;, FVisAbsGlub : Boolean;//определяет, видимы ли метки на данный моментFnIncr(IncrTemp : TIncr);FnVisGlub(Vis : Boolean);FnVisAbsGlub(Vis : Boolean);

publicCreate(AOwnsObjects: Boolean); overload;AddLabel(k : Integer);LabelDraw(Ind : array of Integer);LabelDefineSize(S : Integer;a : Real);MakeLabels;VisibleLAbs(Vis : Boolean); VisibleL(Vis : Boolean);

property Chart : TChart write FChart;Incr : TIncr write FIncr;

property VisGlub : Boolean write FnVisGlub;VisAbsGlub : Boolean write FnVisAbsGlub;

end;

procedure AddLabel(k : Integer);


Метод создает NumLabel-k объектов типа TLabelIncr, задавая при этом для них необходимые свойства. Эти объекты добавляются в объект описываемого класса.

procedure LabelDraw(Ind : array of Integer);

Массив Ind содержит помеченные точки графика, рядом с которыми должны располагаться метки. В соответствии с этим массивом объекты списка типа TObjectListLabel получают соответствующие им координаты расположения на компоненте типа TChartIncr

procedure LabelDefineSize(a : Real);

Метод вызывается только при создании списка. Создается метка типа TLabelIncr. a - число, которым заполняется метка. В результате выполнения метода определяется ширина и высота для всех меток, которые будут использоваться в приложении, соответственно WLabel и HLabel.

procedure MakeLabels;

Основной метод. Вызывается каждый раз после изменения положения графика на компоненте типа TChartIncr.

Сначала выполняется подсчет меток в переменной k, которые требуется отобразить, помечая номера точек, соответствующим меткам, в массиве Ind. Далее вызывается метод AddLabel(k).

procedure VisibleLAbs(Vis : Boolean) и procedure VisibleL(Vis : Boolean)

Задает видимость для меток, определяющих глубины и для меток, определяющих абсолютные глубины (соответственно нечетные и четные элементы списка)

Класс TLineSeriesIncr

TLineSeriesIncr = class(TLineSeries)

private

FIncr : TIncr; //объект типа TIncr, хранящий данные о графике

FTypeChart : TTypeChart; //тип отображания инклинометрииFnIncr(IncrF : TIncr);

protected: TObjectListLabel; //список объектов типа TLabelIncr AddAllPoint;

constructor Create(AOwner : TComponent); override;Destroy; override;Incr : TIncr read FIncr write FnIncr;TypeChart: TTypeChart read FTypeChart write FTypeChart;

end;

procedure AddAllPoint;


Метод, добавляющий точки в серию из объекта FIncr в соответствии с полем FTypeChart (т.е. в соответствии с видом отображения графика)


Класс TLineMap= class(TLineSeries)DefineColor(iColor : Integer): TColor;

publicLoadFromFile(filename : String); GetFromBlob;

constructor Create(AOwner : TComponent); override;;DefineColor(iColor : Integer): TColor;


Метод определяет цвет, соответствующий элементу из перечисления TColorLine. iColor -номер элемента в перечислении.

procedure LoadFromFile(filename : String);

Метод, в котором вначале читаются данные из файла filename, в частности количество координат, номер цвета в перечислении и сами координаты. Причем координаты записываются сразу в потоки для координат X и Y соответственно. Далее в результате выполнения sql-запроса добавляется запись с прочитанными данными из файла в таблицу Map. Причем потоки загружаются в соответствующие blob-поля.

procedure GetFromBlob;

Метод, который в результате выполнения sql-запроса, возвращающего все записи таблицы Map, заносит эти записи в серию, причем каждой записи соответствует своя линия в серии.


Класс TChartIncr

type

TChartIncr = class(TChart)

private

FTypeChart : TTypeChart; //определяет тип отображения инклинометрии

Timer : TTimer; //таймер необходим для того, чтобы корректно выполнялась перерисовка объектов типа TLabel при скроллинге и приближении изображения

procedure FnTypeChart(TypeCh : TTypeChart);OnTimerIncr(Sender : TObject);OnActionIncr(Sender : TObject);

public : TLineMap; //серия содержащая различные линии, образующие в совокупности карту местности

LineSeriesIncr : TLineSeriesIncr; //серия, содержащая точки скважины

constructor Create(AOwner : TComponent); override;Destroy; override;TypeChart: TTypeChart read FTypeChart write FnTypeChart;;

procedure OnTimerIncr(Sender : TObject);


Обработчик событий для Timer. Таймер необходим для того, чтобы корректно выполнялась перерисовка объектов типа TLabelIncr при скроллинге и приближении изображения.

Вызывает метод класса TObjectListLabel - MakeLabels.

procedure OnActionIncr(Sender : TObject);

Обработчик событий OnZoom, OnUndoZoom, OnScrolling для объекта типа TChartIncr

Метод для корректной прорисовки объектов типа TLabelIncr запускает таймер.

Также приложение использует модуль UStringIncr, с находящимися в нем строковыми константами, необходимыми для sql-запросов.


Теги: Визуализация геофизических данных  Курсовая работа (теория)  Информационное обеспечение, программирование