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

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

Набор данных

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

Заметим, что набор данных 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

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

Драйверы, которые поддерживают дочерние наборы данных сообщают об этом через значение DMD_SUBDATASETS. Данные выводятся при передаче ключей --format and --formats в утилиты командной строки.

На текущий момент дочерние наборы поддерживают следующие драйверы: ADRG, ECRGTOC, GEORASTER, GTiff, HDF4, HDF5, netCDF, NITF, NTv2, OGDI, PDF, PostGISRaster, Rasterlite, RPFTOC, RS2, WCS, и WMS.

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

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

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

Домен RPC

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

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

Домен метаданных ДДЗ (IMAGERY)

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

Домены "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.8.8.