12.1 SDO_GEOR_RA.classify

形式

単一のGeoRasterオブジェクトの操作

SDO_GEOR_RA.classify(
     inGeoRaster   IN SDO_GEORASTER, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.classify(
     inGeoRaster   IN SDO_GEORASTER,
     cropArea      IN SDO_NUMBER_ARRAY, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_RA.classify(
     inGeoRaster   IN SDO_GEORASTER, 
     cropArea      IN SDO_GEOMETRY, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     polygonClip   IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.classify(
     inGeoRaster  IN SDO_GEORASTER,
     cropArea     IN SDO_NUMBER_ARRAY,
     expression   IN VARCHAR2,
     rangeArray   IN SDO_NUMBER_ARRAY,
     valueArray   IN SDO_NUMBER_ARRAY,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     nodata       IN VARCHAR2 DEFAULT 'false',
     nodataValue  IN NUMBER default 0);
SDO_GEOR_RA.classify(
     inGeoRaster  IN SDO_GEORASTER,
     cropArea     IN SDO_GEOMETRY,
     expression   IN VARCHAR2,
     rangeArray   IN SDO_NUMBER_ARRAY,
     valueArray   IN SDO_NUMBER_ARRAY,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     nodata       IN VARCHAR2 DEFAULT 'FALSE',
     nodataValue  IN NUMBER default 0,
     polygonClip  IN VARCHAR2 DEFAULT 'FALSE');

GeoRasterオブジェクトの配列の操作

SDO_GEOR_RA.classify(
     georArray     IN SDO_GEORASTER_ARRAY, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.classify(
     georArray     IN SDO_GEORASTER_ARRAY, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_RA.classify(
     georArray     IN SDO_GEORASTER_ARRAY, 
     cropArea      IN SDO_GEOMETRY, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     polygonClip   IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.classify(
     georArray    IN SDO_GEORASTER_ARRAY,
     cropArea     IN SDO_NUMBER_ARRAY,
     expression   IN VARCHAR2,
     rangeArray   IN SDO_NUMBER_ARRAY,
     valueArray   IN SDO_NUMBER_ARRAY,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     nodata       IN VARCHAR2 DEFAULT 'FALSE',
     nodataValue  IN NUMBER default 0);
SDO_GEOR_RA.classify(
     georArray    IN SDO_GEORASTER_ARRAY,
     cropArea     IN SDO_GEOMETRY,
     expression   IN VARCHAR2,
     rangeArray   IN SDO_NUMBER_ARRAY,
     valueArray   IN SDO_NUMBER_ARRAY,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     nodata       IN VARCHAR2 DEFAULT 'FALSE',
     nodataValue  IN NUMBER default 0,
     polygonClip  IN VARCHAR2 DEFAULT 'FALSE');

カーソルで指定したGeoRasterオブジェクトの操作

SDO_GEOR_RA.classify(
     inGeoRasters  IN SYS_REFCURSOR, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.classify(
     inGeoRasters  IN SYS_REFCURSOR, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_RA.classify(
     inGeoRasters  IN SYS_REFCURSOR, 
     cropArea      IN SDO_GEOMETRY, 
     expression    IN VARCHAR2, 
     rangeArray    IN SDO_NUMBER_ARRAY, 
     valueArray    IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     polygonClip   IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.classify(
     inGeoRasters IN SYS_REFCURSOR,
     cropArea     IN SDO_NUMBER_ARRAY,
     expression   IN VARCHAR2,
     rangeArray   IN SDO_NUMBER_ARRAY,
     valueArray   IN SDO_NUMBER_ARRAY,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     nodata       IN VARCHAR2 DEFAULT 'FALSE',
     nodataValue  IN NUMBER default 0);
SDO_GEOR_RA.classify(
     inGeoRasters IN SYS_REFCURSOR,
     cropArea     IN SDO_GEOMETRY,
     expression   IN VARCHAR2,
     rangeArray   IN SDO_NUMBER_ARRAY,
     valueArray   IN SDO_NUMBER_ARRAY,
     storageParam IN VARCHAR2 DEFAULT NULL,
     rasterBlob   IN OUT BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     nodata       IN VARCHAR2 DEFAULT 'FALSE',
     nodataValue  IN NUMBER default 0,
     polygonClip  IN VARCHAR2 DEFAULT 'FALSE');

説明

指定した分類操作を1つ以上の入力GeoRasterオブジェクトに対して適用した後に、新しいGeoRasterオブジェクトを生成します。

3つの入力GeoRasterオブジェクトごとにいくつかの形式またはオブジェクト指定オプションがあります(SDO_GEORASTER、SDO_GEORASTER_ARRAY、SYS_REEFCURSOR)。それぞれの形式グループ内では、SDO_NUMBER_ARRAYまたはSDO_GEOMETRYの非クロッピング領域とクロッピング領域を指定できます。SDO_GEOMETRYのクロッピング領域の場合、ポリゴン・クリップ・オプションを指定でき、出力はGeoRasterオブジェクトまたはBLOBです。

パラメータ

inGeoRaster

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

georArray

GeoRasterオブジェクトの配列を指定します。データ型はSDO_GEOR_ARRAYで、VARRAY(10485760) OF SDO_GEORASTERとして定義されます。

inGeoRasters

入力GeoRasterオブジェクトのカーソル(SYS_REFCURSOR型)を指定します。

cropArea

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

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

expression

セル値を分類するために使用する算術式を指定します。このパラメータの指定方法の詳細は、「使用上のノート」を参照してください。

rangeArray

セル値を分類するための範囲を定義する数値配列を指定します。配列には、1つ以上の要素が含まれている必要があります。

valueArray

各範囲のターゲット・セル値を定義する数値配列を指定します。要素の数は、rangeArrayの要素より1つ多くする必要があります(その長さがrangeArray+1である必要があります)。

storageParam

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

outGeoRaster

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

rasterBlob

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

outArea

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

outWindow

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

nodata

文字列TRUEは、式評価に関与するセル値にNODATA値がある場合、式がNODATA値として評価され、出力GeoRasterオブジェクトの対応するセルには、nodataValueパラメータに指定された値が設定されることを示します。文字列FALSE (デフォルト)では、NODATA値を含むセルが通常のデータとみなされます。NODATA値および値の範囲の詳細は、「NODATA値および値の範囲」を参照してください。

nodataValue

nodataパラメータ値が文字列TRUEである場合にNODATAセルを設定するために使用する値を指定します。

polygonClip

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

parallelParam

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

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

使用上のノート

このプロシージャでは、1つ以上の入力GeoRasterオブジェクトおよびexpressionパラメータ(算術式の文字列)に基づいて、GeoRasterオブジェクトまたは単一のBLOBに新しいラスターが生成されます。出力GeoRasterオブジェクトのセルごとに、入力GeoRasterオブジェクトの対応するセル値に対してexpressionが評価され、次のアルゴリズムを使用して出力GeoRasterオブジェクトのセル値が計算されます。

if  (value of expression < rangeArray[0])
    cellValue=valueArray[0]
else if (value of expression >= rangeArray[n-1])
    cellValue=valueArray[n]
else if rangeArray[m-1] <= value of expression < rangeArray[m]
     cellValue=valueArray[m]

expressionの計算:

  • rangeArrayの長さはn

  • valueArrayの長さはn+1

  • 0 < m < n-1

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

入力GeoRasterオブジェクトごとにいくつかの形式またはオブジェクト指定オプションがあります(SDO_GEORASTER、SDO_GEORASTER_ARRAY、SYS_REFCURSOR)。それぞれの形式グループ内では、SDO_NUMBER_ARRAYまたはSDO_GEOMETRYの非クロッピング領域とクロッピング領域を指定できます。SDO_GEOMETRYのクロッピング領域の場合、ポリゴン・クリップ・オプションを指定でき、出力はGeoRasterオブジェクトまたはBLOBです。

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

次の例では、1番目のレイヤーのセル値に基づいてセル値を分類します。出力はGeoRasterオブジェクトです。

DECLARE 
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  rangeArray SDO_NUMBER_ARRAY;
  valueArray SDO_NUMBER_ARRAY;
BEGIN
  rangeArray:=sdo_number_array(70,80,90,100,110,120,130,140,150,160,170,180);
  valueArray:=sdo_number_array(70,80,90,100,110,120,130,140,150,160,170,180,190);
  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.classify(geor,'{0}',rangeArray,valueArray,null,geor1);
  update georaster_table set georaster = geor1 where georid = 5;
  commit;
END;
/

次の例では、1番目のレイヤーのセル値に基づいてセル値を分類します。出力はBLOBです。

DECLARE 
  geor       SDO_GEORASTER;
  out_lob    BLOB;
  outArea sdo_geometry;
  outWindow sdo_number_array;
  rangeArray SDO_NUMBER_ARRAY;
  valueArray SDO_NUMBER_ARRAY;
BEGIN
  rangeArray:=sdo_number_array(70,80,90,100,110,120,130,140,150,160,170,180);
  valueArray:=sdo_number_array(70,80,90,100,110,120,130,140,150,160,170,180,190);
  select georaster into geor from georaster_table where georid = 1;
  dbms_lob.create_temporary(out_lob, TRUE);
  sdo_geor_ra.classify(geor,'{0}',rangeArray,valueArray,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;
/