1.8 ピラミッド

ピラミッドは、ラスター・イメージまたはラスター・データを様々なサイズおよび解像度で表す、GeoRasterオブジェクトのサブオブジェクトです。

サイズは、通常、アプリケーションでのイメージの取得および表示(特にWebを経由する場合)にかかる時間に影響します。つまり、イメージ・サイズが小さいほど表示速度が速くなり、詳細な解像度が必要ない場合は(ユーザーが十分にズーム・アウトしている場合など)、小さいイメージの表示品質で十分です。

ピラミッド・レベルは、必要な記憶域が小さくなる低解像度イメージ、または必要な記憶域が大きくなる高解像度イメージを表します。(GeoRasterでは、低解像度のピラミッドのみがサポートされています。)値が0 (ゼロ)のピラミッド・レベルは、元のラスター・データを示します(この場合、イメージの解像度は低下せず、必要な記憶域は変化しません)。値が0 (ゼロ)より大きくなるほど、イメージの解像度のレベルが低くなり、必要な記憶域が小さくなります。

ピラミッド・タイプは、ピラミッドのタイプを表します。次のいずれかの値を指定できます。

  • DECREASE: ピラミッド・レベルが高くなるほどピラミッド・サイズが小さくなります。

  • NONE: GeoRasterオブジェクトに関連付けられたピラミッドが存在しません。

図1-7に、ピラミッド・タイプをDECREASEに指定した場合のピラミッド・レベルの概要を示します。この図では、ピラミッド・レベル番号が大きくなるほどファイル・サイズが小さくなり、イメージの表現に使用されるピクセルが減少するために解像度も低くなることを示しています。

図1-7 ピラミッド・レベル

図1-7の説明が続きます。
「図1-7 ピラミッド・レベル」の説明

各レベルのピラミッド・イメージのサイズは、次の計算式によって、元のイメージ・サイズとピラミッド・レベルに基づいて決定されます。

r(n) = (int)(r(0) / 2^n)
c(n) = (int)(c(0) / 2^n)

計算式の各変数の意味は、次のとおりです。

  • r(0)およびc(0): 元の行次元および列次元のサイズです。

  • r(n)およびc(n): ピラミッド・レベルn の行次元および列次元のサイズです。

  • int: 任意の数値を、その数値未満の最も近い整数値に丸めます。

  • 2^n: 2のn乗を表します。

最上位レベルの全体像(最上位レベルの最小ピラミッド)では、行次元と列次元のいずれか小さい方のサイズは1になります。最も低い解像度のピラミッド・レベルは、このサイズによって決まり、(int)(log2(a))という式で求められます。

式の各変数の意味は、次のとおりです。

  • log2: 底が2の対数関数です。

  • a: 元の次元サイズの行または列の小さい方です。

ピラミッド内のセル・アドレッシングでは、元のラスター・データに定義されているセル・アドレッシングと同じタイプを使用します(「GeoRasterデータ・モデル」を参照)。各ピラミッド・レベルには独自のセル空間がありますが、ピラミッド・レベルのすべてのセル空間には、元のレベル(レベル・ゼロ)のセル座標系と同じタイプのセル座標系(中心または左上を基準とするセル座標系)があります。セルは均等なサイズの四角形で、単位は1セルです。各ピラミッド・レベルの左上角のセルにあるULTCoordinateは、メタデータに登録されている、元のラスター・データのULTCoordinateと同じです。このセル空間の定義とピラミッド・レベルに基づいて、1つのピラミッド・レベルのセル座標を別の座標に変換できます。

GeoRasterメタデータにはピラミッド・レベルごとに定義されている個々のSRSはありません。ピラミッド内のセルのモデル座標を導出するには、最初に別のピラミッド・レベルのセル座標をピラミッド・レベル・ゼロのセル座標に変換してから、GeoRaster SRSを適用します。逆に、ピラミッドの地上点のセル座標を導出するには、ピラミッド・レベル・ゼロのこれらの地上点のセル座標をGeoRaster SRSを使用して最初に取得してから、特定のピラミッド・レベルに変換します。GeoRasterがピラミッドのサブセル・アドレッシングを、そのAPIのすべての部分においてサポートします。

ピラミッドは、GeoRasterオブジェクトと同じラスター・データ表に格納されます。ラスター・データ表内のpyramidLevel属性は、特定のピラミッド・レベルに関連付けられたすべてのブロックを示します。通常、各ピラミッド・レベルでのブロック化方法は、(GeoRasterオブジェクト・メタデータに定義されている)元のレベルのブロック化方法と同じですが、次の例外があります。

  • 元のGeoRasterオブジェクトがブロック化されておらず、元のセル・データがオブジェクトと同じサイズの1つのブロック(BLOB)に格納されている場合、各ピラミッド・レベルのセル・データは1つのブロックに格納され、各ピラミッド・レベルの実際のイメージと同じサイズになります。

  • 元のGeoRasterオブジェクトがブロック化されている場合(1つのブロックとしてブロック化されている場合も)、各ピラミッド・レベルのセル・データは元のレベルのデータと同じ方法でブロック化され、各ブロックは、ピラミッド・レベルの実際のイメージの最大次元サイズがブロック・サイズより大きい場合、個別のBLOBオブジェクトに格納されます。ただし、生成されるピラミッド・レベルの解像度がより低くなる場合(ピラミッド・レベルの行次元と列次元の両方のサイズが、それぞれ行ブロック・サイズと列ブロック・サイズの半分以下である場合)、そのようなピラミッド・レベルのセル・データは1つのBLOBオブジェクトに格納され、そのピラミッド・レベルの実際のイメージと同じサイズになります。

GeoRasterオブジェクトのピラミッドを生成するか、またはGeoRasterオブジェクトをスケール変更する際は、セル・データのリサンプリングが必要になります。GeoRasterは、標準のリサンプリング・メソッド(「リサンプリングおよび内挿」を参照)を提供します。

次のサブプログラムは、ピラミッドに対するGeoRasterサポートに関係があります。