7.108 SDO_GEOR.mask

形式

SDO_GEOR.mask(
     inGeoRaster   IN SDO_GEORASTER, 
     bandNumbers   IN VARCHAR2, 
     mask          IN SDO_GEORASTER, 
     storageParam  IN VARCHAR2, 
     outGeoraster  IN OUT SDO_GEORASTER, 
     zeroMapping   IN NUMBER DEFAULT 0, 
     oneMapping    IN NUMBER DEFAULT 1, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL);

説明

既存の(入力) GeoRasterオブジェクトの指定したレイヤーにマスクを適用します。マスクGeoRasterオブジェクトと入力GeoRasterオブジェクトは、同じ記憶域形式または異なる記憶域形式を持つことが可能で、出力GeoRasterオブジェクトの記憶域形式オプションを指定できます(ブロック化、セル深度またはインターリーブを変更するなど)。

使用するマスク値を決定する方法の詳細は、「使用上のノート」を参照してください。

パラメータ

inGeoRaster

新しいオブジェクトを作成するためにマスク処理を実行するSDO_GEORASTERオブジェクトを指定します。

bandNumbers

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

mask

出力GeoRasterオブジェクトを生成するために入力GeoRasterオブジェクトに対してマスクとして使用するSDO_GEORASTERオブジェクトを指定します。このパラメータをNULLとして指定すると、入力GeoRasterオブジェクトの使用可能なアタッチ済マスクが、指定したレイヤーに適用されます。

storageParam

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

outGeoRaster

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

出力GeoRasterオブジェクトに既存のラスター・データが含まれる場合、マスク操作が実行される前に削除されます。出力GeoRasterオブジェクトは、このファンクションの結果として上書きされます。

zeroMapping

マスク・セル値0 (ゼロ)に使用する値を指定します。デフォルト値は0 (ゼロ)です。

oneMapping

マスク・セル値1に使用する値を指定します。デフォルト値は1です。

bgValues

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

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

使用上のノート

maskパラメータと組み合せて使用するマスク値を決定するには、次のロジックを適用します。

If(cellValue_mask==0)
   cellValue_target=cellValue_source * zeroMapping;      
else
   cellValue_target=cellValue_source * oneMapping;

説明:

  • cellValue_sourceは、座標(x,y)でのinGeorasterのセル値です。

  • cellValue_targetは、座標(x,y)でのoutGeorasterのセル値です。

  • cellValue_maskは、座標(x,y)でのmaskのセル値です。

inGeoRasterがNULLの場合、操作は実行されません。

inGeoRasterにピラミッド・データが存在する場合、mask GeoRasterオブジェクトに、inGeoRasterと同じ数以上のピラミッド・レベルが含まれる必要があります。

maskがNULLでない場合、次元(行および列)サイズをinGeoRasterと同じにする必要があります。maskinGeoRasterで重複している必要があります。(SDO_GEOR_RA.isOverlapファンクションを使用して、重複を確認できます。)

maskがNULLで、指定したレイヤーで使用できるアタッチ済マスクがない場合、inGeoRasterは、(storageParamの指定に従って変更される) outGeoRasterにコピーされます。

このファンクションとSDO_GEOR.setBitmapMaskファンクションの対比: SDO_GEOR.maskはレイヤーのセル値を計算してそれらをターゲットGeoRasterオブジェクトに格納しますが、SDO_GEOR.setBitmapMaskはマスク・データをソースGeoRasterオブジェクトの指定したレイヤーに関連付けます。

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

  • inGeoRasterが無効である。

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

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

次の例では、マスクGeoRasterオブジェクトgr2をソースGeoRasterオブジェクトgr1に適用します。(GEORASTER_TABLEという名前の表を参照します。この表の定義は「記憶域パラメータ」例1-1の次に説明されています。)

DECLARE
  gr1 sdo_georaster;
  gr2 sdo_georaster;
  gr3 sdo_georaster;
BEGIN
  select tmimage into gr1 from landsat where id=103;
  select tmimage into gr3 from landsat where id=1015;
  select grobj into gr2 from grtab where id=1;
  SDO_GEOR.mask(gr1,null,gr2,'blocksize=(100,100,3)',gr3,0.1,0.9,null);
  update landsat set tmimage=gr3 where id=1007;  
END;
/

次の例では、ソースGeoRasterオブジェクトgr1のアタッチ済マスクをその2番目のレイヤーに適用します。

DECLARE
  gr1 sdo_georaster;
  gr2 sdo_georaster;
  gr3 sdo_georaster;
BEGIN
  select tmimage into gr1 from landsat where id=103;
  select tmimage into gr3 from landsat where id=1015;
  gr2:=null;
  SDO_GEOR.mask(gr1,'1',gr2,'blocksize=(100,100,3)',gr3,0.1,0.9,null);
  update landsat set tmimage=gr3 where id=1007;  
END;
/