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

Курсовая работа

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16 стр., 7611 слов

РЕЗУЛЬТАТЫ АНАЛИЗА ГЕОФИЗИЧЕСКИХ ИССЛЕДОВАНИЙ СКВАЖИН НА НОВО-ПОКУРСКОМ ...

... квалификационной работы Дипломной работы (бакалаврской работы, дипломного проекта/работы, магистерской диссертации) Капарулину Александру Львовичу Тема работы: Результаты анализа геофизических исследований скважин на ... геофизических данных). Результаты анализа геофизических исследований скважин на Ново-Покурском нефтяном месторождении: актуальность и цель исследования, результаты исследования. ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

68 стр., 33662 слов

Технология и техника строительства нефтяной эксплуатационной ...

... работ с сохранением минимальных затрат на скважину. Дипломный проект состоит из 7 частей: общей, геологической, технической, специальной части, охраны труда и окружающей природной среды, организационной - экономической части. При разработке дипломного ... В тексте дипломного проекта присутствует 14 рисунков, 51 таблица. В основу дипломного проекта положены фактические данные по месторождению Одопту- ...

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

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

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

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

 визуализация каротажа 1

Рисунок 1

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

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

NVARCHAR2 (размер)

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

Числовой столбец с заданными разрядностью (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:

Наименование поля

Тип поля

Описание

COD

NUMBER

Первичный ключ. Идентификатор записи

NAME

VARCHAR2

Наименование вида отображения каротажа

Таблица WELL_METOD:

Наименование поля

Тип поля

Описание

COD

NUMBER

METOD

VARCHAR2

Наименование метода каротажа

GLUB

NUMBER

Начальная глубина

SHAG

NUMBER

Расстояние, через которое выполняется каждое измерение определенной характеристики скважины

NUM

NUMBER

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

MAS

BLOB

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

Таблица WELL_KRIV:

Наименование поля

Тип поля

Описание

COD

NUMBER

Первичный ключ. Идентификатор записи

COD_VID

NUMBER

Вторичный ключ. Код соответствующего вида каротажа

COD_METOD

NUMBER

Вторичный ключ. Код соответствующего метода каротажа

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

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

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

Наименование таблицы

Описание

FIELD_HDR

Содержит сведения о месторождениях

MAP

Содержит сведения о карте местности

WELL_HDR

Содержит сведения о скважинах

WELL_INCR

Содержит данные инклинометрии

Наименование поля

Тип поля

Описание

COD

NUMBER

Первичный ключ. Идентификатор записи

NUM

NUMBER

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

COLOR

NUMBER

Цвет элемента изображения

KOOR_X

BLOB

Координаты точек элемента карты

KOOR_Y

BLOB

Координаты точек в элементе карты

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

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

 структура базы данных 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-запросом содержимое потока заносится в соответствующую таблицу.

 структура базы данных 2

Рисунок 3

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

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

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

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

Примечание.

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

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

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

 структура базы данных 3

Рисунок 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.

 структура базы данных 4

Рисунок 5

 структура базы данных 5

Рисунок 6

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

 структура базы данных 6

Рисунок 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;

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-запросов.