12 SDO_GEOR_RAパッケージのリファレンス

SDO_GEOR_RAパッケージには、GeoRasterに関連するラスター代数および分析操作のためのサブプログラム(ファンクションおよびプロシージャ)が含まれます。この章では、そのサブプログラムのリファレンス情報を、例を使用して説明します。

この章のサブプログラムを使用するには、ラスター代数および分析で説明する主要な概念と技術を理解する必要があります。

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, 
     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, 
     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, 
     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,
     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,
     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, 
     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, 
     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, 
     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,
     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,
     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, 
     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, 
     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, 
     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,
     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,
     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;
/

12.2 SDO_GEOR_RA.diff

形式

SDO_GEOR_RA.diff(
     geor          IN SDO_GEORASTER, 
     geor1         IN SDO_GEORASTER, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_RA.diff(
     geor          IN SDO_GEORASTER, 
     geor1         IN SDO_GEORASTER, 
     cropArea      IN SDO_GEOMETRY, 
     storageParam  IN VARCHAR2, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     ploygonClip   IN VARCHAR2 DEFAULT 'FALSE',
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.diff(
     geor          IN SDO_GEORASTER,
     geor1         IN SDO_GEORASTER,
     cropArea      IN SDO_GEOMETRY,
     storageParam  IN VARCHAR2,
     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.diff(
     geor          IN SDO_GEORASTER,
     geor1         IN SDO_GEORASTER,
     cropArea      IN SDO_GEOMETRY,
     storageParam  IN VARCHAR2,
     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');

説明

diff操作を実行して、新しいGeoRasterオブジェクトを生成します(「使用上のノート」を参照)。新しいラスターはGeoRasterオブジェクトまたは単一のBLOBにあります。

パラメータ

geor

最初の入力GeoRasterオブジェクト。

geor1

2番目の入力GeoRasterオブジェクト。

cropArea

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

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

storageParam

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

outGeoRaster

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

rasterBlob

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

outArea

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

outWindow

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

nodata

文字列TRUEでは、入力GeoRasterオブジェクトの任意の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を指定すると、このプロシージャの結果をロールバックできません(「使用上のノート」を参照)。

使用上のノート

このプロシージャは、2つの入力GeoRasterオブジェクトを取得してover操作を適用し、新しいGeoRasterオブジェクトを生成します。特に、各レイヤーのセル値ごとに、2つの入力オブジェクトの値が異なる場合は最初の入力の値が出力されますが、2つの入力オブジェクトの値が同じ場合は出力がゼロになります。

2つの入力GeoRasterオブジェクトは、同じ次元サイズおよび同じ数のバンドを使用する必要があります。それ以外の場合、ORA-13397エラーが生成されます。

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

詳細は、「論理演算」を参照してください。

次の例では、2つの入力GeoRasterオブジェクトのdiff操作を実行します。出力はGeoRasterオブジェクトです。

declare
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  geor2      SDO_GEORASTER;
  geom       sdo_geometry;
begin
  select georaster into geor from georaster_table where georid = 100;
  select georaster into geor1 from georaster_table where georid = 101;
  select georaster into geor2 from georaster_table where georid = 102 for update;
  geom:=null;
  sdo_geor_ra.diff(geor,geor1,geom,null,geor2);
  update georaster_table set georaster = geor2 where georid = 102;
end;
/

次の例では、2つの入力GeoRasterオブジェクトのdiff操作を実行します。出力はGeoRasterオブジェクトです。出力はBLOBです。

DECLARE 
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  out_lob    BLOB;
  outArea    sdo_geometry;
  outWindow  sdo_number_array;  
  geom       sdo_geometry;
BEGIN
  select georaster into geor from georaster_table where georid = 100;
  select georaster into geor1 from georaster_table where georid = 101;
  dbms_lob.create_temporary(out_lob, TRUE);
  geom:=null;
  sdo_geor_ra.diff(geor,geor1,geom,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;
/

12.3 SDO_GEOR_RA.findCells

形式

SDO_GEOR_AGGR.findCells(
     inGeoRaster   IN SDO_GEORASTER, 
     condition     IN VARCHAR2, 
     storageParam  IN VARCHAR2 
     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 
     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 
     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,
     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,
     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;
/

12.4 SDO_GEOR_RA.isOverlap

形式

SDO_GEOR.isOverlap(
     georaster1 IN SDO_GEORASTER, 
     georaster2 IN SDO_GEORASTER, 
     tolerance  IN NUMBER DEFAULT 0.5 
     ) RETURN VARCHAR2;

または

SDO_GEOR_RA.isOverlap(
     georArray IN SDO_GEORASTER_ARRAY, 
     tolerance IN NUMBER DEFAULT 0.5 
     ) RETURN VARCHAR2;

または

SDO_GEOR_RA.isOverlap(
     geor_cur  IN SYS_REFCURSOR, 
     tolerance IN NUMBER DEFAULT 0.5 
     ) RETURN VARCHAR2;

説明

文字列TRUE (2つ以上のGeoRasterオブジェクトが重複している場合)またはFALSE (2つ以上のGeoRasterオブジェクトが重複していない場合)を戻します。(地理参照の有無にかかわらず、2つのGeoRasterオブジェクトの重複を決定するために使用されるロジックについては、「使用上のノート」を参照してください。)

パラメータ

georaster1

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

georaster2

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

georArray

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

geor_cur

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

tolerance

セル空間の2つのセルがモデル空間で重複しているかどうかを決定するために使用される許容差の値を指定します。値は、0から1の間である必要があり、単位はセルです。たとえば、0.5 (デフォルト)では、セルの半分、つまり、2つのセル間の距離が0.5セル以下の場合にそれらのセルが重複していることになります。

使用上のノート

重複で比較されるGeoRasterオブジェクトは、すべて地理参照されているか、すべて地理参照されていない必要があります。

2つのGeoRasterオブジェクトが重複しているかどうかを決定するため、次のロジックが適用されます。

  1. 2つのGeoRasterオブジェクトの行または列の次元サイズが異なる場合、'FALSE'を戻します。それ以外の場合は、次のステップに進みます。

  2. 両方のGeoRasterオブジェクトが地理参照されているかどうかをチェックします。

    1. 一方が地理参照され、他方が地理参照されていない場合、'FALSE'を戻します。

    2. 両方とも地理参照されておらず、両方のGeoRasterオブジェクトのultCoordinateが同じである場合、'TRUE'を戻しますが、それ以外の場合、'FALSE'を戻します。

    3. 両方とも地理参照されている場合、次のステップに進みます。

  3. pqrおよびs多項式のpTypenVarsorderおよびnCoefficientsの値(「関数フィッティング地理参照モデル」を参照)をチェックします。いずれかが異なる場合、'FALSE'を戻しますが、それ以外の場合、次のステップに進みます。

  4. セル空間からモデル空間に対して左上、右上、左下および右下の4つの点を計算します。2つのGeoRasterオブジェクトの対応する点の距離が許容差内である場合(セル空間からモデル空間への変換)、'TRUE'を戻しますが、それ以外の場合、'FALSE'を戻します。

GeoRasterのラスター代数ファンクションでは、異なるGeoRasterオブジェクトのラスター・レイヤーが同じサイズで、相互に完全に重複している必要があります。2つ以上のGeoRasterオブジェクトにラスター代数操作を適用するか、他の操作を実行する前に、SDO_GEOR_RA.isOverlapファンクションを使用して、GeoRasterオブジェクトが同じサイズであり、同じ土地を対象範囲としているかどうかを判別できます。

次の例では、2つのGeoRasterオブジェクトが重複しているかどうかをチェックします。(ここでは、2つの異なる構文のファンクションを使用しています。)

DECLARE 
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
BEGIN
 
  SELECT georaster INTO geor FROM georaster_table WHERE georid = 1;
  SELECT georaster INTO geor1 FROM georaster_table WHERE georid = 30;
  dbms_output.put_line(sdo_geor_ra.isOverlap(geor,geor1,0.5));
END;
/
 
DECLARE 
  mycursor  sys_refcursor;
BEGIN
  OPEN mycursor FOR
    SELECT georaster FROM georaster_table WHERE georid = 1 or georid=30;
  dbms_output.put_line(sdo_geor_ra.isOverlap(mycursor,0.5));
END;
/

12.5 SDO_GEOR_RA.over

形式

SDO_GEOR_RA.over(
     geor          IN SDO_GEORASTER, 
     geor1         IN SDO_GEORASTER, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     storageParam  IN VARCHAR2, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_RA.over(
     geor          IN SDO_GEORASTER, 
     geor1         IN SDO_GEORASTER, 
     cropArea      IN SDO_GEOMETRY, 
     storageParam  IN VARCHAR2, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     ploygonClip   IN VARCHAR2 DEFAULT 'FALSE',
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.over(
     geor          IN SDO_GEORASTER,
     geor1         IN SDO_GEORASTER,
     cropArea      IN SDO_GEOMETRY,
     storageParam  IN VARCHAR2,
     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.over(
     geor          IN SDO_GEORASTER,
     geor1         IN SDO_GEORASTER,
     cropArea      IN SDO_GEOMETRY,
     storageParam  IN VARCHAR2,
     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’);

説明

over操作を実行して、GeoRasterオブジェクトまたは単一のBLOBに新しいラスターを生成します(「使用上のノート」を参照)。

パラメータ

geor

最初の入力GeoRasterオブジェクト。

geor1

2番目の入力GeoRasterオブジェクト。

cropArea

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

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

storageParam

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

outGeoRaster

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

rasterBlob

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

outArea

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

outWindow

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

nodata

文字列TRUEでは、入力GeoRasterオブジェクトの任意の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を指定すると、このプロシージャの結果をロールバックできません(「使用上のノート」を参照)。

使用上のノート

このプロシージャは、2つの入力GeoRasterオブジェクトを取得してover操作を適用し、GeoRasterオブジェクトまたは単一のBLOBに新しいラスターを生成します。特に、出力ラスターの各レイヤーの各セルには、値がゼロでない場合に最初の入力GeoRasterオブジェクトの対応するセルの値が含まれます。それ以外の場合、2番目のGeoRasterオブジェクトの対応するセルの値が含まれます。

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

詳細は、「論理演算」を参照してください。

次の例では、2つの入力GeoRasterオブジェクトのover操作を実行します。出力はGeoRasterオブジェクト内にあります。

DECLARE
  geor       MDSYS.SDO_GEORASTER;
  geor1      MDSYS.SDO_GEORASTER;
  geor2      MDSYS.SDO_GEORASTER;
  geom       mdsys.sdo_geometry;
BEGIN
  select georaster into geor from georaster_table where georid = 100;
  select georaster into geor1 from georaster_table where georid = 101;
  select georaster into geor2 from georaster_table where georid = 102 for update;
  geom:=null;
  mdsys.sdo_geor_ra.over(geor,geor1,geom,null,geor2);
  update georaster_table set georaster = geor2 where georid = 102;
END;
/

次の例では、2つの入力GeoRasterオブジェクトのover操作を実行します。出力はBLOB内にあります。

DECLARE
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  out_lob    BLOB;
  outArea    sdo_geometry;
  outWindow  sdo_number_array;
  geom       sdo_geometry;
BEGIN
  select georaster into geor from georaster_table where georid = 100;
  select georaster into geor1 from georaster_table where georid = 101;
  dbms_lob.create_temporary(out_lob, TRUE);
  geom:=null;
  sdo_geor_ra.over(geor,geor1,geom,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;
/

12.6 SDO_GEOR_RA.rasterMathOp

形式

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

SDO_GEOR_RA.rasterMathOp(
     inGeoRaster   IN SDO_GEORASTER, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRaster   IN SDO_GEORASTER, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRaster   IN SDO_GEORASTER, 
     cropArea      IN SDO_GEOMETRY, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRaster   IN SDO_GEORASTER,
     cropArea      IN SDO_GEOMETRY,
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRaster   IN SDO_GEORASTER,
     cropArea      IN SDO_GEOMETRY,
     operation     IN SDO_STRING2_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.rasterMathOp(
     georArray     IN SDO_GEORASTER_ARRAY, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     georArray     IN SDO_GEORASTER_ARRAY, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     georArray     IN SDO_GEORASTER_ARRAY, 
     cropArea      IN SDO_GEOMETRY, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     georArray     IN SDO_GEORASTER_ARRAY,
     cropArea      IN SDO_GEOMETRY,
     operation     IN SDO_STRING2_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.rasterMathOp(
     georArray     IN SDO_GEORASTER_ARRAY,
     cropArea      IN SDO_GEOMETRY,
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRasters  IN SYS_REFCURSOR, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRasters  IN SYS_REFCURSOR, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRasters  IN SYS_REFCURSOR, 
     cropArea      IN SDO_GEOMETRY, 
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRasters  IN SYS_REFCURSOR,
     cropArea      IN SDO_GEOMETRY,
     operation     IN SDO_STRING2_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.rasterMathOp(
     inGeoRasters  IN SYS_REFCURSOR,
     cropArea      IN SDO_GEOMETRY,
     operation     IN SDO_STRING2_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’);

各レイヤーのすべての対応するセルの操作

SDO_GEOR_RA.rasterMathOp(
     georaster0    IN SDO_GEORASTER, 
     georaster1    IN SDO_GEORASTER, 
     constant      IN NUMBER, 
     operator      IN PLS_INTEGER, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.rasterMathOp(
     georaster0    IN SDO_GEORASTER, 
     georaster1    IN SDO_GEORASTER, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     constant      IN NUMBER, 
     operator      IN PLS_INTEGER, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_RA.rasterMathOp(
     georaster0    IN SDO_GEORASTER, 
     georaster1    IN SDO_GEORASTER, 
     cropArea      IN SDO_GHEOMETRY, 
     constant      IN NUMBER, 
     operator      IN PLS_INTEGER, 
     storageParam  IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     polygonClip   IN VARCHAR2 DEFAULT 'FALSE',
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.rasterMathOp(
     georaster0   IN SDO_GEORASTER,
     georaster1   IN SDO_GEORASTER,
     cropArea     IN SDO_GEOMETRY,
     constant     IN NUMBER,
     operator     IN PLS_INTEGER,
     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’,
     nodataValue  IN NUMBER default 0;
SDO_GEOR_RA.rasterMathOp(
     georaster0   IN SDO_GEORASTER,
     georaster1   IN SDO_GEORASTER,
     cropArea     IN SDO_GEOMETRY,
     constant     IN NUMBER,
     operator     IN PLS_INTEGER,
     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’,
     nodataValue  IN NUMBER default 0,
     polygonClip  IN VARCHAR2 DEFAULT ‘FALSE’);

説明

1つ以上のGeoRasterオブジェクトに対してラスター代数操作を実行します。これには、一般的な数学、統計、キャスト、論理および関係演算またはそれらの組合せが含まれます。

パラメータ

inGeoRaster

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

georArray

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

inGeoRasters

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

georaster0

左側のオペランドを指定します。

georaster1

右側のオペランドを指定します。

cropArea

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

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

operation

出力GeoRasterオブジェクトのラスター・セル値を計算するために使用されるarithmeticExpr式文字列の配列を指定します。配列の各要素は、出力GeoRasterオブジェクトのレイヤーに対応します。データ型はSDO_STRING2_ARRAYで、VARRAY(2147483647) OF VARCHAR2(4096)として定義されます。

arithmeticExpr式の構文については、「ラスター代数言語」を参照してください。

constant

addConstdivConstantなどの一部の演算子(operatorパラメータを参照)の定数値を指定します。

operator

SDO_GEOR_RAパッケージに定義されている次の数学演算子のいずれかを指定します。

OPERATOR_ABSOLUTE      
OPERATOR_ADD               
OPERATOR_ADDCONST  
OPERATOR_DIVIDE           
OPERATOR_DIVIDECONST
OPERATOR_EXP
OPERATOR_INVERT            
OPERATOR_LOG             
OPERATOR_MULTIPLY         
OPERATOR_MULTIPLYCONST 
OPERATOR_SUBTRACT   
OPERATOR_SUBTRACTCONST  

これらの演算子の定義については、「使用上のノート」を参照してください。

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は、数学的操作のオペランドに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を指定すると、このプロシージャの結果をロールバックできません(「使用上のノート」を参照)。

使用上のノート

このプロシージャは、それぞれ5形式の4グループとみなすことができる20個の形式を使用します。

  • 単一のGeoRasterオブジェクトの操作
  • GeoRasterオブジェクトの配列の操作
  • カーソルで指定したGeoRasterオブジェクトの操作(SYS_REFCURSOR型)
  • 各レイヤーまたは1つ以上のGeoRasterオブジェクトのすべての対応するセルの操作

各グループ内のオプションには、SDO_NUMBER_ARRAY型またはSDO_GEOMETRY型のクロッピング領域の指定(SDO_GEOMETRYのクロッピング領域の場合、クロッピング領域のジオメトリ・オブジェクトまたはそのオブジェクトのMBRを使用するかどうか)が含まれます。出力ラスターはGeoRasterオブジェクトまたは単一のBLOBに配置できます。

最初の3つのグループの構文を使用して、operationパラメータに基づいて、1つ以上の入力GeoRasterオブジェクトのレイヤーから新しいラスターを生成します。たとえば、次の例では、3つのレイヤーを持つ新しいGeoRasterオブジェクトを生成します(各レイヤーの値は、入力GeoRasterオブジェクトのセル値から10を引いた値になります)。

sdo_geor_ra.rasterMathOp(geor,SDO_STRING2_ARRAY('{0,0}-10','{0,1}-10','{0,2}-10'),null,geor1);

4番目のグループの構文では、入力GeoRasterオブジェクトの各レイヤーの対応するすべてのセルに対して数学的操作を適用し、最初の入力GeoRasterオブジェクト(geoRaster0)と同じ次元サイズで新しいGeoRasterオブジェクトを生成します。2つの入力GeoRasterオブジェクトの行、列およびバンドの次元サイズは、同じである必要があります。

4番目の形式グループについては、出力ラスターがGeoRasterオブジェクトの場合、すべてのピラミッドは結果のGeoRasterオブジェクトでは削除されますが、最初の入力GeoRasterオブジェクトのマスクは結果のGeoRasterオブジェクトでは維持されます。出力ラスターがBLOBにある場合、すべてのピラミッドとマスクは出力から削除されます。

operatorパラメータでは、演算子は次の定義を持ちます。

OPERATOR_ABSOLUTE  : 
 if (src[x][y][b] < 0) {
     dst[x][y][b] = -src[x][y][b];
 } else {
     dst[x][y][b] =  src[x][y][b];
 }

OPERATOR_ADD               
   dst[x][y][b]=src1[x][y][b]+src2[x][y][b]
OPERATOR_ADDCONST  
   dst[x][y][b]=src[x][y][b] +constant   --constant is the third parameter 
 
OPERATOR_DIVIDE           
   dst[x][y][b]=src1[x][y][b]/src2[x][y][b]
 
OPERATOR_DIVIDECONST
   dst[x][y][b]=src[x][y][b]/constant   --constant is the third parameter 
 
OPERATOR_EXP
   dst[x][y][b]=exp(src[x][y][b])
 
OPERATOR_INVERT        :
   Inverts the cell values: dst[x][y][b]=-src[x][y][b] 

OPERATOR_LOG           :  
   dst[x][y][b]=log(src[x][y][b])
 
OPERATOR_MULTIPLY         
   dst[x][y][b]=src1[x][y][b]*src2[x][y][b]
 
OPERATOR_MULTIPLYCONST 
   dst[x][y][b]=src[x][y][b]*constant   --constant is the third parameter 
 
OPERATOR_SUBTRACT   
   dst[x][y][b]=src1[x][y][b]-src2[x][y][b]
 
OPERATOR_SUBTRACTCONST
   dst[x][y][b]=src[x][y][b]-constant   --constant is the third parameter

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

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

次の例では、入力GeoRasterオブジェクトのすべてのセル値に定数10を追加します。出力はGeoRasterオブジェクトです。

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.rasterMathOp(geor,null,10,sdo_geor_ra.OPERATOR_ADDCONST,null,geor1);
  update georaster_table set georaster = geor1 where georid = 5;
  commit;
END;
/

次の例では、入力GeoRasterオブジェクトのすべてのセル値に定数10を追加します。出力は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.rasterMathOp(geor,null,10,sdo_geor_ra.OPERATOR_ADDCONST,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;
/

次の例では、入力GeoRasterオブジェクトの3つのレイヤーから新しい3レイヤーのGeoRasterオブジェクトを生成します(新しいGeoRasterオブジェクトの各セル値は、対応する古いセル値を2で割った値になります)。

DECLARE 
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  geo_array  SDO_GEORASTER_ARRAY;
BEGIN
  select georaster into geor from georaster_table where georid = 2;
  insert into georaster_table values (20, sdo_geor.init('rdt_1', 20)) returning georaster into geor1;
  geo_array:=SDO_GEORASTER_ARRAY(geor);
  sdo_geor_ra.rasterMathOp(geo_array,SDO_STRING2_ARRAY('{0,0}/2','{0,1}/2','{0,2}/2'),null,geor1);
  update georaster_table set georaster = geor1 where georid = 20;
  commit;
END;
/

次の例では、クロッピング領域としてジオメトリ・オブジェクトを使用したラスター数学的操作を実行します。

DECLARE
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  geom       SDO_GEOMETRY;
  geo_array  SDO_GEORASTER_ARRAY;
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;
  geo_array:=SDO_GEORASTER_ARRAY(geor);
  mdsys.sdo_geor_ra.rasterMathOp(geo_array,geom,SDO_STRING2_ARRAY('{0,0}/2','{0,1}/2','{0,2}/2'),null,geor1);
  update georaster_table set georaster = geor1 where georid = 101;
  commit;
END;
/

関連項目:

12.7 SDO_GEOR_RA.rasterUpdate

形式

SDO_GEOR_RA.rasterUpdate(
     geoRaster     IN OUT SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     conditions    IN SDO_STRING2_ARRAY, 
     vals          IN SDO_STRING2_ARRAYSET, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.rasterUpdate(
     geoRaster     IN OUT SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     targetArea    IN SDO_NUMBER_ARRAY, 
     conditions    IN SDO_STRING2_ARRAY, 
     vals          IN SDO_STRING2_ARRAYSET, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     parallelParam IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR_RA.rasterUpdate(
     geoRaster     IN OUT SDO_GEORASTER, 
     pyramidLevel  IN NUMBER, 
     targetArea    IN SDO_GEOMETRY, 
     conditions    IN SDO_STRING2_ARRAY, 
     vals          IN SDO_STRING2_ARRAYSET, 
     bgValues      IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     polygonClip   IN VARCHAR2 DEFAULT 'FALSE',
     parallelParam IN VARCHAR2 DEFAULT NULL);

説明

valsの指定から計算された値を使用して、conditionsの指定がTRUEのすべてのセルを更新します。

パラメータ

geoRaster

入力および出力で使用されるGeoRasterオブジェクトを指定します(更新は指定した条件に基づきます)。

pyramidLevel

更新するピラミッド・レベルを指定します。このパラメータがNULLの場合、すべてのピラミッド・レベルが更新されます。

targetArea

ターゲット領域の定義です。データ型がSDO_GEOMETRYであり、パラメータpolygonClipTRUEである場合、ターゲット領域ジオメトリ内のセルのみが更新され、ターゲット領域ジオメトリ外のすべてのセルは元の値を保持しますが、パラメータpolygonClipFALSEである場合はターゲット領域ジオメトリのMBRのすべてのセルが更新されます。

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

conditions

セルを選択するために使用するbooleanExpr式文字列の配列を指定します。(詳細は、「使用上のノート」を参照してください。)データ型はSDO_STRING2_ARRAYで、VARRAY(2147483647) OF VARCHAR2(4096)として定義されます。

vals

各条件に対応する外部配列と各レイヤーに対応する内部配列を持つarithmeticExpr式の1つ以上の配列を指定します。データ型はSDO_STRING2_ARRAYSETで、VARRAY(2147483647) OF SDO_STRING2_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値がconditionsパラメータの評価で考慮されることを意味します。conditionsパラメータの評価に関与するセル値にNODATA値がある場合、conditionsパラメータはFALSEとして評価されます(conditionsパラメータに関する使用上のノートを参照)。文字列FALSE (デフォルト)では、NODATA値を含むセルが通常のセルとみなされるため、更新対象になります。NODATA値および値の範囲の詳細は、「NODATA値および値の範囲」を参照してください。

polygonClip

targetAreaがNULLの場合は無視されます。それ以外の場合、文字列TRUEでは、targetAreaジオメトリ値がラスター・セル値の更新で使用されますが、文字列FALSEまたはNULL値では、targetAreaジオメトリのMBRがラスター・セル値の更新で使用されます。

parallelParam

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

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

使用上のノート

このプロシージャは、入力されたGeoRasterオブジェクトのデータを上書きするため、元のGeoRasterオブジェクトをコピーし、そのコピーしたオブジェクトに対してこのプロシージャを使用してください。このプロシージャの結果を確認してから、必要に応じて元のGeoRasterオブジェクトを廃棄します。

このプロシージャでは、conditionsパラメータに指定されたbooleanExpr文字列に基づいて、指定されたGeoRasterオブジェクトからセルを選択し、valsパラメータに指定されたarithmeticExpr式文字列を計算して対応するセル値を更新します。たとえば、

conditions = SDO_STRING2_ARRAY('{0}=48','{0}=108')
vals = SDO_STRING2_ARRAYSET(SDO_STRING2_ARRAY('123','54','89'),SDO_STRING2_ARRAY('98','56','123'))

次に:

  • 1番目のレイヤーの値が48に等しいすべてのセルで、その1番目、2番目、3番目のレイヤーの値がそれぞれ123、54、89に設定されます。

  • 1番目のレイヤーの値が108に等しいすべてのセルで、その1番目、2番目、3番目のレイヤーの値がそれぞれ98、56、123に設定されます。

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

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

次の例では、valsの指定から計算された値を使用して、conditionsの指定がTRUEのすべてのセルを更新します。

DECLARE 
  geor SDO_GEORASTER;
BEGIN
  select georaster into geor from georaster_table where georid = 1;
  sdo_geor_ra.rasterUpdate(geor,0,SDO_STRING2_ARRAY('(abs({0}-{1})=48)&({2}-{1}=-101)','2*{0}-{1}/3=108'),SDO_STRING2_ARRAYSET(SDO_STRING2_ARRAY('123','54','89'),SDO_STRING2_ARRAY('98','56','123')));
END;
/

12.8 SDO_GEOR_RA.stack

形式

SDO_GEOR_RA.stack(
     georArray     IN SDO_GEORASTER_ARRAY, 
     cropArea      IN SDO_NUMBER_ARRAY, 
     layerList     IN SDO_NUMBER_ARRAY, 
     method        IN VARCHARs, 
     storageParam  IN VARCHAR2, 
     outGeoRaster  IN OUT SDO_GEORASTER, 
     nodata        IN VARCHAR2 DEFAULT 'FALSE', 
     nodataValue   IN NUMBER DEFAULT 0, 
     parallelParam IN VARCHAR2 DEFAULT NULL);
SDO_GEOR_RA.stack(
     georArray     IN SDO_GEORASTER_ARRAY, 
     cropArea      IN SDO_GEOMETRY, 
     layerList     IN SDO_NUMBER_ARRAY, 
     method        IN VARCHARs, 
     storageParam  IN VARCHAR2, 
     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);

または

DO_GEOR_RA.stack(
     georArray    IN SDO_GEORASTER_ARRAY,
     cropArea     IN SDO_GEOMETRY,
     layerList    IN SDO_NUMBER_ARRAY,
     method       IN VARCHAR2,
     storageParam IN VARCHAR2,
     rasterBlob   IN OUT NOCOPY BLOB,
     outArea      OUT SDO_GEOMETRY,
     outWindow    OUT SDO_NUMBER_ARRAY,
     nodata       IN VARCHAR2 DEFAULT ‘FALSE’,
     nodataValue  IN NUMBER default 0,;
SDO_GEOR_RA.stack(
     georArray    IN SDO_GEORASTER_ARRAY,
     cropArea     IN SDO_GEOMETRY,
     layerList    IN SDO_NUMBER_ARRAY,
     method       IN VARCHAR2,
     storageParam IN VARCHAR2,
     rasterBlob   IN OUT NOCOPY 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配列のレイヤーのリストのローカル統計値である単一レイヤーのラスターをGeoRasterオブジェクトまたは単一のBLOBに生成します。入力レイヤーはlayerListパラメータで指定され、統計メソッドはmethodパラメータで指定されます。

パラメータ

georArray

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

cropArea

クロッピング領域を定義します。SDO_GEOMETRYオブジェクトにNULL以外のSRIDが含まれる場合、ソースGeoRasterオブジェクトは地理参照される必要がありますが、それ以外の場合、ソースGeoRasterオブジェクトは地理参照されても地理参照されなくてもかまいません。polygonClipFALSEの場合、cropAreaのMBRがデータをクロッピングするために使用されます。polygonClipTRUEの場合、cropAreaのジオメトリがデータをクロッピングするために使用されます。

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

layerList

出力する統計値を計算するために使用される入力GeoRasterオブジェクトのバンドを指定する数値の配列。たとえば、georArrayでは、2、3、4のバンドをそれぞれ使用する3つのGeoRasterオブジェクト(geor1geor2geor3)を指定します。レイヤー・リスト{0,3,7}を使用して、次の3つのバンドを指定します。

  • 最初のGeoRasterオブジェクトgeor1の最初のバンド

  • 2番目のGeoRasterオブジェクトgeor2の2番目のバンド

  • 3番目のGeoRasterオブジェクトgeor3の3番目のバンド

method

戻す必要があるローカル統計値を指定する文字列。次の値のいずれか(maxminmedianmeanstdsumminoritymajoritydiversity)を指定する必要があります。

storageParam

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

outGeoRaster

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

rasterBlob

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

outArea

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

outWindow

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

nodata

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

nodataValue

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

parallelParam

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

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

使用上のノート

すべての入力GeoRasterオブジェクトは同じ次元サイズを使用する必要があります。それ以外の場合、ORA-13397エラーが生成されます。

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

次の例では、2つの入力GeoRasterオブジェクトのstack操作を実行します。出力はGeoRasterオブジェクトです。

DECLARE
  geor       SDO_GEORASTER;
  geor1      SDO_GEORASTER;
  geor2      SDO_GEORASTER;
  geom       mdsys.sdo_geometry;
BEGIN
  geom:= sdo_geometry(2003,82394, NULL,
               sdo_elem_info_array(1, 1003, 1),
               sdo_ordinate_array(20283.775, 1011087.9,
                                  18783.775, 1008687.9,
                                  21783.775, 1008687.9,
                                  22683.775+0.001, 1009587.9+0.001,
                                  20283.775, 1011087.9));
  select georaster into geor from georaster_table where georid = 100;
  select georaster into geor2 from georaster_table where georid = 102;
  select georaster into geor1 from georaster_table where georid = 101 for update;
  sdo_geor_ra.stack(SDO_GEORASTER_ARRAY(geor,geor2),geom,SDO_NUMBER_ARRAY(3,5),'max',null,geor1,'false',0,'TRUE');
  update georaster_table set georaster = geor1 where georid = 101;
END;
/

次の例では、2つの入力GeoRasterオブジェクトのstack操作を実行します。出力はBLOBです。

DECLARE
  geor       SDO_GEORASTER;
  geor2      SDO_GEORASTER;
  geom       sdo_geometry;
  out_lob    BLOB;
  outArea    sdo_geometry;
  outWindow  sdo_number_array;
BEGIN
  geom:= null;
  select georaster into geor from georaster_table where georid = 100;
  select georaster into geor2 from georaster_table where georid = 102;
  dbms_lob.create_temporary(out_lob, TRUE);
  sdo_geor_ra.stack(SDO_GEORASTER_ARRAY(geor,geor2),geom,SDO_NUMBER_ARRAY(3,5),'max',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;
/