12.3 SDO_GEOR_RA.findCells

形式

SDO_GEOR_AGGR.findCells(
     inGeoRaster   IN SDO_GEORASTER, 
     condition     IN VARCHAR2, 
     storageParam  IN VARCHAR2 DEFAULT NULL,
     outGeoRaster  OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_AGGR.findCells(
     inGeoRaster   IN SDO_GEORASTER, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     condition     IN VARCHAR2, 
     storageParam  IN VARCHAR2 DEFAULT NULL,
     outGeoRaster  OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_AGGR.findCells(
     inGeoRaster   IN SDO_GEORASTER, 
     cropArea      IN SDO_GEOMETRY, 
     condition     IN VARCHAR2, 
     storageParam  IN VARCHAR2 DEFAULT NULL,
     outGeoRaster  OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     polygonClip   IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_AGGR.findCells(
     inGeoRaster  IN SDO_GEORASTER,
     cropArea     IN SDO_GEOMETRY,
     condition    IN VARCHAR2,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL,
     nodata       IN VARCHAR2 DEFAULT ‘FALSE’;
SDO_GEOR_AGGR.findCells(
     inGeoRaster  IN SDO_GEORASTER,
     cropArea     IN SDO_GEOMETRY,
     condition    IN VARCHAR2,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     bgValues     IN SDO_NUMBER_ARRAY DEFAULT NULL,
     nodata       IN VARCHAR2 DEFAULT ‘FALSE’,
     polygonClip  IN VARCHAR2 DEFAULT ‘FALSE’);

説明

入力GeoRasterオブジェクトに基づいて、GeoRasterオブジェクトまたは単一のBLOBに新しいラスターを生成しますが、conditionパラメータの指定を満たしていないすべてのセルをマスクします。

パラメータ

inGeoRaster

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

cropArea

クロッピング領域を定義します。データ型がSDO_GEOMETRYの場合、ジオメトリ・オブジェクトの最小境界矩形(MBR)が矩形クロッピング領域として使用され、出力GeoRasterオブジェクトが生成されます。SDO_SRID要件のSDO_GEOR.reprojectの「使用上のノート」も参照してください。パラメータpolygonClipTRUEである場合、クロッピング領域ジオメトリ内のセルのみが処理され、クロッピング領域ジオメトリ外のすべてのセルがゼロ(0)に設定されます。パラメータpolygonClipFALSEである場合、最小境界矩形内のすべてのセルが処理されます。

データ型がSDO_NUMBER_ARRAYの場合、このパラメータで矩形ウィンドウの左上の座標(行,列)と右下の座標(行,列)を指定することによって、ラスター空間が想定されます。

condition

セルを除外するために使用する式文字列を指定します。(詳細は、「使用上のノート」を参照してください。)

storageParam

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

outGeoRaster

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

rasterBlob

処理結果の出力を保持するBLOB。処理の前に、存在しているか、または初期化されている必要があります。

outArea

結果のオブジェクトのモデル座標系の最小境界矩形(MBR)を含むSDO_GEOMETRYオブジェクトを指定します。

outWindow

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

bgValues

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

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

nodata

文字列TRUEは、GeoRasterオブジェクト内にあるNODATAセルの元の値が保持され、NODATA値がconditionパラメータの評価で考慮されることを意味します。conditionパラメータの評価に関与するセル値にNODATA値がある場合、conditionパラメータはFALSEとして評価されます(conditionパラメータに関する使用上のノートを参照)。文字列FALSE (デフォルト)では、NODATA値を含むセルが通常のデータとみなされます。NODATA値および値の範囲の詳細は、「NODATA値および値の範囲」を参照してください。

polygonClip

cropAreaがNULLの場合は無視されます。それ以外の場合、文字列TRUEでは、cropAreaジオメトリがデータ処理で使用されますが、文字列FALSEまたはNULL値では、cropAreaジオメトリ・オブジェクトの最小境界矩形(MBR)がデータ処理で使用されます。

parallelParam

操作の並列度を指定します。指定する場合、parallel=nという形式である必要があります(nは1より大きい)。データベース・オプティマイザでは、このパラメータによって指定された並列度を使用します。指定しない場合、デフォルトでパラレル処理は行われません。(詳細は、「GeoRasterでのパラレル処理」を参照してください。)

parallelParamを指定すると、このプロシージャの結果をロールバックできません(「使用上のノート」を参照)。

使用上のノート

このプロシージャでは、入力GeoRasterオブジェクトおよびconditionパラメータ(ブール式文字列booleanExpr)に基づいて、GeoRasterオブジェクトまたは単一のBLOBに新しいラスターが生成されます。出力GeoRasterオブジェクトのセルごとに、入力GeoRasterオブジェクトの対応するセル値に対して条件が評価されます。セルのconditionがTRUEの場合、出力GeoRasterオブジェクトでは元のセル値が維持されますが、それ以外の場合、出力GeoRasterオブジェクトのセルに対してbgValuesが入力されます。

詳細は、「ラスター代数言語」を参照してください。

parallelParamを指定すると、プロシージャのいくつかの実行単位は、自律型トランザクションとして実行され、プロシージャの実行中に一部の変更はコミットされるため、それらの変更はロールバックできません。このパラメータを指定しない場合、すべての変更をロールバックできます。

次の例では、2番目のレイヤーのセル値が200以下の場合に、セル値をデフォルトの背景値0に変更します。

DECLARE
  geor  SDO_GEORASTER;
  geor1 SDO_GEORASTER;
BEGIN
  select georaster into geor from georaster_table where georid = 1;
  insert into georaster_table values (5, sdo_geor.init('rdt_1', 5)) returning georaster into geor1;
  sdo_geor_ra.findcells(geor, '{1}>200',null,geor1);
  update georaster_table set georaster = geor1 where georid = 5;
  commit;
END;
/

次の例では、2番目のレイヤーのセル値が200以下の場合に、セル値をデフォルトの背景値0に変更します。出力はBLOB内にあります。

DECLARE
  geor  SDO_GEORASTER;
  out_lob    BLOB;
  outArea    sdo_geometry;
  outWindow  sdo_number_array; 
BEGIN
  select georaster into geor from georaster_table where georid = 1;
  dbms_lob.create_temporary(out_lob, TRUE);  
  sdo_geor_ra.findcells(geor, '{1}>200',null,out_lob, outArea, outWindow);
  if outWindow is not null then
     dbms_output.put_line('output window: (' || outWindow(1) || ',' ||
                           outWindow(2) || ',' || outWindow(3) || ',' || outWindow(4) || ')');
  end if;
  dbms_lob.freeTemporary(out_lob);
END;
/

次の例では、ジオメトリ・オブジェクト(geom)を入力cropAreaとして使用します。

DECLARE
  geor       SDO_GEORASTER;
  geor0      SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  geom       SDO_GEOMETRY;
BEGIN
  geom:= sdo_geometry(2003,82394, NULL,
                         sdo_elem_info_array(1, 1003, 1),
                         sdo_ordinate_array(21783.775, 1008687.9,
                                           18783.775, 966687.905,
                                           63783.775, 966687.905,
                                           81783.775, 990687.905,
                                           21783.775, 1008687.9));
  select georaster into geor from georaster_table where georid = 100;
  select georaster into geor1 from georaster_table where georid = 101 for update;
  sdo_geor_ra.findcells(geor,geom,'({1}=42)','blocking=true, blocksize=(256,256,3)',geor1,null,'false');
  update georaster_table set georaster = geor1 where georid = 101;
END;
/