7.155 SDO_GEOR.subset

形式

SDO_GEOR.subset(
     inGeoRaster   IN SDO_GEORASTER, 
     cropArea      IN SDO_GEOMETRY, 
     layerNumbers  IN VARCHAR2, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     polygonClip   IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR.subset(
     inGeoRaster   IN SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     cropArea      IN SDO_GEOMETRY, 
     layerNumbers  IN VARCHAR2, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     polygonClip   IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR.subset(
     inGeoRaster   IN SDO_GEORASTER, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     bandNumbers   IN VARCHAR2, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL);

または

SDO_GEOR.subset(
     inGeoRaster   IN SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     bandNumbers   IN VARCHAR2, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL);

説明

(1)空間のクロッピング、切取りまたはクリップ、(2)レイヤーまたはバンドのサブセット化または複製のうち、いずれか(あるいは両方)の処理を実行します。

パラメータ

inGeoRaster

処理を実行するSDO_GEORASTERオブジェクトを指定します。

pyramidLevel

ソースGeoRasterオブジェクトのピラミッド・レベルを示す番号を指定します。

cropArea

クロッピング領域を定義します。データ型がSDO_NUMBER_ARRAYの場合、このパラメータで矩形ウィンドウの左上の座標(行,列)と右下の座標(行,列)を指定することによって、ラスター空間が想定されます。データ型がSDO_GEOMETRYの場合、ジオメトリ・オブジェクトの最小境界矩形(MBR)がクロッピング領域として使用されます(SDO_SRID要件の「使用上のノート」も参照してください)。

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

layerNumbers

処理を実行する論理レイヤー番号を示す文字列を指定します。カンマで値を区切り、ハイフンで範囲を指定します(たとえば、2-4はレイヤー2、3および4を示します)。

bandNumbers

処理を実行する物理バンド番号を示す文字列を指定します。カンマで値を区切り、ハイフンで範囲を指定します(たとえば、1-3はバンド1、2および3を示します)。

storageParam

記憶域パラメータを示す文字列を指定します(「記憶域パラメータ」を参照)。

outGeoRaster

新しいSDO_GEORASTERオブジェクトを指定します。既存の有効なGeoRasterオブジェクトまたは空のGeoRasterオブジェクトのいずれかであることが必要です。(空のGeoRasterオブジェクトの詳細は、「空白のGeoRasterオブジェクトと空のGeoRasterオブジェクト」を参照してください)。inGeoRasterと同じGeoRasterオブジェクトは指定できません。

bgValues

部分的に空のラスター・ブロックに入力する背景値を指定します。この値が有効なのは、ソースGeoRasterオブジェクトに空のラスター・ブロックが含まれており、現行の処理によって部分的に空のラスター・ブロック(「空のラスター・ブロック」を参照)が生成される場合のみです。SDO_NUMBER_ARRAYオブジェクト内の要素の数は、1つ(すべてのバンドに同じ入力値を使用)またはバンド次元のサイズ(各バンドにそれぞれ異なる入力値を使用)のいずれかであることが必要です。たとえば、SDO_NUMBER_ARRAY(1,5,10)では、1番目のバンドに1、2番目のバンドに5、3番目のバンドに10が入力されます。デフォルトのbgValuesは0 (ゼロ)です。

入力値は、スパース・データへの入力用としてターゲットのセル深度の背景値で指定された有効なセル値であることが必要です。

polygonClip

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

使用上のノート

このプロシージャには、様々な用途があります。たとえば、このプロシージャをコールしてGeoRasterオブジェクトの一部の領域をクロッピングしたり、いくつかのレイヤーのサブセットを取得すること、レイヤーを複製すること、および結果のオブジェクトの記憶域パラメータ(ブロック、インターリーブなど)を指定することもできます。

pyramidLevelパラメータを含む構文を使用して0 (ゼロ)より大きい値を指定した場合、ソースGeoRasterオブジェクトの指定したピラミッド・レベルに基づいてクロッピングが行われます。それ以外の場合は、元のソースGeoRasterオブジェクト(pyramidLevel = 0)に基づいてクロッピングが行われます。

ソースGeoRasterオブジェクトが地理参照されており、pyramidLevelパラメータ値が0 (ゼロ)より大きい場合、変換後のGeoRasterオブジェクトに地理参照情報が生成されるのは、有効な多項式変換で地理参照されている場合のみです。

この処理では、入力されるGeoRasterオブジェクトの上位レベルのピラミッド・データは考慮されず、出力されるGeoRasterオブジェクトにはピラミッド・データは含まれません。

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

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

  • MDSYS.CS_SRS表のSRID列の値

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

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

クリップ・ウィンドウ・ジオメトリ・オブジェクト自体を使用してGeoRasterオブジェクトをサブセット化するには、ジオメトリ・オブジェクトが2nn3または2nn7という形式のSDO_GTYPE値を持つ有効な2次元ポリゴン・ジオメトリ(単純または複数のポリゴン)である必要があります。他のSDO_GTYPE値には、polygonClipパラメータの値にかかわらず、ジオメトリ・オブジェクトのMBRが使用されます。(SDO_GTYPE値の詳細は、『Oracle Spatial開発者ガイド』を参照してください。)

クリップ・ウィンドウ・ジオメトリ・オブジェクト自体がサブセット・プロセスに適用される場合、ポリゴン内またはポリゴンのエッジに接しているすべてのセルが戻されますが、ジオメトリ・オブジェクトのMBR内の他のセルはクリップされます(指定した、またはデフォルトのbgValuesパラメータ値が入力されます)。

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

inGeoRasteroutGeoRasterには異なるGeoRasterオブジェクトを指定する必要があります。

処理対象として指定したウィンドウとソースGeoRasterオブジェクトの空間エクステントが重複する部分のみがコピーされます。

出力GeoRasterオブジェクトを異なる座標系に再投影する場合、SDO_GEOR.rectifyまたはSDO_GEOR.reprojectプロシージャを使用します。

次の1つ以上の条件に該当する場合、例外が発生します。

  • inGeoRasterが無効である。

  • outGeoRasterが初期化されていない。

  • outGeoRasterに対するラスター・データ表が存在せず、outGeoRasterが空白のGeoRasterオブジェクトではない。

  • 処理対象として指定したウィンドウが、GeoRasterオブジェクトの空間エクステントの外にある。

次の例では、元のGeoRasterオブジェクトの指定したウィンドウの特定のバンドのみが含まれるGeoRasterオブジェクトを作成します。(GEORASTER_TABLEという名前の表を参照します。この表の定義は「記憶域パラメータ」例1-1の次に説明されています。)

DECLARE
  gr1 sdo_georaster;
  gr2 sdo_georaster;
BEGIN
  INSERT INTO georaster_table (georid, georaster)
    VALUES (41, sdo_geor.init('RDT_1'))
    RETURNING georaster INTO gr2;

  SELECT georaster INTO gr1 FROM georaster_table WHERE georid=4;

  sdo_geor.subset(gr1, sdo_geometry(2003, NULL, NULL,
                               sdo_elem_info_array(1, 1003, 3),
                               sdo_ordinate_array(0,256,255,511)),
                  '3,1-2', null, gr2);
  UPDATE georaster_table SET georaster=gr2 WHERE georid=41;
  COMMIT;
END;
/

次の例は、ポリゴンを使用してGeoRasterオブジェクトをサブセット化する際にクリップを実行する方法を示しています。(GEORASTER_TABLEという名前の表を参照します。この表の定義は「記憶域パラメータ」例1-1の次に説明されています。)

DECLARE
  gr sdo_georaster;
  grsub sdo_georaster;
  win1 sdo_geometry;
BEGIN
  Delete from georaster_table where georid = 111;
  INSERT INTO georaster_table VALUES (111, 'ClippedImage', 
     sdo_geor.init('georaster_RDT', 111))
     RETURNING georaster INTO grsub;
  SELECT georaster INTO gr FROM georaster_table WHERE georid=1;
  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.subset(gr, 0, win1, '1-3', 
                  'interleaving = BIL, compression=DEFLATE',
                  grsub, NULL, 'TRUE');
  UPDATE georaster_table SET georaster=grsub WHERE georid=111;
  COMMIT;
END;
/