7.33 SDO_GEOR.georeference

構文(プロシージャ)

SDO_GEOR.georeference(
     georaster                IN OUT SDO_GEORASTER, 
     srid                     IN NUMBER, 
     modelCoordinateLocation  IN NUMBER, 
     xCoefficients            IN SDO_NUMBER_ARRAY, 
     yCoefficients            IN SDO_NUMBER_ARRAY);

構文(ファンクション)

SDO_GEOR.georeference(
     georaster               IN OUT SDO_GEORASTER, 
     FFMethodType            IN VARCHAR2, 
     nGCP                    IN NUMBER, 
     GCPs                    IN SDO_GEOR_GCP_COLLECTION, 
     storeGCP                IN VARCHAR2 DEFAULT 'TRUE', 
     srid                    IN NUMBER DEFAULT NULL, 
     modelCoordinateLocation IN NUMBER DEFAULT NULL, 
     setResolution           IN VARCHAR2 DEFAULT NULL 
     ) RETURN SDO_NUMBER_ARRAY;

または

SDO_GEOR.georeference(
     georaster               IN OUT SDO_GEORASTER, 
     gcpGeorefModel          IN SDO_GEOR_GCPGEOREFTYPE, 
     storeGCP                IN VARCHAR2 DEFAULT 'TRUE', 
     srid                    IN NUMBER DEFAULT NULL, 
     modelCoordinateLocation IN NUMBER DEFAULT NULL,    
     setResolution           IN VARCHAR2 DEFAULT NULL 
     ) RETURN SDO_NUMBER_ARRAY;

または

SDO_GEOR.georeference(
     georaster               IN OUT SDO_GEORASTER, 
     FFMethodType            IN VARCHAR2 DEFAULT NULL, 
     srid                    IN NUMBER DEFAULT NULL, 
     modelCoordinateLocation IN NUMBER DEFAULT NULL, 
     setResolution           IN VARCHAR2 DEFAULT NULL 
     ) RETURN SDO_NUMBER_ARRAY;

説明

プロシージャとして、アフィン変換の指定された係数を使用してセルからモデルへ変換し、GeoRasterオブジェクトを地理参照します。ファンクションとして、データベースに格納されているか、パラメータに指定された地上基準点(GCP)を使用して、サポートされるジオメトリ・モデルのいずれかのソリューションを戻します。

パラメータ

georaster

地理参照するSDO_GEORASTERオブジェクトを指定します。

srid

モデル座標系を指定します。プロシージャではNULLまたは0 (ゼロ)にすることはできず、ファンクションではNULLにできます。MDSYS.CS_SRS表のSRID列の値を指定できます。MDSYS.CS_SRS表のSRID列の値を指定しない場合、Oracle SpatialでSRIDがサポートされず、SRID関連の一部の操作もサポートされない場合があります。

modelCoordinateLocation

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

xCoefficients

計算の係数値A、BおよびCを示す配列を指定します(「使用上のノート」を参照)。

yCoefficients

計算の係数値D、EおよびFを示す配列を指定します(「使用上のノート」を参照)。

FFMethodType

地理参照ジオメトリ・モデルとして使用される多項式または有理多項式関数を指定します。AffineQuadraticPolynomialCubicPolynomialDLTQuadraticRationalまたはRPCのいずれかのいずれかの文字列値を指定する必要があります。

gcpGeorefModel

FFMethodTypenGCPGCPssolutionAccuracyを含むオブジェクトを指定します。

nGCP

GCPコレクション内の地上基準点の数(GCPsパラメータ)。

GCPs

SDO_GEOR_GCP_COLLECTION型のGCPコレクション(「SDO_GEOR_GCP_COLLECTIONコレクション型」を参照)。

storeGCP

GCPをGeoRasterメタデータに格納する必要があるかどうかを示すフラグを指定します。文字列TRUE (デフォルト)では、GeoRasterメタデータに点が格納されますが、文字列FALSEではGeoRasterメタデータに点が格納されません。

setResolution

空間解像度を計算してGeoRasterメタデータに格納するかどうかを示すフラグを指定します。文字列FALSEまたはNULL値では、GeoRasterメタデータに空間解像度が格納されませんが、文字列TRUEではGeoRasterメタデータに空間解像度が格納されます。

使用上のノート

プロシージャ構文のノート

このプロシージャは、既存のアフィン変換に基づいてGeoRasterオブジェクトを地理参照する場合に使用します。(地理参照については、「地理参照」および「GeoRasterオブジェクトの地理参照」を参照してください。)

このプロシージャでは、ソース・データ(ESRIワールド・ファイルなど)に含まれる元の地理参照情報内では、変換計算式が次のようになると想定しています。

x = A * column + B * row + C
y = D * column + E * row + F

前述のA、B、C、D、EおよびF係数を、SDO_GEOR.georeferenceプロシージャに指定します。これらの係数は内部で自動調整され、適切な地理参照結果の係数a、b、c、d、eおよびfが生成されます。計算式は次のとおりです。

row    = a + b * x + c * y
column = d + e * x + f * y

計算式の各変数の意味は、次のとおりです:

  • rowは、ラスター空間内のセルの行索引です。

  • columnは、ラスター空間内のセルの列索引です。

  • xは、地上またはモデル空間内の点の東西方向の位置です。

  • yは、地上またはモデル空間内の点の南北方向の位置です。

  • a、b、c、d、eおよびfは係数で、GeoRaster SRSメタデータに格納されます。

  • b*f – c*eは、0(ゼロ)以外である必要があります。

これらの計算式において、b = 0、f = 0、c = -eで、cとeの両方が0(ゼロ)以外の場合、ラスター・データは幾何補正されます。この場合の計算式は次のようになります。

row    = a + c * y
column = d - c * x

このプロシージャは、GeoRasterオブジェクトの空間解像度を設定します。

次のプロシージャおよびツールも、地理参照に関連する処理を実行します。

ファンクション構文のノート(GCPとともに使用する場合)

このファンクションは、データベースに格納されているか、パラメータに指定されたGCPを使用して、特定のジオメトリ・モデル(FFMethodType)のソリューションを計算し、そのソリューションをGeoRaster関数フィッティング・モデルに格納します。

戻される配列には、RMS値と残差が含まれ、その順序は、基準点を使用して計算されたソリューションの精度(rowRMS, colRMS, totalRMS)、チェック・ポイントを使用して計算された地上位置決めの精度(xRMS, yRMS, zRMS, modelTotalRMS)、基準点を使用して計算された地上位置決めの精度(xRMS, yRMS, zRMS, modelTotalRMS)および(チェック・ポイントではなく)基準点ごとの(xResidual, yResidual)です。残差の順序は、XMLメタデータに格納されている基準点と同じです(ID値が数値の場合、必ずしも基準点のID値の順番ではありません)。

戻される値は常に17以上あります(3つ以上の基準点があると仮定)。–1.0の位置精度(RMS)は、その値が存在しないことを意味します。2次元ジオメトリ・モデルでは、zRMS値は常に–1.0で、それ以外の場合、zRMS値は現在のリリースでは常に0です。

GCPは、GeoRasterメタデータから取得するか、GCP関連のオブジェクト型を使用して提供できます。

GCP情報のないインタフェースでは(gcpGeorefModelパラメータなしの形式)、GCPがGeoRasterオブジェクトのメタデータに格納されると仮定されます。GCPが格納されていない場合、または指定したモデルにとって十分なGCPが格納されていない場合、例外が発生します。

このファンクション・コールの後、GeoRasterオブジェクトが地理参照され、関数フィッティング・モデルの係数がGeoRaster SRSメタデータ構成要素に設定されます。

GCPを使用した地理参照の詳細は、「地上基準点(GCP)地理参照モデル」を参照してください。

次の例では、アフィン変換の係数を直接使用してセルからモデルへ変換し、GeoRasterオブジェクトを地理参照します。(GEORASTER_TABLEという名前の表を参照します。この表の定義は「記憶域パラメータ」例1-1の次に説明されています。)

DECLARE
  gr sdo_georaster;
BEGIN
  SELECT georaster INTO gr FROM georaster_table WHERE georid = 1 FOR UPDATE;
  sdo_geor.georeference(gr, 82394, 0,
                        sdo_number_array(28.5, 0, 1232804.04),
                        sdo_number_array(0, -28.5, 13678.09));
  UPDATE georaster_table SET georaster = gr WHERE georid = 1;
  COMMIT;
END;
/
 
PL/SQL procedure successfully completed.
 
SET NUMWIDTH 20
SELECT georid, sdo_geor.getSRS(georaster) SRS FROM georaster_table
  WHERE georid = 1;
 
              GEORID
--------------------
SRS(ISREFERENCED, ISRECTIFIED, ISORTHORECTIFIED, SRID,
SPATIALRESOLUTION, SPATIA
--------------------------------------------------------------------------------
 
                   1
SDO_GEOR_SRS('TRUE', 'TRUE', NULL, 82394, SDO_NUMBER_ARRAY(28.5, 28.5), NULL, NU
LL, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, NULL, NULL, NULL, SDO_NUMBER_ARRAY(1, 2, 1, 3,
 479.93298245614, 0, -.0350877192982456), SDO_NUMBER_ARRAY(1, 0, 0, 1, 1), SDO_N
UMBER_ARRAY(1, 2, 1, 3, -43256.2821052632, .0350877192982456, 0), SDO_NUMBER_ARR
AY(1, 0, 0, 1, 1))

元のラスター・データが幾何補正される場合、および左上角のセルの中心点のモデル座標が(x0, y0)で、その空間解像度がsである場合、前述の例のコードを直接使用して、28.5をsに、1232804.04をx0に、13678.09をy0に置換することで、GeoRasterオブジェクトを地理参照できます。ラスターの適切に定義された正確なエンベロープや中心点のモデル座標など、GeoRasterオブジェクトに関する他の情報がある場合、(x0, y0)および空間解像度sを計算し、同じアプローチを使用してオブジェクトを地理参照できます。

次の例では、地上基準点(GCP)の情報を使用してGeoRasterオブジェクトを地理参照します。

DECLARE
   gr1                 sdo_georaster;
   gr2                  sdo_georaster;
   georefModel   SDO_GEOR_GCPGEOREFTYPE;
   GCPs              SDO_GEOR_GCP_COLLECTION;
   rms                  sdo_number_array;
BEGIN
   SELECT georaster INTO gr1 from georaster_table WHERE georid=10 FOR UPDATE;
 
   GCPs := SDO_GEOR_GCP_COLLECTION( 
                           SDO_GEOR_GCP('1', '', 1, 
                              2, sdo_number_array(25.625000, 73.875000),
                              2, sdo_number_array(237036.937500, 897987.187500),
                              NULL, NULL),
                              SDO_GEOR_GCP('2', '', 1, 
                              2, sdo_number_array(100.625000, 459.125000),
                              2, sdo_number_array(237229.562500, 897949.687500),
                              NULL, NULL),
                              SDO_GEOR_GCP('3', '', 1, 
                              2, sdo_number_array(362.375000, 77.875000),
                              2, sdo_number_array(237038.937500, 897818.812500),
                              NULL, NULL),
                              SDO_GEOR_GCP('4', '', 1, 
                              2, sdo_number_array(478.875000, 402.125000),
                              2, sdo_number_array(237201.062500, 897760.562500),
                              NULL, NULL),
                              SDO_GEOR_GCP('5', '', 2, 
                              2, sdo_number_array(167.470583,  64.030686),
                              2, sdo_number_array(237032.015343, 897916.264708),
                              NULL, NULL),
                              SDO_GEOR_GCP('6', '', 2, 
                              2, sdo_number_array(101.456177,  257.915534),
                              2, sdo_number_array(237128.957767, 897949.271912),
                              NULL, NULL)
                       );
 
   georefModel := SDO_GEOR_GCPGEOREFTYPE('Affine',
GCPs.count, GCPs, NULL);
 
   rms := sdo_geor.georeference(gr1, georefModel, 'FALSE', 26986, 1);
   UPDATE georaster_table SET georaster=gr1 WHERE georid=10;
   COMMIT;
END;
/