7.25 SDO_GEOR.generateStatistics

構文(メタデータに格納する)

SDO_GEOR.generateStatistics(
     georaster      IN OUT SDO_GEORASTER, 
     samplingFactor IN VARCHAR2, 
     samplingWindow IN SDO_NUMBER_ARRAY, 
     histogram      IN VARCHAR2, 
     layerNumbers   IN VARCHAR2 DEFAULT NULL, 
     useBin         IN VARCHAR2 DEFAULT 'TRUE', 
     binFunction    IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata         IN VARCHAR2 DEFAULT 'FALSE' 
     ) RETURN VARCHAR2;

または

SDO_GEOR.generateStatistics(
     georaster      IN OUT SDO_GEORASTER, 
     samplingFactor IN VARCHAR2, 
     samplingWindow IN SDO_GEOMETRY, 
     histogram      IN VARCHAR2, 
     layerNumbers   IN VARCHAR2 DEFAULT NULL, 
     useBin         IN VARCHAR2 DEFAULT 'TRUE', 
     binFunction    IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     nodata         IN VARCHAR2 DEFAULT 'FALSE' 
     ) RETURN VARCHAR2;

構文(メタデータに格納しない)

SDO_GEOR.generateStatistics(
     georaster      IN SDO_GEORASTER, 
     pyramidLevel   IN NUMBER, 
     samplingFactor IN VARCHAR2, 
     samplingWindow IN SDO_NUMBER_ARRAY, 
     bandNumbers    IN VARCHAR2 DEFAULT NULL, 
     nodata         IN VARCHAR2 DEFAULT 'FALSE',
     parallelParam  IN VARCHAR2 DEFAULT NULL
     ) RETURN SDO_NUMBER_ARRAY;

または

SDO_GEOR.generateStatistics(
     georaster      IN SDO_GEORASTER, 
     pyramidLevel   IN NUMBER, 
     samplingFactor IN VARCHAR2, 
     samplingWindow IN SDO_GEOMETRY, 
     bandNumbers    IN VARCHAR2 DEFAULT NULL, 
     nodata         IN VARCHAR2 DEFAULT 'FALSE',
     polygonClip    IN VARCHAR2 DEFAULT NULL, 
     parallelParam  IN VARCHAR2 DEFAULT NULL
     ) RETURN SDO_NUMBER_ARRAY;

または

SDO_GEOR.generateStatistics(
     georaster      IN SDO_GEORASTER, 
     mask           IN SDO_GEORASTER,
     pyramidLevel   IN NUMBER, 
     samplingFactor IN VARCHAR2, 
     samplingWindow IN SDO_NUMBER_ARRAY, 
     bandNumbers    IN VARCHAR2 DEFAULT NULL, 
     nodata         IN VARCHAR2 DEFAULT 'FALSE',
     parallelParam  IN VARCHAR2 DEFAULT NULL
     ) RETURN SDO_NUMBER_ARRAY;

または

SDO_GEOR.generateStatistics(
     georaster      IN SDO_GEORASTER, 
     mask           IN SDO_GEORASTER,
     pyramidLevel   IN NUMBER, 
     samplingFactor IN VARCHAR2, 
     samplingWindow IN SDO_GEOMETRY, 
     bandNumbers    IN VARCHAR2 DEFAULT NULL, 
     nodata         IN VARCHAR2 DEFAULT 'FALSE',
     polygonClip    IN VARCHAR2 DEFAULT NULL, 
     parallelParam  IN VARCHAR2 DEFAULT NULL
     ) RETURN SDO_NUMBER_ARRAY;

説明

1つ以上のレイヤーまたは1つ以上のレイヤーとピラミッド・レベルに関連付けられた統計データを計算します。ファンクション構文の2つのセットには、使用上の大きな違いがあります。

  • メタデータに格納する構文では、指定した各レイヤー(オプションでラスター全体)のGeoRasterオブジェクト・メタデータに統計データも設定します。これらの構文は、操作の成功または失敗を示す文字列TRUEまたはFALSEを戻します。

  • メタデータに格納しない構文では、GeoRasterオブジェクト・メタデータを設定せず、1つのレイヤーまたは指定したレイヤーの集計に関する統計を計算します。これらの構文は、集計された最小値、最大値、平均値、中央値、最頻値、標準偏差値および合計を表す数値を持つSDO_NUMBER_ARRAYオブジェクトを戻します。

パラメータ

georaster

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

mask

GeoRasterオブジェクトとして格納されているビットマップ・マスク。地理参照できる場合と、できない場合があります:

  • マスクが地理参照されない場合、そのエクステントがセル空間座標として使用されます。
  • マスクが地理参照される場合、入力GeoRasterオブジェクトと同じSRIDが必要です。

マスクでカバーされる入力GeoRasterオブジェクトの空間領域が、統計のために計算されます。マスク内のセル値が1の場合は、ソースgeoRasterと同じ位置のピクセルが統計の計算に使用されることを意味します。マスクは、ソースGeoRasterオブジェクトよりも小さくても大きくてもかまいません。

pyramidLevel

操作を実行するピラミッド・レベルを指定します。

samplingFactor

サンプリング係数として、1/(n*n)の分母n'samplingFactor=n'の書式で指定します。この値は、統計の算出時に行次元と列次元の両方でスキップするセルの数を表します。たとえば、samplingFactorが4の場合はセルの16分の1が統計の算出に使用されますが、samplingFactorが1の場合はすべてのセルが統計の算出に使用されます。この数値が大きくなるほど統計の精度は下がる可能性がありますが、統計算出の速度は速くなります。

samplingWindow

数値配列またはSDO_GEOMETRYオブジェクトとして指定される、統計を生成するサンプリング・ウィンドウを指定します。データ型が(VARRAY(1048576) OF NUMBERとして定義された) SDO_NUMBER_ARRAYの場合、このパラメータで矩形ウィンドウの左上の座標(行,列)と右下の座標(行,列)を指定することによって、ラスター空間が想定されます。データ型がSDO_GEOMETRYの場合、それはモデル空間にあるとラスター空間に変換され、ラスター空間のジオメトリ・オブジェクトの最小境界矩形(MBR)がウィンドウとして使用されます。デフォルト値はイメージ全体です。

どちらの場合も、ラスター空間のサンプリング・ウィンドウのMBRとラスター空間のGeoRasterオブジェクトのMBRの共通部分が統計の計算に使用されます。ただし、polygonClipTRUEsamplingWindowジオメトリ・オブジェクトがサンプリング・ウィンドウのMBRのかわりに操作に使用される場合、samplingWindowジオメトリ内のセルのみがカウントされます。

histogram

ヒストグラムの算出と格納を行う場合はTRUEを指定し、ヒストグラムの算出と格納を行わない場合はFALSEを指定します。ヒストグラムの詳細は、「SDO_GEOR_HISTOGRAMオブジェクト型」を参照してください。<histogram>要素のXML定義およびhistogramType複合型は、「GeoRasterメタデータのXMLスキーマ」に含まれています。

layerNumbers

統計を算出するレイヤーの番号を指定します。このパラメータは文字列で指定し、数値、ハイフン(-)で示した数値の範囲、および数値と数値の範囲を区切るカンマを使用できます。たとえば、'1,3-5,7'はレイヤー1、3、4、5および7を示します。レイヤー0 (ゼロ)はオブジェクト・レイヤーを示します。

bandNumbers

値が統計の計算に使用されるレイヤーのバンド座標番号を指定します。このパラメータは文字列で指定し、数値、ハイフン(-)で示した数値の範囲、および数値と数値の範囲を区切るカンマを使用できます。たとえば、'0,1,3-5,7'はレイヤー1、2、4、5、6および8を指定します。bandNumbersがNULLの場合、統計の計算にすべてのバンドが使用されます。

useBin

統計の生成時に、指定されたビン・ファンクション(binFunctionパラメータで指定)を使用するかどうかを指定します。TRUE (デフォルト)の場合、使用されるビン・ファンクションは次の順序で決定されます。(1)binFunctionパラメータで指定されたビン・ファンクション(NULLでない場合)、(2)GeoRaster XMLメタデータの<binFunction>要素で指定されたビン・ファンクション(指定されている場合)、(3)動的に生成されたビン・ファンクション(「使用上のノート」を参照)。FALSEの場合、使用されるビン・ファンクションは動的に生成され、binFunctionパラメータおよび<binFunction>要素は無視されます。

ビン・ファンクションについては、SDO_GEOR.setBinFunctionプロシージャの「使用上のノート」を参照してください。

binFunction

ビン・タイプ、ビンの合計数、最初のビン番号、最小セル値および最大セル値を指定する要素を含む配列として、ビン・ファンクションを指定します。SDO_NUMBER_ARRAY型は、VARRAY(1048576) OF NUMBERとして定義されます。SQO_GEOR.generateStatisticsのビン・ファンクションの詳細は、「使用上のノート」を参照してください。ビン・ファンクションおよび例については、SDO_GEOR.setBinFunctionプロシージャの「使用上のノート」を参照してください。

nodata

各セル値と、メタデータに定義されたNODATA値を、統計算出時に比較するかどうかを指定します。TRUEを指定した場合は、NODATA値を持つピクセルはすべて考慮されず、FALSE (デフォルト)を指定した場合は、NODATA値を持つピクセルは通常のピクセルとみなされます。NODATA値および値の範囲の詳細は、「NODATA値および値の範囲」を参照してください。

polygonClip

文字列TRUEでは、samplingWindowジオメトリ・オブジェクトが操作で使用されますが、文字列FALSEまたはNULL値では、samplingWindowジオメトリ・オブジェクトの最小境界矩形(MBR)が操作で使用されます。

parallelParam

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

並列性を指定すると、このファンクションの結果をロールバックできません。

使用上のノート

このファンクションは、GeoRasterメタデータのXMLスキーマ(「GeoRasterメタデータのXMLスキーマ」を参照)の<statisticDatasetType>要素によって記述された統計データを算出して設定できます。

samplingWindowがGeoRasterオブジェクト外であるか、またはNODATA値のみが含まれる場合、次のエラーが発生します。

ORA-13393: null or invalid samplingWindow parameter

histogramTRUEの場合、このファンクションは使用するビン・ファンクションに基づいて各ビンの範囲を決定し、各範囲内で各ピクセル値の合計を算出します。ヒストグラムとそのビン・ファンクションとは、各ビンがヒストグラムの(value, count)ペアにマップされると、その下限がヒストグラムの(value, count)ペアの対応する値にマップされるという関係になります。ただし、次のような例外があります。

  • Min_r < Minの場合は、ヒストグラムの最初のペアとして、もう1つのペア(Min_r, count)が追加されます。(Min_rはこのファンクションによって算出されたデータセットの実際の最小値であり、Minはビン・ファンクションに指定されたmin値です。)

  • Max_r > Maxの場合は、ヒストグラムの最後のペアとして、もう1つのペア(Max_r, count)が追加されます。(Max_rはこのファンクションによって算出されたデータセットの実際の最大値であり、Maxはビン・ファンクションに指定されたmax値です。)

  • 先頭および末尾のペアのうちcountが0のペアは、表示されません。たとえば:

    (1,0) (2,0) (3,11) (4,12) becomes (3,11) (4,12)
    (1,11) (2,12) (3,0) (4,0) becomes (1,11) (2,12)
    

histogramTRUEの場合、XMLメタデータ内の既存のヒストグラムは新しく生成されたヒストグラムに置き換えられます。

SQO_GEOR.generateStatisticsがサポートするのはLINEARビン・ファンクション(binType = 0)のみであり、LOGARITHMまたはEXPLICITビン・ファンクションはサポートされません。(すべてのビン・ファンクション・タイプのXML定義は、「GeoRasterメタデータのXMLスキーマ」に含まれます。)useBinパラメータ値がFALSEの場合、このファンクションではbinFunctionパラメータ値およびGeoRaster XMLメタデータの<binFunction>要素は無視され、LINEARビン・ファンクションが使用されます。LINEARビン・ファンクションのmin値およびmax値は、そのデータ・セットにおける実際の最小値および最大値であり、numbins値はセル深度によって次のようになります。

  • cellDepth = 1の場合、numbins = 2

  • cellDepth = 2の場合、numbins = 4

  • cellDepth = 4の場合、numbins = 8

  • cellDepth >= 8の場合、numbins = 256

useBinパラメータ値がTRUEの場合、このファンクションでは次のようにビン・ファンクションが使用されます。

  1. binFunctionパラメータで有効なビン・ファンクションが指定されている場合は、そのファンクションが使用されます。

  2. それ以外の場合で、GeoRasterメタデータに有効なビン・ファンクションが定義されていれば、そのファンクションが使用されます。

  3. 前述のいずれでもない場合、useBinパラメータ値がFALSEであるときに使用されるものと同じビン・ファンクションが使用されます。

このファンクションはGeoRasterで統計を算出して(オプションで)設定しますが、設定する統計を指定する場合には、SDO_GEOR.setStatisticsプロシージャを使用します。

レイヤーに関連付けられた統計データを取得するには、SDO_GEOR.getStatisticsファンクションを使用します。

次の例では、統計データおよびヒストグラムを生成します。

DECLARE
  gr SDO_GEORASTER;
  ret VARCHAR2(256);
  window SDO_NUMBER_ARRAY := SDO_NUMBER_ARRAY(20,10,50,50);
BEGIN
  SELECT georaster INTO gr FROM georaster_table WHERE georid=1 FOR UPDATE;
  SDO_GEOR.setBinFunction(gr,1,sdo_number_array(0,10,1,50,200));
  ret := SDO_GEOR.generateStatistics(gr, 'samplingFactor=5', window, 'TRUE',
    '1-1', 'TRUE');
  UPDATE georaster_table SET georaster=gr WHERE georid=1;
  COMMIT;
END;
/

次の例では、ピラミッド・レベル1ですべてのバンドの統計データを生成しますが、ヒストグラムを作成したり、GeoRasterオブジェクト・メタデータを変更することはありません。

DECLARE
  gr sdo_georaster;
  window  sdo_geometry:=null;
  stat   sdo_number_array;  
BEGIN  
  SELECT tmimage INTO gr FROM landsat WHERE id=2021;
  stat:=sdo_geor.generateStatistics(gr,1,'samplingFactor=7',window,null,'false');
  dbms_output.put_line('min='||stat(1));  
  dbms_output.put_line('max='||stat(2));
  dbms_output.put_line('mean='||stat(3));
  dbms_output.put_line('median='||stat(4));
  dbms_output.put_line('mode='||stat(5));
  dbms_output.put_line('std='||stat(6));
  dbms_output.put_line('sum='||stat(7));
END;
/

次の例では、masksamplingWindowおよびpolygonClipパラメータを使用して、統計計算用のピクセルを選択します。統計は配列として返されます。

DECLARE
  gr sdo_georaster;
  maskgr sdo_georaster;
  window  sdo_geometry;
  stat   sdo_number_array;  
BEGIN  
  SELECT tmimage INTO gr FROM landsat WHERE id=2021;
  SELECT mask INTO maskgr FROM masks WHERE id=1;
  SELECT geom INTO window FROM boundary WHERE id=1;

  stat:=sdo_geor.generateStatistics(gr,maskgr,0,'samplingFactor=2',window,'0-2','false',’true’,'parallel=4');
  dbms_output.put_line('min='||stat(1));  
  dbms_output.put_line('max='||stat(2));
  dbms_output.put_line('mean='||stat(3));
  dbms_output.put_line('median='||stat(4));
  dbms_output.put_line('mode='||stat(5));
  dbms_output.put_line('std='||stat(6));
  dbms_output.put_line('sum='||stat(7));
END;
/