7.84 SDO_GEOR.getRasterSubset

形式

SDO_GEOR.getRasterSubset(
     georaster    IN SDO_GEORASTER, 
     pyramidLevel IN NUMBER DEFAULT 0, 
     window       IN SDO_NUMBER_ARRAY, 
     bandNumbers  IN VARCHAR2, 
     rasterBlob   IN OUT NOCOPY BLOB, 
     storageParam IN VARCHAR2 DEFAULT NULL, 
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL);

または

SDO_GEOR.getRasterSubset(
     georaster    IN SDO_GEORASTER, 
     pyramidLevel IN NUMBER DEFAULT 0,
     inWindow     IN SDO_NUMBER_ARRAY, 
     bandNumbers  IN VARCHAR2, 
     rasterBlob   IN OUT NOCOPY BLOB, 
     outWindow    OUT SDO_NUMBER_ARRAY, 
     storageParam IN VARCHAR2 DEFAULT NULL, 
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL);

または

SDO_GEOR.getRasterSubset(
     georaster    IN SDO_GEORASTER, 
     pyramidLevel IN NUMBER DEFAULT 0, 
     window       IN SDO_GEOMETRY, 
     layerNumbers IN VARCHAR2, 
     rasterBlob   IN OUT NOCOPY BLOB, 
     storageParam IN VARCHAR2 DEFAULT NULL, 
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     polygonClip  IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR.getRasterSubset(
     georaster    IN SDO_GEORASTER, 
     pyramidLevel IN NUMBER DEFAULT 0, 
     inWindow     IN SDO_GEOMETRY, 
     layerNumbers IN VARCHAR2, 
     rasterBlob   IN OUT NOCOPY BLOB, 
     outWindow    OUT SDO_NUMBER_ARRAY, 
     storageParam IN VARCHAR2 DEFAULT NULL, 
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     polygonClip  IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR.getRasterSubset(
     georaster    IN SDO_GEORASTER, 
     pyramidLevel IN NUMBER DEFAULT 0, 
     inWindow     IN SDO_NUMBER_ARRAY, 
     bandNumbers  IN VARCHAR2, 
     rasterData   IN OUT SDO_NUMBER_ARRAY, 
     outWindow    OUT SDO_NUMBER_ARRAY, 
     storageParam IN VARCHAR2 DEFAULT NULL, 
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL);

または

SDO_GEOR.getRasterSubset(
     georaster    IN SDO_GEORASTER, 
     pyramidLevel IN NUMBER DEFAULT 0, 
     inWindow     IN SDO_GEOMETRY, 
     layerNumbers IN VARCHAR2, 
     rasterData   IN OUT SDO_NUMBER_ARRAY, 
     outWindow    OUT SDO_NUMBER_ARRAY, 
     storageParam IN VARCHAR2 DEFAULT NULL, 
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     polygonClip  IN VARCHAR2 DEFAULT NULL);

または

FUNCTION SDO_GEOR.getRasterSubset(
     georaster    IN SDO_GEORASTER, 
     pyramidLevel IN NUMBER DEFAULT 0, 
     inWindow     IN SDO_GEOMETRY DEFAULT NULL, 
     layerNumber  IN NUMBER DEFAULT 1, 
     pointPolygon IN NUMBER DEFAULT 1, 
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     polygonClip  IN VARCHAR2 DEFAULT NULL
     ) RETURN SDO_GEOR_CELL_TABLE PIPELINED;

説明

このプロシージャ構文は、指定されたピラミッド・レベルで、指定された矩形ウィンドウまたはポリゴンのジオメトリ・オブジェクトの境界内または境界上に存在するすべてのセルを含む単一のBLOBオブジェクトまたは単一のSDO_NUMBER_ARRAYオブジェクトを作成します。ファンクション構文は、指定されたウィンドウ内および接するすべてのセルのセル値、ピラミッド、行、列、レイヤーおよび領域または点ジオメトリを保持するネストした表を戻します。

パラメータ

georaster

GeoRasterオブジェクトを指定します。

pyramidLevel

操作を実行するピラミッド・レベルを指定します。

window, inWindow

セルのクロッピング元となる矩形ウィンドウまたはポリゴンのジオメトリ・オブジェクトを指定します。データ型がSDO_NUMBER_ARRAYの場合、このパラメータで矩形ウィンドウの左上の座標(行,列)と右下の座標(行,列)を指定することによって、ラスター空間が想定されます。データ型がSDO_GEOMETRYでpolygonClip値がFALSEの場合、ジオメトリ・オブジェクトのMBRがウィンドウとして使用されますが、データ型がSDO_GEOMETRYでpolygonClip値がTRUEの場合、ポリゴンのジオメトリ・オブジェクト(有効な場合)がウィンドウとして使用されます。データ型がSDO_GEOMETRYの場合は、SDO_SRID要件の「使用上のノート」も参照してください。

windowまたはinWindowがSDO_NUMBER_ARRAY型の場合は、bandNumbersパラメータを使用して、1つ以上のバンド番号を指定します。windowまたはinWindowがSDO_GEOMETRY型の場合は、layerNumbersパラメータを使用して、1つ以上のレイヤー番号を指定します。

layerNumbers

処理を実行する論理レイヤー番号を示す文字列を指定します。カンマで値を区切り、ハイフンで範囲を指定します(たとえば、2-4はレイヤー2、3および4を示します)。このパラメータにNULL値を指定した場合、すべてのレイヤーで処理が実行されます。

layerNumber

ファンクション構文の場合、操作を実行するレイヤー番号。デフォルト値は1です。

bandNumbers

処理を実行する物理バンド番号を示す文字列を指定します。カンマで値を区切り、ハイフンで範囲を指定します(たとえば、1-3はバンド1、2および3を示します)。このパラメータにNULL値を指定した場合、すべてのバンドで処理が実行されます。

rasterBlob

処理の結果(モザイク処理されたラスター・サブセット)を格納するBLOBオブジェクトを指定します。処理の前に、存在しているか、または初期化されている必要があります。

rasterData

処理の結果(モザイク処理されたラスター・サブセット)を格納するSDO_NUMBER_ARRAYオブジェクトを指定します。

(ノート: SDO_NUMBER_ARRAYオブジェクトの要素番号の上限は1048576です。)

outWindow

セル空間内で出力ウィンドウの左上角および右下角の座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。

storageParam

rasterBlobの作成時に適用される記憶域パラメータを示す文字列を指定します。このプロシージャでサポートされているstorageParamキーワードはcelldepthcompressioninterleavingおよびqualityのみで、他のキーワードはすべて無視されます。記憶域パラメータについては、「記憶域パラメータ」を参照してください。

storageParamがNULLの場合、または指定されない場合は、セル深度、インターリーブ、圧縮タイプ(および該当する場合は圧縮品質)は、入力されたGeoRasterオブジェクトと同じになります。

pointPolygon

0の場合、ファンクションは各セルの境界ポリゴン・ジオメトリを戻します。1 (デフォルト)の場合、ファンクションは各セルの中央ポリゴン・ジオメトリを戻します。

bgValues

スパース・データに入力する背景値を指定します。SDO_NUMBER_ARRAYオブジェクト内の要素の数は、1つ(すべてのバンドに同じ入力値を使用)またはバンド次元のサイズ(各バンドにそれぞれ異なる入力値を使用)のいずれかであることが必要です。たとえば、SDO_NUMBER_ARRAY(1,5,10)では、1番目のバンドに1、2番目のバンドに5、3番目のバンドに10が入力されます。デフォルトのbgValuesは0 (ゼロ)です。

このパラメータは、空のラスター・ブロック(「空のラスター・ブロック」を参照)がソースに含まれる場合、および出力ウィンドウが空のラスター・ブロックと交差する場合に有効です。このパラメータを指定しない場合は、空のラスター・ブロックから導出される出力ウィンドウ内のすべてのセルは、出力のBLOBでは値0(ゼロ)が埋め込まれます。

polygonClip

文字列TRUEでは、windowまたはinWindowジオメトリ・オブジェクトがサブセット操作で使用されますが、文字列FALSEまたはNULL値では、windowまたはinWindowジオメトリ・オブジェクトの最小境界矩形(MBR)がサブセット操作で使用されます。

使用上のノート

このサブプログラムには、いくつかのプロシージャ構文およびファンクション構文があります。使用するプロシージャ構文は、入力ウィンドウの指定がジオメトリ・オブジェクトによるものとウィンドウの左上角および右下角によるもののいずれであるか、操作の結果がBLOBかSDO_NUMEBR_ARRAYオブジェクトか、およびoutWindowパラメータを使用して出力ウィンドウの座標を戻すかどうかによって異なります。

windowまたはinWindowパラメータのデータ型がSDO_GEOMETRYの場合、SDO_SRID値は次のいずれかの値である必要があります。

  • NULL(ラスター空間を指定)

  • MDSYS.CS_SRS表のSRID列の値

    windowパラメータ・ジオメトリとモデル空間のSDO_SRID値が異なる場合は、処理が実行される前に、windowパラメータ・ジオメトリは自動的にモデル空間の座標系に変換されます。(ラスター空間およびモデル空間の詳細は、「GeoRasterデータ・モデル」を参照してください。)

windowまたはinWindowパラメータで測地MBRを指定する場合は、日付変更線をまたぐMBRは指定できません。測地MBRについては、『Oracle Spatial開発者ガイド』を参照してください。

プロシージャが完了すると、rasterBLOBパラメータには、タイル処理されていないクロッピング済のウィンドウのセル(ピクセル)データが含まれます。クロッピング済のウィンドウとは、処理対象として指定したウィンドウとソースGeoRasterオブジェクトの空間エクステントが重複する部分のことです。outWindowパラメータを指定した場合は、プロシージャが完了すると、セル空間内のクロッピング済のウィンドウの座標がそのパラメータに含まれます。

BLOBには埋込みがありません。ただし、セル深度が8ビットより小さく、出力に必要なビット数の合計が8で除算できない場合を除きます。このような場合は、通常の埋込みとは異なり、結果の最後のバイトでのみ、後続のビットに対し0(ゼロ)が埋め込まれます。

polygonClipTRUEで、このプロシージャによって矩形イメージのサブセットが作成されるが、ジオメトリは矩形ではない場合、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションでinWindowジオメトリ・オブジェクトの妥当性を確認してください。無効なジオメトリに対しては、このプロシージャは、polygonClip値がFALSEまたはNULL値の場合のように動作します。

入力されたGeoRasterオブジェクトが圧縮されていない場合、またはstorageParamパラメータで指定した以外の形式で圧縮されている場合でも、圧縮を指定できます。圧縮済の入力されたGeoRasterオブジェクトに対して、解凍された出力を得るには、storageParamパラメータでcompression=NONEを指定します。GeoRasterの圧縮および解凍の詳細は、「圧縮と解凍」を参照してください。

サブセットを取得してそれを別の座標系に再投影する場合、このプロシージャは使用せず、かわりにrasterBlobパラメータを含む構文でSDO_GEOR.rectifyプロシージャを使用して、このBLOBに目的のサブセットが含まれるようにします。

ファンクション構文の結果のSDO_GEOR_CELL_TABLE型の定義は次のとおりです。

SDO_GEOR_CELL_TABLE TABLE OF MDSYS.SDO_GEOR_CELL
Name                           Null?     Type
------------------------------ --------  ----------------------------
VALUE                                    NUMBER
PYRAMIDLEVEL                             NUMBER
ROWNUMBER                                NUMBER
COLNUMBER                                NUMBER
LAYERNUMBER                              NUMBER
GEOM                                     MDSYS.SDO_GEOMETRY

次の2つの例は、指定されたウィンドウ内の指定されたピラミッド・レベルのラスター・データをBLOBオブジェクトおよびSDO_NUMBER_ARRAYオブジェクトに取得します。(GEORASTER_TABLE表を参照します。この表の定義は、記憶域パラメータ例1-1の次に説明されています。)

DECLARE
  gr sdo_georaster;
  lb blob;
  win sdo_number_array;
BEGIN
  SELECT georaster INTO gr FROM georaster_table WHERE georid=4;
  dbms_lob.createTemporary(lb, TRUE);
  win := sdo_number_array(-21,100,100,200);
  sdo_geor.getRasterSubset(gr, 0, win, null, lb);
  dbms_lob.freeTemporary(lb);
END;
/

DECLARE
  gr sdo_georaster;
  data sdo_number_array;
  win sdo_number_array;
BEGIN
  SELECT georaster INTO gr FROM georaster_table WHERE georid=4;
  win := sdo_number_array(-21,100,100,200);
  sdo_geor.getRasterSubset(gr, 0, win, null, data);
END;
/

次の例は、クロッピングの対象とするウィンドウの取得方法を示しています。

DECLARE
  gr sdo_georaster;
  lb blob;
  win1 sdo_geometry;
  win2 sdo_number_array;
BEGIN
  SELECT georaster INTO gr FROM georaster_table WHERE georid=4;
  dbms_lob.createTemporary(lb, TRUE);
  win1 := sdo_geometry(2003,82263,null,sdo_elem_info_array(1,1003,3),
                       sdo_ordinate_array(1828466,646447,1823400,642512));
  sdo_geor.getRasterSubset(gr, 0, win1, '1-3', lb, win2, 'compression=NONE');
  dbms_lob.freeTemporary(lb);
  IF win2 IS NOT NULL THEN
    dbms_output.put_line('output window: (' || win2(1) || ',' ||
                          win2(2) || ',' || win2(3) || ',' || win2(4) || ')');
  END IF;
END;
/

次の例は、ポリゴンを使用してサブセットを問い合せる際にクリップを実行する方法を示しています。

DECLARE
  gr sdo_georaster;
  lb blob;
  win1 sdo_geometry;
  win2 sdo_number_array;
BEGIN
  dbms_lob.createTemporary(lb, TRUE);
  SELECT georaster INTO gr FROM rstpoly_table WHERE georid=1;
  -- querying/clipping polygon
  win1 := sdo_geometry(2003, 26986, null, sdo_elem_info_array(1,1003,1),
                sdo_ordinate_array(237040,   897924, 
                                   237013.3, 897831.6,
                                   237129,   897840,
                                   237182.5, 897785.5, 
                                   237239.9, 897902.7,
                                   237223,   897954,
                                   237133,   897899,
                                   237040,   897924));
  sdo_geor.getRasterSubset(gr, 0, win1, '1-3', 
                           lb, win2, NULL, NULL, 'TRUE');
  -- Then work on the resulting subset stored in lb.
END;
/