ST_Raster のプロパティへのアクセス

難易度: 中級 データ要件 独自のデータを使用 目的: ST_Raster 値の情報を返す関数とその使用法について学習します。

ST_Raster タイプには、ST_Raster 値のプロパティを返す関数がいくつかあります。このトピックでは、そのような関数の使用例を紹介します。SQL の例は、実際のデータに適した値に変更してください。

describe 関数の使用

describe 関数を使用して ST_Raster 値のプロパティのリストを取得します。引数を指定せずに describe 関数を実行すると、ST_Raster 値の一般的なプロパティが返されます。

ラスタ値にカラーマップがある場合にカラーマップのプロパティを返すには、colormap 引数を指定します。ラスタ値にカラーマップがない場合にこの引数を指定すると、エラーが返されます。ST_Raster 値にカラーマップがある場合、hasColormap 関数は true(1)を返します。colormap 引数を指定すると、ST_Raster 値の一般的なプロパティに加えて、適用されたカラーマップ インデックスも返されます。

ST_Raster 値の格納プロパティを返すには、describe 関数で storage 引数を指定します。この場合、ピラミッド レベルとラスタ バンドの順にソートされた格納プロパティも返されます。格納プロパティには、各バンドとピラミッド レベル内のピクセル値の最小値、最大値、平均値、標準偏差があります。格納プロパティには、バンドとピラミッド レベル別のピクセルの総数や圧縮サイズも含まれます。

ST_Raster 値の一般的なプロパティの取得

引数を指定しないで ST_Raster の describe 関数を使用すると、各 ST_Raster 値の一般的なプロパティが返されます。

以下の例では、SELECT ステートメントで describe 関数を使用して、urban_areas テーブルの ST_Raster 値の一般的なプロパティを取得しています。WHERE 句の条件に合致するレコードだけが返されます。

手順:
  1. 使用しているデータベース管理システム(DBMS)に応じた SELECT ステートメントを使用します。

    Oracle

    SELECT t.raster.describe()
    FROM URBAN_AREA t
    WHERE NAME = 'ALL_CITIES';

    PostgreSQL

    SELECT describe(raster)
    FROM urban_area
    WHERE name = 'all_cities';

    SQL Server

    SELECT raster.describe(NULL)
    FROM urban_area
    WHERE name = 'all_cities';

ST_Raster 値の格納プロパティの取得

ST_Raster の describe 関数で storage 引数を指定すると、各 ST_Raster 値の一般的なプロパティに加えて格納プロパティが返されます。

以下の例では、describe 関数に storage 引数を指定して、urban_areas テーブルの ST_Raster の格納プロパティを取得しています。

手順:
  1. 使用している DBMS に応じた SELECT ステートメントを使用します。

    Oracle

    SELECT t.raster.describe('storage')
    FROM URBAN_AREA t
    WHERE NAME = 'ALL_CITIES';

    PostgreSQL

    SELECT describe(raster,'storage')
    FROM urban_area
    WHERE name = 'all_cities';

    SQL Server

    SELECT raster.describe('storage')
    FROM urban_area
    WHERE name = 'all_cities';

ST_Raster のカラーマップ インデックスの取得

ST_Raster の describe 関数で colormap 引数を指定すると、各 ST_Raster 値の一般的なプロパティとカラーマップ インデックスが返されます。ST_Raster 値にカラーマップがない場合に colormap 引数を指定すると、エラーが返されます。

手順:
  1. 使用している DBMS に応じた SELECT ステートメントを使用します。

    Oracle

    SELECT t.raster.describe('colormap')
    FROM URBAN_AREA t
    WHERE NAME = 'ALL_CITIES';

    PostgreSQL

    SELECT describe(raster,'colormap')
    FROM urban_area
    WHERE name = 'all_cities';

    SQL Server

    SELECT raster.describe('colormap')
    FROM urban_area
    WHERE name = 'all_cities';

hasColormap 関数によるカラーマップの存在の判定

hasColormap 関数を使用して、ST_Raster 値にカラーマップ インデックスが適用されているかどうかを判定します。hasColormap 関数は、カラーマップ インデックスが存在している場合、ブール型の true を返します。そうでない場合、false を返します。

SELECT 句で hasColormap 関数を使用すると、ST_Raster 値がカラーマップを持つ場合に 1、そうでない場合に 0 を返します。

手順:
  1. Oracle

    SELECT t.raster.hasColormap(), NAME 
    FROM URBAN_AREA t;

    PostgreSQL

    SELECT hasColormap(raster), name 
    FROM urban_area;

    SQL Server

    SELECT raster.hasColormap(), name 
    FROM urban_area;

カラーマップを持つレコードもしくは持たないレコードだけの取得

WHERE 句に hasColormap 関数を追加すると、カラーマップを持つレコードだけ、または持たないレコードだけを取得することができます。

手順:
  1. 使用している DBMS に応じた SELECT ステートメントを使用します。

    Oracle

    SELECT t.raster.describe('colormap')
    FROM URBAN_AREA t
    WHERE t.raster.hasColormap(raster) = 1;

    PostgreSQL

    SELECT describe(raster,'colormap')
    FROM urban_area
    WHERE hasColormap(raster) = 1;

    SQL Server

    SELECT raster.describe('colormap')
    FROM urban_area
    WHERE raster.hasColormap() = 1;

hasStats 関数による ST_Raster の統計情報が計算済みかどうかの判定

hasStats 関数は、ST_Raster 値の統計情報が計算されている場合、ブール型の true を返します。

ヒントヒント:

統計情報を計算するには、ST_Raster の buildStats 関数を使用します。統計情報を削除するには、ST_Raster の deleteStats 関数を使用します。

SELECT 句で hasStats 関数を使用して、ST_Raster 値の統計情報が計算済みかどうかを判定します。この関数は、ST_Raster 値が統計情報を持つ場合は 1、そうでない場合は 0 を返します。

手順:
  1. Oracle

    SELECT t.raster.hasStats(),NAME
    FROM URBAN_AREA t;

    PostgreSQL

    SELECT hasStats(raster),name
    FROM urban_area;

    SQL Server

    SELECT raster.hasStats(),name
    FROM urban_area;

WHERE 句に hasStats 関数を適用して、統計情報を持つレコードだけ、または持たないレコードだけを取得することができます。以下の例では、WHERE 句を使用して ST_Raster 値に統計情報を持つレコードだけに結果をフィルタリングしています。その後、ラスタ値から統計情報が削除されます。

手順:
  1. Oracle

    UPDATE URBAN_AREA t
    SET raster = t.raster.deleteStats()
    WHERE t.raster.hasStats() = 1;

    PostgreSQL

    UPDATE urban_area
    SET raster = deleteStats(raster)
    WHERE hasStats(raster) = 1;

    SQL Server

    UPDATE urban_area
    SET raster = raster.deleteStats()
    WHERE raster.hasStats() = 1;

ST_Raster の圧縮タイプの取得

getCompressionType 関数はラスタの圧縮プロパティを返します。使用可能な圧縮タイプは次の 4 種類です。

ほとんどの場合は、LZ77 圧縮が使用されます。ただし、3 バンド 8 ビット データ、または、ばらつきの激しいグレースケール データでは JPEG 圧縮が使用されます。JPEG 2000 圧縮は通常、16 ビット データ用に予約されています。

以下の例では、describe 関数に storage 引数を指定し、WHERE 句で getCompressionType 関数を使用して、JPEG 圧縮された ST_Raster 値だけを取得しています。

手順:
  1. 使用している DBMS に応じた SELECT ステートメントを使用します。

    Oracle

    SELECT t.raster.describe('storage')
    FROM URBAN_AREA t
    WHERE t.raster.getCompressionType() = 'JPEG';

    PostgreSQL

    SELECT describe(raster,'storage')
    FROM urban_area
    WHERE getCompressionType(raster) = 'JPEG';

    SQL Server

    SELECT raster.describe('storage')
    FROM urban_area
    WHERE raster.getCompressionType() = 'JPEG';

ST_Raster 値のピラミッド内挿タイプの判定

ピラミッド内挿タイプは、ピラミッド構築時のアルゴリズムです。ST_Raster タイプの getInterpolationType 関数は、ピラミッドの構築時に使用された内挿タイプを返します。ピラミッドが存在していない場合、この関数は null 値を返します。使用可能な内挿タイプは、NEAREST(最近隣)、BILINEAR(共一次)、BICUBIC(共三次)の 3 種類です。

一般に、共一次内挿タイプを使用できない場合は、最近隣ピラミッド内挿タイプが使用されます。通常は、結果がよりなめらかになるため、共一次内挿タイプが好まれます。ただし、共一次内挿タイプは、下位レベルのピクセル値が維持されないためカラーマップが適用されたデータに対しては使用できず、また、8 ビット未満のピクセル データに対して使用しても意味がありません。

以下のクエリは、ピラミッドを持つすべての ST_Raster 値のピラミッド内挿タイプを返します。

手順:
  1. Oracle

    SELECT t.raster.getInterpolationType()
    FROM URBAN_AREA t
    WHERE t.raster.getPyramidLevel() > 0;

    PostgreSQL

    SELECT getInterpolationType(raster)
    FROM urban_area
    WHERE getPyramidLevel(raster) > 0;

    SQL Server

    SELECT raster.getInterpolationType()
    FROM urban_area
    WHERE raster.getPyramidLevel() > 0;

ST_Raster 値のバンド インターリーブ タイプの判定

ST_Raster タイプは、バンド順(BSQ)と連接(BIP)両方のバンド インターリーブをサポートしています。

メモメモ:

ArcObjects および ArcObjects に基づいたアプリケーション(ArcGIS Desktop など)は、BSQ として格納されたデータだけを読み取ります。

BIP インターリーブは、(r0, g0, b0, r1, g1, b1 … rn, gn, bn) という順序で、シングル バンドとして格納された 3 バンド 8 ビット データだけに適用されます。一方、BSQ は (r0...rn),(g0...gn),(b0...bn) という別々の順序でバンドが格納されます。

以下のクエリでは、テーブルの ST_Raster 列の各 ST_Raster 値のインターリーブ タイプを返します。

手順:
  1. Oracle

    SELECT t.raster.getInterleaveType()
    FROM URBAN_AREA t;

    PostgreSQL

    SELECT getInterleaveType(raster)
    FROM urban_area;

    SQL Server

    SELECT raster.getInterleaveType()
    FROM urban_area;

ST_Raster のピクセル タイプの判定

getPixelType 関数は ST_Raster 値のピクセル タイプを返します。ST_Raster タイプでは以下のピクセル タイプがサポートされています。

以下の UPDATE ステートメントは、ST_Raster 値のピクセル タイプが符号なしの 8 ビット整数である場合にだけ、ST_Raster 列のすべての ST_Raster 値にピラミッドを構築します。

手順:
  1. Oracle

    UPDATE URBAN_AREA t
    SET raster = t.raster.buildPyramid('bilinear')
    WHERE t.raster.getPixelType() = 'UINT8';

    PostgreSQL

    UPDATE urban_area
    SET raster = buildPyramid(raster,'bilinear')
    WHERE getPixelType(raster) = 'UINT8';

    SQL Server

    UPDATE urban_area
    SET raster = raster.buildPyramid('bilinear')
    WHERE raster.getPixelType() = 'UINT8';

関連項目


3/6/2012