#ifndef DOXYGEN_SKIP /* $Id$ Translation corresponds to gdal_datamodel.dox 14550 2008-05-28 10:55:15Z Translator Andrey Kiselev Translator Dmitry Baryshnikov */ #endif /* DOXYGEN_SKIP */ /*! \page gdal_datamodel_ru Модель данных GDAL Настоящий документ описывает модель данных, применяемую библиотекой GDAL: разновидности информации, которая может содержаться в источниках данных GDAL, а также их семантика.

\section gdal_datamodel_ru_dataset Набор данных Набор данных (представляемый классом GDALDataset) состоит из связанных растровых каналов, а также некоторой дополнительной информации, общей для всего набора. В частности, набор данных имеет понятие размера (ширины и высоты), общем для всех каналов. Набор данных также отвечает за географическую привязку и указание координатной системы, также общими для всех каналов. Сам набор данных может иметь ассоциированный комплект метаданных: список пар ключ/значение в текстовом виде. Заметим, что набор данных GDAL и модель растровых каналов изначально базируется на спецификации регулярных покрытий консорциума OpenGIS. \subsection gdal_datamodel_ru_dataset_cs Система координат Географические координатные системы представляются в виде строк OpenGIS WKT (Well Known Text). Такая строка может содержать:

Дополнительные сведения об определениях координатных систем с помощью строк OpenGIS WKT и способах работы с ними можно найти в разделе osr_tutorial, а также в документации на класс OGRSpatialReference. Координатная система, возвращаемая методом GDALDataset::GetProjectionRef() описывает геодезические координаты, определяемые с помощью матрицы аффинного преобразования, возвращаемой функцией GDALDataset::GetGeoTransform(). Координатная система, возвращаемая методом GDALDataset::GetGCPProjection() описывает геодезические координаты наземных контрольных точек, список которых даёт метод GDALDataset::GetGCPs(). Заметим, что пустая строка (""), возвращаемая в качестве определения координатной системы, означает отсутствие информации о координатной системе. \subsection gdal_datamodel_ru_dataset_gtm Аффинное преобразование геодезических координат Существует два способа задать связь между точками растра (в терминах строка/столбец) и геодезическими координатами. Первый и наиболее часто используемый --- это аффинное преобразование. Второй предполагает использование наземных контрольных точек. Матрица аффинного преобразования состоит из шести коэффициентов, возвращаемых методом 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). \subsection gdal_datamodel_ru_dataset_gcp Наземные контрольные точки (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-го порядка. Обычно набор данных содержит либо аффинное преобразование, либо контрольные точки, либо ничего. В редких случаях может присутствовать и то, и другое, тогда не определено, какой из способов имеет преимущество. \subsection gdal_datamodel_ru_dataset_metadata База метаданных Метаданные --- это вспомогательные данные, хранящиеся в виде пар ключ/значение. Их состав определяется форматом хранения данных и приложением. Ключи должны быть "правильными" лексемами (без пробельных и специальных символов). Значения могут иметь любую длину и содержать любые символы, за исключением нулевого символа ASCII. Механизм управления метаданными плохо оптимизирован для работы с очень большими блоками данных. Однако работа с метаданными, превышающими в размере 100KiB скорее всего приведёт к снижению производительности. Некоторые форматы данных содержат собственную базу метаданных, драйверы других форматов могут отображать поля, специфичные для данного формата, в записи базы метаданных. Например, драйвер TIFF возвращает содержимое некоторых информационных тегов в виде метаданных, включая поле дата/время, которое будет выглядеть как:
TIFFTAG_DATETIME=1999:05:11 11:29:56
Метаданные выделены в именованные группы, называемые доменами. Базовый домен не имеет имени (NULL или ""). Существует несколько специальных доменов, служащих определённым целям. Заметим, что в настоящий момент не существует способа перечислить все домены, доступные для данного объекта, однако приложение может проверить доступность любого домена, который оно умеет обрабатывать. Следующие записи метаданных имеют чётко определённую семантику в базовом домене: \subsubsection gdal_datamodel_ru_subdatasets Домен вложенных наборов данных (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. \subsubsection gdal_datamodel_ru_image_structure Домен структуры изображения (IMAGE_STRUCTURE) Метаданные в базовом домене содержат информацию, связанную с изображением, однако не содержат данных о том, как это изображение хранится на диске. Таким образом, эти метаданные могут быть спокойно скопированы вместе с остальным набором данными в новый формат. Тем не менее, некоторая важная информация тесно связана с конкретным форматом и способом хранения данных. Во избежание перенесения этой информации при копировании данных, она помещена в специальный домен, называемый IMAGE_STRUCTURE, который не должен слепо копироваться в другие форматы. В настоящий момент спецификацией RFC 14 определены следующие специальные записи в домене IMAGE_STRUCTURE. \subsubsection gdal_datamodel_ru_rpc Домен RPC Домен RPC содержит метаданные, описывающие геометрическую модель изображения в виде полиномов с рациональными коэффициентами (Rational Polynomial Coefficient). Эта геометрическая модель может быть использована для пересчёта между координатами строка/столбец и географическими координатами. Модель определяется следующими записями: Эти поля напрямую взяты из документа, предлагающего поддержку RPC в GeoTIFF (http://geotiff.maptools.org/rpc_prop.html), который в свою очередь следует определению NITF RPC00B. \subsubsection gdal_datamodel_ru_imagery Домен метаданных ДДЗ (IMAGERY) Для материалов воздушной или космической съемки может быть задан домен IMAGERY. Наличие такого домена зависит от специальных файлов метаданных, которые обычно размещаются рядом с файлом изображения. Файлы метаданных передаются в классы чтения метаданных, которые, если поддерживают переданные формат, заполняют домен следующими величинами: \subsubsection gdal_datamodel_ru_xml Домены "xml:" Любой домен, чьё имя имеет префикс "xml:", является не обычной базой метаданных вида имя/значение, а единым документом XML представленным одной большой строкой. \section gdal_datamodel_ru_rasterband Растровый канал Растровый канал описывается в GDAL с помощью класса GDALRasterBand. Он не обязательно должен представлять всё изображение. Например, 24-битное RGB-изображение должно быть представлено как набор данных с тремя каналами, по одному для красной, зелёной и синей компоненты. Растровый канал имеет следующие свойства: \section gdal_datamodel_ru_rasterband_ct Таблица цветов Таблица цветов состоит из нуля или нескольких записей, описываемых на языке C в виде следующей структуры:
typedef struct
{
    /- серый, красный, голубой или цвет -/
    short      c1;

    /- зелёный, пурпурный или яркость -/
    short      c2;

    /- синий, жёлтый или насыщенность -/
    short      c3;

    /- альфа-канал или чёрный -/
    short      c4;
} GDALColorEntry;
Таблица цветов также имеет индикатор интерпретации (GDALPaletteInterp), который указывает на то, как параметры c1/c2/c3/c4 должны быть проинтерпретированы приложением. Этот индикатор может принимать следующие значения: Для связывания цвета с пикселем значение этого пиксела используется в качестве индекса в таблице цветов. Это значит, что цвета всегда располагаются в таблице начиная с нулевого индекса и далее по возрастанию. Не существует механизма для предварительного масштабирования значений, прежде, чем будет применена таблица цветов. \section gdal_datamodel_ru_rasterband_overviews Обзорные изображения Канал может содержать обзорные изображения. Каждое обзорное изображение представлено в виде отдельного канала GDALRasterBand. Размер обзорного изображения (в терминах строк и столбцов) будет отличаться от базового полноразмерного растра, однако географически они будут покрывать один и тот же регион. Обзорные изображения применяются для быстрого отображения уменьшенных копий растра, вместо того, чтобы читать полноразмерное изображение с последующим масштабированием. Канал также обладает свойством HasArbitraryOverviews, которое равно TRUE, если растр может быть эффективно прочитан в любом разрешении, но не имеет чётких пирамидальных слоёв. Такими свойствами обладают некоторые алгоритмы кодирования изображений с помощью БПФ и вейвлетов, а также изображения, получаемые из внешних источников (таких, как OGDI), когда масштабирование производится на удалённой стороне. */