Модель данных GDAL

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

Набор данных

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

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

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

Географические координатные системы представляются в виде строк OpenGIS WKT (Well Known Text). Такая строка может содержать:

Дополнительные сведения об определениях координатных систем с помощью строк OpenGIS WKT и способах работы с ними можно найти в разделе osr_tutorial, а также в документации на класс OGRSpatialReference.

Координатная система, возвращаемая методом GDALDataset::GetProjectionRef() описывает геодезические координаты, определяемые с помощью матрицы аффинного преобразования, возвращаемой функцией GDALDataset::GetGeoTransform(). Координатная система, возвращаемая методом GDALDataset::GetGCPProjection() описывает геодезические координаты наземных контрольных точек, список которых даёт метод GDALDataset::GetGCPs().

Заметим, что пустая строка (""), возвращаемая в качестве определения координатной системы, означает отсутствие информации о координатной системе.

Аффинное преобразование геодезических координат

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

Матрица аффинного преобразования состоит из шести коэффициентов, возвращаемых методом GDALDataset::GetGeoTransform(), которая отображает строку/столбец в пространство геодезических координат по следующему соотношению:

    Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2)
    Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5)

В случае изображений, верхняя рамка которых ориентирована на север, коэффициенты GT(2) и GT(4) равны нулю, GT(1) равен ширине пиксела, а GT(5) --- его высоте. Координаты (GT(0),GT(3)) задают положение верхнего левого угла верхнего левого пиксела растра.

Заметим, что координаты строка/столбец могут принимать значения от (0.0,0.0) в верхнем левом углу верхнего левого пиксела до (ширина_в пикселах,высота_в_пикселах) в правом нижнем углу правого нижнего пиксела. Положение центра верхнего левого пиксела в терминах строка/столбец будет, таким образом, (0.5,0.5).

Наземные контрольные точки (Ground Control Points, GCPs)

Набор данных может иметь список контрольных точек, связывающих одну или несколько точек растра с их геодезическими координатами. Все контрольные точки заданы в одной и той же координатной системе, возвращаемой методом GDALDataset::GetGCPProjection(). Каждая контрольная точка (описываемая классом GDAL_GCP) содержит следующее:

typedef struct
{
    char	*pszId; 
    char	*pszInfo;
    double 	dfGCPPixel;
    double	dfGCPLine;
    double	dfGCPX;
    double	dfGCPY;
    double	dfGCPZ;
} GDAL_GCP;

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

Координаты (dfGCPPixel, dfGCPLine) задают положение точки на растре. Координаты (dfGCPX, dfGCPY, dfGCPZ) задают соответствующую привязку точки к геодезическим координатам (координата Z часто бывает нулём).

Модель данных GDAL не содержит механизма преобразования, получаемого из контрольных точек, --- это оставлено для приложений более высокого уровня. Обычно для этого применяются полиномы от 1-го до 5-го порядка.

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

База метаданных

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

Механизм управления метаданными плохо оптимизирован для работы с очень большими блоками данных. Однако работа с метаданными, превышающими в размере 100KiB скорее всего приведёт к снижению производительности.

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

TIFFTAG_DATETIME=1999:05:11 11:29:56

Метаданные выделены в именованные группы, называемые доменами. Базовый домен не имеет имени (NULL или ""). Существует несколько специальных доменов, служащих определённым целям. Заметим, что в настоящий момент не существует способа перечислить все домены, доступные для данного объекта, однако приложение может проверить доступность любого домена, который оно умеет обрабатывать.

Следующие записи метаданных имеют чётко определённую семантику в базовом домене:

Домен вложенных наборов данных (SUBDATASETS)

Домен SUBDATASETS содержит список дочерних наборов данных. Обычно он используется для получения указателей на изображения, хранящиеся все вместе в едином файле (таком, как HDF или NITF). Например, файл формата NITF с четырьмя изображениями может иметь следующий список вложенных наборов данных:

  SUBDATASET_1_NAME=NITF_IM:0:multi_1b.ntf
  SUBDATASET_1_DESC=Image 1 of multi_1b.ntf
  SUBDATASET_2_NAME=NITF_IM:1:multi_1b.ntf
  SUBDATASET_2_DESC=Image 2 of multi_1b.ntf
  SUBDATASET_3_NAME=NITF_IM:2:multi_1b.ntf
  SUBDATASET_3_DESC=Image 3 of multi_1b.ntf
  SUBDATASET_4_NAME=NITF_IM:3:multi_1b.ntf
  SUBDATASET_4_DESC=Image 4 of multi_1b.ntf
  SUBDATASET_5_NAME=NITF_IM:4:multi_1b.ntf
  SUBDATASET_5_DESC=Image 5 of multi_1b.ntf

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

Домен структуры изображения (IMAGE_STRUCTURE)

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

В настоящий момент спецификацией RFC 14 определены следующие специальные записи в домене IMAGE_STRUCTURE.

Домен RPC

Домен RPC содержит метаданные, описывающие геометрическую модель изображения в виде полиномов с рациональными коэффициентами (Rational Polynomial Coefficient). Эта геометрическая модель может быть использована для пересчёта между координатами строка/столбец и географическими координатами. Модель определяется следующими записями:

Эти поля напрямую взяты из документа, предлагающего поддержку RPC в GeoTIFF (http://geotiff.maptools.org/rpc_prop.html), который в свою очередь следует определению NITF RPC00B.

Домены "xml:"

Любой домен, чьё имя имеет префикс "xml:", является не обычной базой метаданных вида имя/значение, а единым документом XML представленным одной большой строкой.

Растровый канал

Растровый канал описывается в GDAL с помощью класса GDALRasterBand. Он не обязательно должен представлять всё изображение. Например, 24-битное RGB-изображение должно быть представлено как набор данных с тремя каналами, по одному для красной, зелёной и синей компоненты.

Растровый канал имеет следующие свойства:

Таблица цветов

Таблица цветов состоит из нуля или нескольких записей, описываемых на языке C в виде следующей структуры:

typedef struct
{
    /- серый, красный, голубой или цвет -/
    short      c1;
    /- зелёный, пурпурный или яркость -/    
    short      c2;
    /- синий, жёлтый или насыщенность -/
    short      c3;
    /- альфа-канал или чёрный -/
    short      c4;      
} GDALColorEntry;

Таблица цветов также имеет индикатор интерпретации (GDALPaletteInterp), который указывает на то, как параметры c1/c2/c3/c4 должны быть проинтерпретированы приложением. Этот индикатор может принимать следующие значения:

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

Обзорные изображения

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

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

Канал также обладает свойством HasArbitraryOverviews, которое равно TRUE, если растр может быть эффективно прочитан в любом разрешении, но не имеет чётких пирамидальных слоёв. Такими свойствами обладают некоторые алгоритмы кодирования изображений с помощью БПФ и вейвлетов, а также изображения, получаемые из внешних источников (таких, как OGDI), когда масштабирование производится на удалённой стороне.


Generated for GDAL by doxygen 1.7.1.