ラスターデータモデル
このドキュメントはGDALデータモデルを記述しようとします.その内容はGDALデータストアが含むことができる情報のタイプとそれらの意味についてです.
データセット
データセット(クラス GDALDataset
で表される)は,関連するラスターバンドの集合と,それら全てに共通する情報です.特にデータセットは,全てのバンドに適用されるラスターサイズ(ピクセルとライン)の概念を持ちます.データセットはまた,全てのバンドの地理参照変換と座標系定義を担当します.データセット自体には,文字列形式の名前/値ペアのリストとして関連するメタデータがあります.
GDALデータセットとラスターバンドデータモデルは,OpenGIS Grid Coverages仕様に基づいています.
座標系
データセットの座標系はOpenGIS Well Known Text文字列として表されます.これは以下を含むことができます:
全体の座標系名
地理座標系名
測地系識別子
楕円体名,軌道長半径,逆扁平率
本初子午線名とグリニッジからのオフセット
投影法のタイプ(例:Transverse Mercator).
投影パラメータのリスト(例: central_meridian).
単位名とメートルまたはラジアンへの変換係数
軸の名前と順序
上記のほとんどコードは,EPSGなどの標準座標系で定義されているコードです.
OpenGIS WKT 座標系システム定義の詳細とそれらを操作するメカニズムについては,osr_tutorial ドキュメントと OGRSpatialReference クラスドキュメントを参照してください.
GDALDataset::GetProjectionRef()
で返される座標系は, GDALDataset::GetGeoTransform()
によって返されるアフィン地理変換を前提とした地理参照座標を記述します. GDALDataset::GetGCPProjection()
から返される座標系では GDALDataset::GetGCPs()
から返されるGCPでジオリファレンスされた座標を記述します.
返される座標系文字列が "" の場合, ジオリファレンス座標系について何も指定されていないことを表します.
アフィン地理変換
GDAL データセットは, ラスタの位置 (ピクセル/行座標) と地理参照座標の関係を2 つの方法で記述します. 最初の最も一般的に使用される方法はアフィン変換です(もう 1 つの方法は GCPs です).
アフィン変換は, ピクセル/行座標を地理参照空間にマッピングするために GDALDataset::GetGeoTransform()
によって返される 6 つの係数で構成されます. これらは以下の関係を使用してピクセル/行座標を地理参照空間にマッピングします:
Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2)
Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5)
北向きの画像の場合, GT(2) と GT(4) の係数は 0 で, GT(1) はピクセル幅, GT(5) はピクセル高さです. (GT(0),GT(3)) の位置はラスタの左上隅の最上左側ピクセルの座標です.
上記のピクセル/行座標は,左上隅の左上ピクセルが (0.0,0.0) で, 右下隅の右下ピクセルの(width_in_pixels,height_in_pixels) までです. 左上ピクセルの中心のピクセル/行の位置は (0.5,0.5) です.
GCPs
データセットは, ピクセル/行座標に関連する制御点のセットを持つことができます. すべてのGCPsは, ジオリファレンスする座標系 ( GDALDataset::GetGCPProjection()
から返される)を共有します. 各GCP (GDAL_GCPクラスとして表されます) は次のようになります:
typedef struct
{
char *pszId;
char *pszInfo;
double dfGCPPixel;
double dfGCPLine;
double dfGCPX;
double dfGCPY;
double dfGCPZ;
} GDAL_GCP;
pszId文字列は, このデータセット上のGCPsのセット内のGCPの一意の (しばしば, しかし常に) 数値の識別子です. pszInfoは通常空文字列ですが, GCPに関連するユーザ定義のテキストを含めることができます. 現在は通常利用されていませんが, GCPの状態に関する機械可読情報を含めることもできます.
(ピクセル,行) 位置はラスタ上のGCP位置です. (X,Y,Z) 位置は, Z がよくゼロであるジオリファレンスされた位置です.
GDAL データモデルは, GCPs から生成される変換メカニズムを実装しません ... これはアプリケーションに任されています. ただし,1 次から 5 次の多項式は一般的に利用されます.
通常, データセットはアフィン地理変換, GCPs のいずれかを含みます. 両方を含むことは一般的ではありません. どちらが優先されるかは未定義です.
メタデータ
GDALメタデータは,名前/値のペアのリストとして保持される補助的なフォーマットおよびアプリケーション固有のテキストデータです.名前は適切な形式のトークン(スペースや特殊文字を含まない)である必要があります.値は任意の長さで,埋め込みヌル(ASCII ゼロ)以外の任意の内容を含むことができます.
メタデータ取り扱いシステムはとても巨大な本体を持つメタデータを扱うために適切には調整されていません. データセットに対して100Kを超えるメタデータを扱うと,パフォーマンスの低下を引き起こす可能性があります.
一部のフォーマットは汎用的な(ユーザー定義の)メタデータをサポートしますが,他のフォーマットドライバは特定のフォーマットフィールドをメタデータ名にマッピングします.例えば、TIFFドライバは日付/時刻フィールドを含むいくつかの情報タグをメタデータとして返します。日付/時刻フィールドは次のように返されます:
TIFFTAG_DATETIME=1999:05:11 11:29:56
メタデータはドメインと呼ばれる名前付きグループに分割されます,デフォルトドメインには名前がありません(NULLまたは""). 特別な目的のために存在する特定のドメインもあります.現在,特定のオブジェクトに対して利用可能なすべてのドメインを列挙する方法はありませんが,アプリケーションは解釈方法を知っているドメインに対して "テスト" を行うことができます.
以下のメタデータ項目は、デフォルトドメインにおいて明確に定義された意味を持ちます:
AREA_OR_POINT: "Area"(デフォルト)または"Point"のいずれかでしょう.ピクセル値がピクセル領域全体のサンプリングを表すのか,ピクセルの中心点でのサンプリングを表すのかを示します.これは地理参照の解釈に影響を与えることを意図したものではなく,地理参照は領域指向のままです.
NODATA_VALUES: この値はデータセット内のバンド数に一致するスペースで区切られたピクセル値のリストです.これらの値は,データセット内でデータなし(nodata)のピクセルを識別するために集合的に使用されます.このスタイルのnodataでは,すべてのバンドが NODATA_VALUES タプル内の対応する値と一致する場合にのみ,そのピクセルはすべてのバンドでデータなしと見なされます.現時点では,このメタデータは GDAL ドライバ,アルゴリズム,ユーティリティによって広くサポートされているわけではありません.
MATRIX_REPRESENTATION: この値は,偏波SARデータセットに使用され,このデータが提供される行列表現を含みます.以下が受け入れ可能な値です:
SCATTERING
SYMMETRIZED_SCATTERING
COVARIANCE
SYMMETRIZED_COVARIANCE
COHERENCY
SYMMETRIZED_COHERENCY
KENNAUGH
SYMMETRIZED_KENNAUGH
POLARIMETRIC_INTERP: このメタデータ項目は,偏波SARデータのラスターバンドに対して定義されています.これは,指定された行列表現のどのエントリをこのバンドが表しているかを示します.例えば,散乱行列として提供されるデータセットの場合,このメタデータ項目の受け入れ可能な値はHH,HV,VH,VVです.データセットが共分散行列の場合,例えば,このメタデータ項目はCovariance_11,Covariance_22,Covariance_33,Covariance_12,Covariance_13,Covariance_23のいずれかになります(行列自体がエルミート行列であるため,これらが行列を記述するために必要なすべてのデータです).
METADATATYPE: IMAGERYドメインが存在する場合,この項目はメタデータを処理したリーダーを示します.現在,以下のようなリーダーが存在します:
DG: DigitalGlobe 画像のメタデータ
GE: GeoEye (または正式には SpaceImaging) 画像のメタデータ
OV: OrbView 画像のメタデータ
DIMAP: Pleiades 画像のメタデータ
MSP: Resurs DK-1 画像のメタデータ
ODL: Landsat 画像のメタデータ
CACHE_PATH: キャッシュディレクトリーのパス. 現在このメタデータはWMSドライバーでのみ設定されます. これはデータセットとキャッシュを同時に削除する場合や外部プログラムでインターネットのどこかの場所にタイルを格納するような場合に便利です.
SUBDATASETS ドメイン
SUBDATASETS ドメインは子データセットのリストを保有します. 通常これは単一のマルチイメージファイル内に格納されているイメージのリストへのポインターを提供するために使用されます.
たとえば2個の画像を持つ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
The value of the _NAME is the string that can be passed to GDALOpen()
to access the file. The _DESC value is intended to be a more user friendly string that can be displayed to the user in a selector.
サブデータセットをサポートするドライバは, DMD_SUBDATASETS
機能を公開します.この情報は,コマンドラインユーティリティに --formatおよび --formatsオプションが渡された際に報告されます.
現在以下のドライバーがサブデータセットをサポートしています: ADRG, ECRGTOC, GEORASTER, GTiff, HDF4, HDF5, netCDF, NITF, NTv2, OGDI, PDF, PostGISRaster, Rasterlite, RPFTOC, RS2, TileDB, WCS, WMS, と Zarr.
IMAGE_STRUCTURE ドメイン
デフォルトドメインのメタデータは,画像に関連するものであり,画像がディスク上にどのように保存されているかという方法には特に関連しません.つまり,データセットが新しいフォーマットにコピーされる際に,一緒にコピーするのに適しています.一方,特定のファイルフォーマットや保存メカニズムに密接に関連する重要な情報もあります.これらの情報がデータセットと一緒にコピーされるのを防ぐため,IMAGE_STRUCTUREと呼ばれる特別なドメインに配置されます.このドメインは通常,新しいフォーマットにコピーされるべきではありません.
現在以下のアイテムは IMAGE_STRUCTURE ドメインで固有のセマンティックを持つものとして RFC 14: Image Structure Metadata で定義されています.
COMPRESSION: データセットまたはバンドの圧縮タイプ. 圧縮タイプ名の 確定したカタログはありません. ただし,特定のフォーマットがCOMPRESSION作成オプションを含む場合,そこで使用される値のリストと同じものがここでも使用されるべきです.
NBITS: このバンド,またはこのデータセットのバンドに使用される実際のビット数です.通常,ビット数がデータ型の標準と異なる場合にのみ存在します.例えば,1ビットのTIFFファイルがGDALを通じてGDT_Byteとして表されている場合などです.
INTERLEAVE: これはデータセットにのみ適用され,その値はPIXEL,LINE,またはBANDのいずれかである必要があります.これはデータアクセスのヒントとして使用されることがあります.
PIXELTYPE: これはGDT_Byteバンド(または対応するデータセット)に現れることがあり,値がSIGNEDBYTEである場合,128から255までの符号なしバイト値を,SIGNEDBYTEタイプを認識するアプリケーションにおいては-128から-1として解釈すべきことを示します.GDAL 3.7以降,このメタデータ項目は使用されなくなり,符号付きバイトにはInt8データタイプが使用されるようになりました
RPC ドメイン
RPCメタデータドメインには,画像の有理多項式係数ジオメトリ モデル (存在する場合) を説明するメタデータが保持されます.このジオメトリモデルは,ピクセル/ラインと地理参照された場所の間の変換に使用できます.モデルを定義する項目は次のとおりです
ERR_BIAS: エラー - バイアス,画像内のすべての点に対する水平方向の軸ごとのRMS(二乗平均平方根)バイアス誤差をメートル単位で示します(不明な場合は-1.0と表示されます)
ERR_RAND:エラー - ランダム.画像内の各点に対する水平方向の軸ごとのRMS(二乗平均平方根)ランダム誤差をメートル単位で示します(不明な場合は-1.0と表示されます).
LINE_OFF: ラインオフセット
SAMP_OFF: サンプルオフセット
LAT_OFF: 測地学的緯度オフセット
LONG_OFF: 測地学的経度オフセット
HEIGHT_OFF: 測地学的高さオフセット
LINE_SCALE: ラインスケール
SAMP_SCALE: サンプルスケール
LAT_SCALE: 測地学的緯度スケール
LONG_SCALE: 測地学的経度スケール
HEIGHT_SCALE: 測地学的高さスケール
LINE_NUM_COEFF (1-20): ライン分子係数. rn 方程式の分子の多項式のための20個の係数(スペースで区切られています).
LINE_DEN_COEFF (1-20): ライン分母係数. rn 方程式の分母の多項式のための20個の係数. (スペースで区切られています)
SAMP_NUM_COEFF (1-20): サンプル分子係数. cn 方程式の分子の多項式のための20個の係数. (スペースで区切られています)
SAMP_DEN_COEFF (1-20): サンプル分母係数. cn 方程式の分母の多項式のための20個の係数. (スペースで区切られています)
これらのフィールドは,GeoTIFF RPC ドキュメント(http://geotiff.maptools.org/rpc_prop.html) から直接派生しており,そのドキュメントはNITF RPC00B 定義を厳密にモデル化したものです.
LINE_OFF と SAMP_OFF で表されるラインとピクセルオフセットは,ピクセルの中心を基準としています.
IMAGERY ドメイン (リモートセンシング)
衛星画像や航空画像の場合,IMAGERYドメインが存在することがあります.これは,画像ファイルの近くに特別なメタデータファイルが存在するかどうかに依存します.メタデータリーダーのセットが同じディレクトリ内の画像ファイルと一緒に存在するファイルをテストし,ファイルがメタデータリーダーによって処理できる場合,IMAGERYドメインに次の項目が入力されます:
SATELLITEID: 衛星またはスキャナの名前
CLOUDCOVER: 雲の覆い具合. 値は 0 - 100 の範囲でデータが利用できない場合は 999
ACQUISITIONDATETIME: 画像の取得日時 (UTC)
xml: ドメイン
"xml:"で始まるドメイン名は通常の名前/値形式のメタデータではありません.それは,1つの大きな文字列に格納されたXMLドキュメント全体を指します.
ラスターバンド
ラスターバンドはGDALでは GDALRasterBand
クラスで表現されます.これは,単一のラスターバンド/チャンネル/レイヤーを表します.これは必ずしも全画像を表すわけではありません.たとえば,24ビットのRGB画像は通常,赤,緑,青の3つのバンドを持つデータセットとして表されます.
ラスターバンドには以下のプロパティがあります:
ピクセルとラインの幅と高さ. これは,これがフル解像度バンドの場合にデータセットで定義されたものと同じです.
データ型 (GDALDataType). Byte, Int8, UInt16, Int16, UInt32, Int32, UInt64, Int64, Float32, Float64, および複素数型 CInt16, CInt32, CFloat32, CFloat64 のいずれかです.
UInt64 および Int64 データ型は GDAL 3.5 で追加されました. ピクセル値の読み取りと書き込みを超えて,そのサポートは限られています. 一部のアルゴリズムは内部で64ビット浮動小数点数を使用する場合があります(ワーピング),また,一部のメソッドは倍精度値のみを返す場合があります(GetMinimum(), GetMaximum() など),または32ビット浮動小数点数(概要, RasterIO リサンプリング)を使用する場合があります.したがって,正確な値が保持される範囲は [0, 2^53] (32ビット浮動小数点数を使用する場合はそれ以下)になります.
Int8 データ型は GDAL 3.7 で追加されました.
ブロックサイズ. これは,好ましい(効率的な)アクセスチャンクサイズです. タイル画像の場合,これは1つのタイルになります. スキャンライン指向の画像の場合,通常は1つのスキャンラインになります.
データセットと同じ形式の名前/値ペアメタデータのリストですが,このバンドに特有の情報です.
オプションの説明文字列.
オプションの単一のノーデータピクセル値 (データセットの NODATA_VALUES メタデータについても参照してください).
ノーデータまたは一部の場合は透過性を示すピクセルをマークするオプションのノーデータマスクバンド. RFC 15: Band Masks で議論され, GDALRasterBand::GetMaskBand() で文書化されています.
オプションのカテゴリ名のリスト (テーマ画像のクラス名).
オプションの最小値と最大値.
メタデータに格納されたオプションの統計情報:
STATISTICS_MEAN: 平均
STATISTICS_MINIMUM: 最小値
STATISTICS_MAXIMUM: 最大値
STATISTICS_STDDEV: 標準偏差
STATISTICS_APPROXIMATE: GDALが計算された近似統計を持つときにのみ存在します
STATISTICS_VALID_PERCENT: 有効なピクセル (nodataではない) の割合
ラスター値を意味のある完全な値に変換するためのオプションのオフセットとスケール(例:高さをメートルに変換する).
オプションのラスター単位名.例えば標高データの線形単位を示す場合があります.
バンドの色解釈. 以下のいずれかです:
GCI_Undefined: デフォルト, すべて不明.
GCI_GrayIndex: これは独立したグレースケール画像です
GCI_PaletteIndex: このラスターはカラーテーブルのインデクスとして機能します
GCI_RedBand: このラスターはRGBまたはRGBA画像の赤の部分です
GCI_GreenBand: このラスターはRGBまたはRGBA画像の緑の部分です
GCI_BlueBand: このラスターはRGBまたはRGBA画像の青の部分です
GCI_AlphaBand: このラスターはRGBA画像のアルファの部分です
GCI_HueBand: このラスターはHLS画像の色相です
GCI_SaturationBand: このラスターはHLS画像の彩度です
GCI_LightnessBand: このラスターはHLS画像の輝度です
GCI_CyanBand: このバンドはCMY または CMYK 画像のシアン部分です
GCI_MagentaBand: このバンドはCMY または CMYK 画像のマゼンダ部分です
GCI_YellowBand: このバンドはCMY または CMYK 画像のイエロー部分です
GCI_BlackBand: このバンドはCMYK 画像のブラック部分です.
カラーテーブル, 詳細は後に記述あります.
解像度を下げたオーバービュー(ピラミッド)に関する情報(利用可能な場合).
カラーテーブル
カラーテーブルはC言語で記述された0またはそれ以上の色のエントリです.以下の構造で記述されます:
typedef struct
{
/* gray, red, cyan or hue */
short c1;
/* green, magenta, or lightness */
short c2;
/* blue, yellow, or saturation */
short c3;
/* alpha or black band */
short c4;
} GDALColorEntry;
カラー テーブルには、パレット解釈値 (GDALPaletteInterp) もあります.これは,次のいずれかの値で,カラー エントリの c1/c2/c3/c4 値をどのように解釈するかを示します.
GPI_Gray: c1をグレイスケール値として使います.
GPI_RGB: c1 を赤, c2 を緑, c3を青 c4 をアルファとして使います.
GPI_CMYK: c1 をシアン, c2をマゼンタ, c3 をイエロウ c4をブラックとして使います.
GPI_HLS: c1 を色相, c2 を明度, c3 を彩度として使います.
ラスターピクセルに色を関連付けるために,ピクセル値はカラーテーブルに対する添字として使用されます.つまり,色は常にゼロから始まり昇順に適用されます.カラーテーブルを参照する前に事前スケーリングメカニズムを示すための規定はありません.
オーバービュー
バンドには0またはそれ以上のオーバービューが存在する場合があります.各オーバービューは "独立した" GDALRasterBand
として表されます. オーバービューのサイズ (ピクセル数と行数) は元となるラスターとは異なりますが,オーバービューでカバーされる地理領域は完全な解像度のバンドと同じです.
オーバービューは,全解像度データをすべて読み取ってダウンサンプリングするよりも高速に縮小解像度のオーバービューを表示するために使用されます.
バンドには,HasArbitraryOverviews プロパティもあります.これは,ラスターが任意の解像度で効率的に読み取ることができるが,明確なオーバービューレベルがない場合に TRUE になります.これは,一部のFFTエンコードされた画像や,ダウンサンプリングがリモートポイントで効率的に行われるゲートウェイを通じて取得された画像に適用されます.
オーバービューが選択される方法は,ソフトウェアのロジックに依存します. GDALRasterBand::RasterIO()
または GDALDataset::RasterIO()
メソッドはそのロジックを文書化しています.