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