#ifndef DOXYGEN_SKIP
/*
$Id: gdal_datamodel_ru.dox,v 1.2 2005/11/08 22:36:08 dron Exp $
Translation corresponds to gdal_datamodel.dox,v 1.4 2005/10/26
Translator Andrey Kiselev <dron@remotesensing.org>
*/
#endif /* DOXYGEN_SKIP */

/*!
\page gdal_datamodel_ru Модель данных GDAL

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

\section gdal_datamodel_ru_dataset Набор данных

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

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

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

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

<ul>
<li> Общее название координатной системы. 
<li> Название географической координатной системы. 
<li> Идентификатор системы координат. 
<li> Название эллипсоида, большая полуось, сжатие. 
<li> Название начального меридиана и его смещение относительно Гринвичского. 
<li> Название проекции (например, Transverse Mercator).
<li> Список параметров проекции (например, положение осевого меридиана). 
<li> Название единиц измерения и множитель для перехода к метрам или радианам. 
<li> Названия и порядок следования координатных осей. 
<li> Коды для вышеперечисленных параметров по предопределённым таблицам,
таким, как таблицы EPSG. 
</ul>

Дополнительные сведения об определениях координатных систем с помощью строк
OpenGIS WKT и способах работы с ними можно найти в разделе
<a href="ogr/osr_tutorial.html">osr_tutorial</a>, а также в документации на класс
OGRSpatialReference.

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

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

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

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

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

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

В случае изображений, верхняя рамка которых ориентирована на север,
коэффициенты 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) содержит следующее:

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

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

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

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

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

\subsection gdal_datamodel_ru_dataset_metadata Метаданные

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

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

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

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

<pre>
TIFFTAG_DATETIME=1999:05:11 11:29:56
</pre>

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

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

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

<ul>

<li> Ширина и высота в пикселах и строках. Они будут теми же самыми, что и для всего набора данных, если это канал в полном разрешении. 

<li> Тип данных (GDALDataType). Один из вещественных (Byte, UInt16, Int16,
UInt32, Int32, Float32, Float64), или комплексных типов CInt16, CInt32,
CFloat32, and CFloat64.

<li> Размер блока. Предпочтительный (наиболее эффективный) размер блока данных для считывания. Для изображений, хранящихся построчно, это в большинстве случаев будет одна строка. 

<li> Список метаданных в виде пар ключ/значение в том же формате, что и для всего набора данных, но содержащих информацию, специфичную для данного канала.

<li> Необязательная строка описания. 

<li> Необязательный список категорий (например, названий классов на
тематической карте).  

<li> Необязательные минимальное и максимальное значение. 

<li> Необязательные калибровочные коэффициенты для пересчёта значений растра в
физические величины (например, перевод отсчётов высоты в метры). 

<li> Необязательное название единиц измерения. Например, это поле может
содержать единицы измерения высоты для модели рельефа.

<li> Цветовая интерпретация канала. Одна из:

  <ul> 
  <li> GCI_Undefined: по умолчанию, не определено.
  <li> GCI_GrayIndex: одиночное изображение в оттенках серого.
  <li> GCI_PaletteIndex: изображение с цветовой палитрой.
  <li> GCI_RedBand: красная компонента RGB- или RGBA-изображения.
  <li> GCI_GreenBand: зелёная компонента RGB- или RGBA-изображения.
  <li> GCI_BlueBand: синяя компонента RGB- или RGBA-изображения.
  <li> GCI_AlphaBand: альфа-канал RGBA-изображения.
  <li> GCI_HueBand: компонента цвета HLS-изображения.
  <li> GCI_SaturationBand: компонента насыщенности HLS-изображения.
  <li> GCI_LightnessBand: компонента яркости HLS-изображения.
  <li> GCI_CyanBand: голубая компонента CMY- или CMYK-изображения.
  <li> GCI_MagentaBand: пурпурная компонента CMY- или CMYK-изображения.
  <li> GCI_YellowBand: жёлтая компонента CMY- или CMYK-изображения.
  <li> GCI_BlackBand: чёрная компонента CMY- или CMYK-изображения.
  </ul>

<li> Таблица цветов (палитра), которая будет подробно описана ниже. 

<li> Информация об уменьшенных обзорных изображениях (пирамидах). 

</ul>

\section gdal_datamodel_ru_rasterband_ct Таблица цветов

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

<pre>
typedef struct
{
    /- серый, красный, голубой или цвет -/
    short      c1;      

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

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

    /- альфа-канал или чёрный -/
    short      c4;      
} GDALColorEntry;
</pre>

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

<ul>
<li> GPI_Gray: Считать c1 значением в градациях серого.
<li> GPI_RGB: Считать c1 красным, c2 зелёным, c3 синим, а c4 --- альфа-каналом.
<li> GPI_CMYK: Считать c1 голубым, c2 пурпурным, c3 жёлтым, c4 чёрным. 
<li> GPI_HLS: Считать c1 цветом, c2 яркостью, c3 насыщенностью. 
</ul>

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

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

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

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

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

*/


