7.111 SDO_GEOR.rectify

形式

SDO_GEOR.rectify(
     inGeoRaster      IN SDO_GEORASTER, 
     pyramidLevel     IN NUMBER DEFAULT 0, 
     elevationParam   IN VARCHAR2 DEFAULT NULL, 
     DEM              IN SDO_GEORASTER DEFAULT NULL, 
     outSRID          IN NUMBER, 
     outModelCoordLoc IN NUMBER DEFAULT NULL, 
     cropArea         IN SDO_GEOMETRY DEFAULT NULL, 
     polygonClip      IN VARCHAR2 DEFAULT 'FALSE', 
     layerNumbers     IN VARCHAR2 DEFAULT NULL, 
     outResolutions   IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     resolutionUnit   IN VARCHAR2 DEFAULT NULL, 
     referencePoint   IN SDO_GEOMETRY DEFAULT NULL, 
     resampleParam    IN VARCHAR2 DEFAULT NULL, 
     storageParam     IN VARCHAR2 DEFAULT NULL, 
     outGeoRaster     IN OUT SDO_GEORASTER, 
     bgValues         IN SDO_NUMBER_ARRAY DEFAULT NULL,
     parallelParam    IN VARCHAR2 DEFAULT NULL);

または

SDO_GEOR.rectify(
     inGeoRaster      IN SDO_GEORASTER, 
     pyramidLevel     IN NUMBER DEFAULT 0, 
     elevationParam   IN VARCHAR2 DEFAULT NULL, 
     DEM              IN SDO_GEORASTER DEFAULT NULL, 
     outSRID          IN NUMBER, 
     outModelCoordLoc IN NUMBER DEFAULT NULL, 
     cropArea         IN SDO_GEOMETRY DEFAULT NULL, 
     polygonClip      IN VARCHAR2 DEFAULT 'FALSE', 
     layerNumbers     IN VARCHAR2 DEFAULT NULL, 
     outResolutions   IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     resolutionUnit   IN VARCHAR2 DEFAULT NULL, 
     referencePoint   IN SDO_GEOMETRY DEFAULT NULL, 
     resampleParam    IN VARCHAR2 DEFAULT NULL, 
     storageParam     IN VARCHAR2 DEFAULT NULL, 
     rasterBlob       IN OUT NOCOPY BLOB, 
     outArea          OUT SDO_GEOMETRY, 
     outWindow        OUT SDO_NUMBER_ARRAY, 
     bgValues         IN SDO_NUMBER_ARRAY DEFAULT NULL);

説明

地理参照されたGeoRasterオブジェクトの全部または一部に対して幾何補正を実行します。結果のオブジェクトは、新しいGeoRasterオブジェクト(永続記憶域目的)またはBLOB (一時使用目的)のいずれかです。入力モデル座標系(SRID)が3次元の場合、平均の標高または数値標高モデル(DEM)は、オルソ補正を実行するために使用できます。

パラメータ

inGeoRaster

操作を実行するGeoRasterオブジェクトを指定します。これは、地理参照される必要があります(SDO_GEOR.georeferenceサブプログラムを参照)。

pyramidLevel

操作用のソースGeoRasterオブジェクトのピラミッド・レベルを指定します。

  • BLOB出力では、このパラメータが必須です。

  • SDO_GEORASTER出力では、このパラメータがNULLで、storageParam pyramid値がFALSEの場合、ピラミッド・レベル0のみが幾何補正され、出力にはレベル0のみが含まれます。このパラメータがNULLで、storageParam pyramid値がTRUEの場合、入力のすべてのピラミッド・レベルが幾何補正されます。

  • 0以上の数値を指定すると、そのピラミッド・レベルのみが幾何補正に使用され、そのピラミッド・レベル・イメージに基づいてスケールの結果が生成されます。

elevationParam

標高パラメータのaverage (平均表面高度)、scale (すべてのDEM値に適用されるスケール値)およびoffset (すべてのDEM値に適用されるオフセット)を1つ以上含む文字列を指定します(新しい値は、(value + offset) * scaleです)。このパラメータは、引用符で囲まれた文字列で、1つ以上のキーワード=値のペア('average=800 scale=3.2808399 offset=10'など)を含める必要があります。このパラメータがNULLの場合、averageおよびoffsetには0が、scaleには1が使用されます。DEMが指定されていない場合、scaleおよびoffset値は無視されます。

elevationParamパラメータを使用する場合、入力GeoRasterオブジェクトには3DモデルSRIDが含まれる必要があります。

入力GeoRasterオブジェクトに3DモデルSRIDが含まれる場合、出力イメージのエクステントを定義するために、平均の標高が重要になります。DEMを指定していても、この情報が使用可能である場合は指定する必要があります。平均の標高を指定しない場合、プロシージャによって、平均の標高の近似値が計算されます。

ノート:

GeoRasterのサブプログラムに対する文字列(VARCHAR2)パラメータの中に数値がある場合は、ロケールにかかわらず、小数点にはピリオド(.)を使用する必要があります。

DEM

オルソ補正を実行するために使用する数値標高モデル(DEM)を含むGeoRasterオブジェクトを指定します(「使用上のノート」を参照)。outGeoRasterと同じSRIDを持つ必要があります。DEM領域は、outGeoRaster領域全体またはcropArea (使用する場合)を対象とする必要があります。標高データは、DEM GeoRasterオブジェクトの1番目のレイヤーに存在すると仮定されます。このパラメータがNULLの場合、elevationParam値が使用されます。最適な結果を得るには、DEM GeoRasterオブジェクトの解像度を入力GeoRasterオブジェクトの解像度に近づける必要があります。

DEMパラメータを使用する場合、入力GeoRasterオブジェクトには3DモデルSRIDが含まれる必要があります。

入力GeoRasterオブジェクトに3DモデルSRIDが含まれる場合、出力イメージのエクステントを定義するために、平均の標高が重要になります。DEMを指定していても、この情報が使用可能である場合はelevationParamパラメータに指定する必要があります。平均の標高を指定しない場合、プロシージャによって、平均の標高の近似値が計算されます。

outSRID

出力GeoRasterオブジェクトの座標系を指定します。NULLか、またはMDSYS.CS_SRS表のSRID列の値を指定する必要があります。NULLの場合、出力GeoRasterオブジェクトには入力GeoRasterオブジェクトと同じSRIDが含まれます。

outModelCoordLoc

セルによって表現される領域のベースのモデル位置を示す値を指定します。CENTERの場合は0UPPERLEFTの場合は1を指定します。NULLの場合、CENTERが使用されます。

cropArea

クロッピング領域を定義します。NULLの場合、クロッピングは実行されず、polygonClipは無視されます。

polygonClipFALSEの場合、cropAreaのMBRが出力イメージをクロッピングするために使用されます。polygonClipTRUEの場合、cropAreaのジオメトリが出力イメージをクロッピングするために使用されます。クロッピング領域の外側の領域には、背景値が入力されます。

polygonClip

cropAreaがNULLの場合は無視されます。それ以外の場合、文字列TRUEではモザイク処理されたデータをクロッピングするためにcropArea値が使用され、文字列FALSEまたはNULL値では出力イメージをクロッピングするためにcropAreaのMBRが使用されます。

layerNumbers

幾何補正およびoutGeoRasterへの出力のための論理レイヤー番号を示す文字列を指定します。カンマで値を区切り、ハイフンで範囲を指定します(たとえば、2-4はレイヤー2、3および4を示します)。

outResolutions

空間次元ごとに1つの値を指定した、数値の配列を指定します。各値は、ピクセルの空間次元によって表現されるデータ領域に関連付けられた測定単位の数を示します。たとえば、空間解像度の値が(10,10)で、地上データの測定単位がmである場合、各ピクセルは10m×10mの領域を示します。NULLの場合、デフォルトは、指定したピラミッド・レベルのソース・データの解像度です。

resolutionUnit

outResolutionsパラメータの単位を指定します。resolutionUnitoutGeoRaster SRIDの単位と異なる場合、適切な変換が計算されます(出力解像度の値は、resolutionUnitoutResolutions値を出力SRIDの単位に変換することによって計算されます)。resolutionUnitがNULLの場合、デフォルトは出力SRIDの単位です。指定する場合、unit=valueという形式で、引用符で囲んだ文字列にする必要があります(valueは単位名)。このパラメータは、outResolutionsがNULLである場合は無視されます。

referencePoint

referencePointと出力の左上角の距離がピクセルの整数になるように、outGeoRasterオブジェクトを配置する必要のある場所への参照を示すSDO_GEOMETRY型の点を指定します。

resampleParam

リサンプリング・パラメータを指定するため、キーワード=値のペアのカンマで区切られた引用符付き文字列を指定します。詳細は、「使用上のノート」を参照してください。

storageParam

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

outGeoRaster

操作の結果を格納するGeoRasterオブジェクトを指定します。既存の有効なGeoRasterオブジェクトまたは空のGeoRasterオブジェクトのいずれかであることが必要です。(空のGeoRasterオブジェクトの詳細は、「空白のGeoRasterオブジェクトと空のGeoRasterオブジェクト」を参照してください)。inGeoRasterと同じ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 (ゼロ)です。

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

parallelParam

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

並列性が指定されている場合、プロシージャによって内部コミット操作が実行されます。エラーが発生した場合(Oracle Parallel Serverが原因である場合でも)、操作をロールバックするために、出力結果のGeoRasterオブジェクトを明示的に削除する必要があります。

使用上のノート

このプロシージャには2つの構文があります。

  • 一方の構文では、データベースへの永続的な格納のためにGeoRasterオブジェクトが生成されます。

  • 他方の構文では、一時的な格納または即座の使用(画面へのデータの表示など)のためにBLOBが生成されます。

このプロシージャでは、入力GeoRasterオブジェクトから地理参照多項式を取得するパラメータなしの幾何補正メソッドを使用して、元のイメージ空間をターゲットのイメージ空間に変換します。したがって、入力GeoRasterオブジェクトを地理参照する必要があります(SDO_GEOR.georeferenceサブプログラムを参照)。

オルソ補正は、入力GeoRasterオブジェクトに3DモデルSRIDが含まれる場合に実行できます。数値標高モデル(DEM) GeoRasterオブジェクトは、オルソ補正の精度を向上するために使用できます。DEMパラメータを指定しない場合、elevationParam average値がターゲット領域全体の高さとして使用されます。elevationParam average値を指定しない場合、SRSおよびDEM情報に基づいて評価されます(「イメージのオルソ補正」を参照)。

resampleParamは、指定する場合、それぞれ適切な値を指定した次の1つ以上のキーワードを含む引用符で囲んだ文字列にする必要があります。

  • resampling (resampling=NNなど): リサンプリング・メソッドを指定します。NNBILINEARBIQUADRATICCUBICAVERAGE4またはAVERAGE16のいずれかを指定する必要があります。詳細は、「リサンプリングおよび内挿」を参照してください。

  • nodata (nodata=TRUEなど): プロシージャでの処理中にNODATA値およびその値の範囲を考慮するかどうかを指定します。TRUE (NODATA値およびその値の範囲を考慮する)またはFALSE (NODATA値およびその値の範囲を考慮しない)のいずれかを指定します。デフォルト値はFALSEです。この値がTRUEで、リサンプリング・メソッドがBILINEARBIQUADRATICCUBICAVERAGE4またはAVERAGE16の場合、リサンプリングの計算に含まれるセル値がNODATA値であると、リサンプリングの結果も常にNODATA値になります。複数のNODATA値または値の範囲が存在する場合、結果のNODATA値は、現行のラスター・レイヤーに関連付けられているNODATA値の最小値になります。

次の例では、入力GeoRasterオブジェクトが同じSRIDに幾何補正されています。入力GeoRasterオブジェクトは、SRID 32619でGCPを使用して地理参照されています。

layerNumbersパラメータは、入力GeoRasterオブジェクトの7つのバンドのうち、3つのバンドの選択順序を示しており、3つのバンドの出力GeoRasterオブジェクトが生成されます。

DECLARE
  gr1   sdo_georaster;
  gr2   sdo_georaster;
BEGIN
  select raster into gr1 from georaster_table where georid = 1;
  insert into georaster_table values(2, 'Rectified image',
         sdo_geor.init('georaster_rdt')) returning raster into gr2;
  sdo_geor.rectify(inGeoRaster       => gr1,
                   pyramidLevel      => null,
                   elevationParam    => null,
                   dem               => null,
                   outSRID           => null,
                   outModelCoordLoc  => null,
                   cropArea          => null,
                   polygonClip       => null,
                   layerNumbers      => '2,4,5',
                   outResolutions    => null,
                   resolutionUnit    => null,
                   referencePoint    => null,
                   resampleParam     => null,
                   storageParam      => null,
                   outGeoraster      => gr2);
  update georaster_table set georaster = gr2 where georid = 2;
  commit;
END;

次の例では、入力GeoRasterオブジェクトは、SRID 32619で3D GCPを使用して地理参照され、ファンクションによって、SRID 4326でオルソ補正されたGeoRasterが生成されます。

  • demパラメータは、オルソ補正用のピクセルごとに高さの値を提供するため、数値標高モデルとしてGeoRasterオブジェクトgr3を指定します。

  • resampleParamは、BILINEARとしてリサンプリング・メソッドを指定します。

  • storageParamパラメータは、BSQとしてinterleavingを、DEFLATEとしてcompressionを指定します。

  • 指定されたoutResolutions値は、resolutionUnitがNULLのため、出力GeoRaster SRIDと同じ測定単位を持ちます。

  • referencePointによって指定された点のジオメトリによって、出力イメージの左上角が、それらの間でピクセルの整数(行および列の解像度)を使用してその座標に揃えられます。

DECLARE
  gr1   sdo_georaster;
  gr2   sdo_georaster;
  gr3   sdo_georaster;
  pto   sdo_geometry;
BEGIN
  pto := sdo_geometry(2001, 4326, sdo_point_type(-71.50,42.0, null));
  select raster into gr1 from georaster_table where georid = 1;
  select raster into gr1 from georaster_table where georid = 3;
  insert into georaster_table values(2, 'Rectified image',
         sdo_geor.init('georaster_rdt')) returning raster into gr2;
  sdo_geor.rectify(inGeoRaster       => gr1,
                   pyramidLevel      => 1,
                   elevationParam    => null,
                   dem               => gr3,
                   outSRID           => 4326,
                   outModelCoordLoc  => null,
                   cropArea          => null,
                   polygonClip       => null,
                   layerNumbers      => null,
                   outResolutions    => sdo_number_array(0.0025,0.0025),
                   resolutionUnit    => null,
                   referencePoint    => pto,
                   resampleParam     => 'resampling=BILINEAR',
                   storageParam      => 'interleaving=BSQ compress=DEFLATE',
                   outGeoraster      => gr2);
  update georaster_table set georaster = gr2 where georid = 2;
  commit;
END;

次の例では、入力GeoRasterオブジェクトは、SRID 32619でGCPを使用して地理参照され、出力GeoRasterオブジェクトは、SRID 4326に投影されます。

  • resampleParamは、CUBICとしてリサンプリング・メソッドを指定します。

  • storageParamパラメータは、blockSizeを(512,512,3)に指定します。interleavingが指定されていないため、inGeoRasterのインターリーブ・メソッドが使用されます。

  • outResolutionsおよびresolutionUnitは、outSRID 4316とは異なる単位のmで指定されています。この場合、SDO_NUMBER_ARRAY値の(30,30)は度数に変換されます。

  • cropAreaで指定されているSDO_GEOMETRYポリゴンは、そのポリゴンの範囲まで出力領域をクロッピングするために使用され、polygonClipTRUEであるため、ポリゴンの外側のイメージ領域は背景値に設定されます。

  • outModelCoordLoc1に指定されているため、出力オブジェクトのモデル座標の場所は、UpperLeftになります。

DECLARE
  gr1   sdo_georaster;
  gr2   sdo_georaster;
  pol   sdo_geometry;
BEGIN
  pol := sdo_geometry(2003,4326,NULL,sdo_elem_info_array(1,1003,1),
           sdo_ordinate_array(-70.869495075803073, 42.349420282160885,
                              -70.468523716196913, 42.813138293441916,
                              -70.957334345349082, 43.218053058782452,
                              -71.350984405166344, 42.736563729419181,
                              -70.869495075803073, 42.349420282160885));
  select raster into gr1 from georaster_table where georid = 1;
  insert into georaster_table values(2, 'Rectified image',
         sdo_geor.init('georaster_rdt')) returning raster into gr2;
  sdo_geor.rectify(inGeoRaster       => gr1,
                   pyramidLevel      => 0,
                   elevationParam    => null,
                   dem               => null,
                   outSRID           => 4326,
                   outModelCoordLoc  => 1,
                   cropArea          => pol,
                   polygonClip       => 'true',
                   layerNumbers      => null,
                   outResolutions    => sdo_number_array(30,30),
                   resolutionUnit    => 'unit=meter',
                   referencePoint    => null,
                   resampleParam     => 'resampling=CUBIC',
                   storageParam      => 'blocking=optimalpadding blockSize=(512,512,3)',
                   outGeoraster      => gr2);
  update georaster_table set georaster = gr2 where georid = 2;
  commit;
END;