20.19 SDO_WITHIN_DISTANCE

書式

SDO_WITHIN_DISTANCE(geometry1, aGeom, params);

説明

指定されたオブジェクト(対象領域または対象となる点など)の、指定された距離内にある空間オブジェクトのセットを識別します。

キーワードおよびパラメータ

説明

geometry1

表のジオメトリ列を指定します。この列には、オブジェクト(aGeom)から指定した距離内にあると判断されたジオメトリ・オブジェクトが格納されます。この列の空間索引をお薦めします。データ型はSDO_GEOMETRYです。

aGeom

geometry1にあるジオメトリ・オブジェクトからの距離を調べるオブジェクトを指定します。(バインド変数を使用した)表のジオメトリか、または(SDO_GEOMETRYコンストラクタを使用した)ジオメトリの一時的なインスタンスを指定します。データ型はSDO_GEOMETRYです。

params

1つ以上のキーワード(値を含む)を引用符で囲んで、演算子の動作を判断する文字列を指定します。後続の項目(distanceellipsoidalmax_resolutionmin_resolutionquerytypeおよびunit)は、paramsパラメータに使用可能なキーワードです。データ型はVARCHAR2です。

distance

距離値を指定します。座標系がジオメトリに関連付けられている場合、距離の単位は座標系に関連付けられた単位であると想定されます。これは必須キーワードです。データ型はNUMBERです。

ellipsoidal

測地データに楕円体距離を常に使用するか(true)、球体距離を使用する場合があるか(false、デフォルト)を指定します。「距離: 測地データでの球体対楕円体」を参照してください。

たとえば: 'ellipsoidal=true'

max_resolution

ジオメトリのMBRのうち少なくとも1つの辺が指定値以下のジオメトリのみを含みます。たとえば、max_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以下であるジオメトリのみです。(このキーワードは対象として過大なジオメトリを除外するために使用できます。)

min_resolution

ジオメトリのMBRのうち少なくとも1つの辺が指定値以上のジオメトリのみを含みます。たとえば、min_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以上であるジオメトリのみです。(このキーワードは対象として過小なジオメトリを除外するために使用できます。)

querytype

'querytype=FILTER'を設定し、1次フィルタ処理のみを実行します。querytypeが指定されていない場合、1次フィルタ処理および2次フィルタ処理の両方が実行されます(デフォルト)。データ型はVARCHAR2です。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、たとえば'unit=KM')を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。データ型はNUMBERです。デフォルトは、データに関連付けられた測定単位です。測地データの場合、デフォルトはmです。

戻り値

式SDO_WITHIN_DISTANCE(arg1, arg2, arg3)は、指定した距離内にあるオブジェクトの組合せの場合はTRUEを戻し、そうでない場合はFALSEを戻します。

使用上のノート

ノート:

SDO_WITHIN_DISTANCE演算子は、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

2つの拡張オブジェクト(たとえば、線やポリゴンなど、点のないオブジェクト)の距離は、それら2つのオブジェクト間の最短距離です。そのため、2つの隣接したポリゴン間の距離は0(ゼロ)です。

問合せウィンドウの次元数が、空間索引(使用している場合)の作成時に指定された次元数と一致しない場合、演算子は無効になります。

この演算子は、常にWHERE句で使用する必要があります。この演算子を含む条件式は、SDO_WITHIN_DISTANCE(arg1, arg2, 'distance = <some_dist_val>'という形式の、TRUEと評価されるブール式にすることができます。あるいは、古い構文SDO_WITHIN_DISTANCE(arg1, arg2, 'distance = <some_dist_val>') = 'TRUE'を使用することもできます。

この式はTRUE以外のどの値とも等しくない必要があります。

ジオメトリ列には、空間索引が作成されている必要があります。測地データの場合、空間索引がRツリー索引である必要があります。

SDO_WITHIN_DISTANCEは、空間結合でサポートされていません。within-distance演算子で空間結合を実行する方法については、「Within-Distance演算子」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)から10距離以内のジオメトリを選択します。(例では、「空間データの挿入、索引付けおよび問合せの例」に示し、説明している定義およびデータを使用しています。この場合、図中のすべてのジオメトリが戻されます。)

SELECT c.name FROM cola_markets c WHERE SDO_WITHIN_DISTANCE(c.shape,
  SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
    SDO_ORDINATE_ARRAY(4,6, 8,8)),
  'distance=10');
 
NAME                                                                            
--------------------------------                                                
cola_b                                                                          
cola_a                                                                          
cola_c                                                                          
cola_d

次の例は前述の例と同じですが、ジオメトリのMBRのうち少なくとも1つの辺が4.1以上のジオメトリのみを含む、という点で異なります。この場合、cola_aおよびcola_bのみが戻されます。これは、これらのMBRには4.1以上の長さを持つ辺が少なくとも1つあるためです。台形cola_cは、そのMBRの各辺の長さが3と2であるため除外されます。また円cola_dも、そのMBRの各辺の長さが4の四角形であるため除外されます。

SELECT c.name FROM cola_markets c WHERE SDO_WITHIN_DISTANCE(c.shape,
  SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
    SDO_ORDINATE_ARRAY(4,6, 8,8)),
  'distance=10 min_resolution=4.1');
 
NAME                                                                            
--------------------------------                                                
cola_b                                                                          
cola_a 

次の例では、GEOMETRY列オブジェクトが、aGeom変数に格納されているジオメトリの10距離単位内にある場合に、POLYGONS表からGIDの値を検索します。

SELECT A.GID 
  FROM POLYGONS A 
  WHERE 
    SDO_WITHIN_DISTANCE(A.Geometry, :aGeom, 'distance = 10');

次の例では、GEOMETRY列オブジェクトが、左下の座標に(x1,y1)、右上の座標に(x2, y2)を持つ指定した矩形の10距離単位内にある場合に、POLYGONS表からGIDの値を検索します。

SELECT A.GID 
  FROM POLYGONS A 
  WHERE 
    SDO_WITHIN_DISTANCE(A.Geometry, sdo_geometry(2003,NULL,NULL,
                             sdo_elem_info_array(1,1003,3),
                             sdo_ordinate_array(x1,y1,x2,y2)),
                     'distance = 10');

次の例では、QUERY_POINTS表のGIDの値が1で、POLYGONS.GEOMETRYオブジェクトがQUERY_POINTS.GEOMETRYオブジェクトの10距離単位内にある場合に、POLYGONS表からGIDの値を検索します。

SELECT A.GID 
  FROM POLYGONS A, Query_Points B 
  WHERE B.GID = 1 AND 
    SDO_WITHIN_DISTANCE(A.Geometry, B.Geometry, 'distance = 10');

SDO_WITHIN_DISTANCEのより複雑な例については、「SDO_WITHIN_DISTANCEの例」を参照してください。

関連トピック