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 句の条件に合致するレコードだけが返されます。
-
使用しているデータベース管理システム(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 の格納プロパティを取得しています。
-
使用している 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 引数を指定すると、エラーが返されます。
-
使用している 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 を返します。
-
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 関数を追加すると、カラーマップを持つレコードだけ、または持たないレコードだけを取得することができます。
-
使用している 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 を返します。
-
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 値に統計情報を持つレコードだけに結果をフィルタリングしています。その後、ラスタ値から統計情報が削除されます。
-
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 種類です。
- NONE: 格納時にデータを圧縮していません。
- LZ77: LZ77 では可逆の連長圧縮が使用されます。ばらつきが少ないデータの場合、または、他の圧縮アルゴリズムを使用できない場合に最適です。
- JPEG: JPEG は、この圧縮規格を開発した委員会である Joint Photographic Experts Group の略称です。JPEG は非可逆圧縮タイプです。JPEG 圧縮は、カラーマップ インデックスを持たない 8 ビット データだけに適用できます。
- JP2: これは JPEG 2000 ウェーブレット ベースの圧縮タイプです。この圧縮タイプは 8 ビットまたは 16 ビット データに適用できます。
ほとんどの場合は、LZ77 圧縮が使用されます。ただし、3 バンド 8 ビット データ、または、ばらつきの激しいグレースケール データでは JPEG 圧縮が使用されます。JPEG 2000 圧縮は通常、16 ビット データ用に予約されています。
以下の例では、describe 関数に storage 引数を指定し、WHERE 句で getCompressionType 関数を使用して、JPEG 圧縮された ST_Raster 値だけを取得しています。
-
使用している 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 値のピラミッド内挿タイプを返します。
-
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 値のインターリーブ タイプを返します。
-
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 タイプでは以下のピクセル タイプがサポートされています。
- 1bit: 1 ビット データ
- 4bit: 4 ビット データ
- uint8: 符号なしの 8 ビット整数
- int8: 符号付きの 8 ビット整数
- uint16: 符号なしの 16 ビット整数
- int16: 符号付きの 16 ビット整数
- uint32: 符号なしの 32 ビット整数
- int32: 符号付きの 32 ビット整数
- float: 単精度浮動小数点数
- double: 倍精度浮動小数点数
以下の UPDATE ステートメントは、ST_Raster 値のピクセル タイプが符号なしの 8 ビット整数である場合にだけ、ST_Raster 列のすべての ST_Raster 値にピラミッドを構築します。
-
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';