書式
SDO_WITHIN_DISTANCE(geometry1, aGeom, params);
説明
空間索引を使用して、対象領域または対象となる点など指定されたオブジェクトの、指定された距離内にある空間オブジェクトの集合を識別します。
キーワードおよびパラメータ
値 | 説明 |
---|---|
geometry1 |
表のジオメトリ列を指定します。この列には、オブジェクト( |
aGeom |
|
params |
1つ以上のキーワード(値を含む)を引用符で囲んで、演算子の動作を判断する文字列を指定します。後続の項目( |
距離 |
距離値を指定します。座標系がジオメトリに関連付けられている場合、距離の単位は座標系に関連付けられた単位であると想定されます。これは必須キーワードです。データ型はNUMBERです。 |
max_resolution |
ジオメトリのMBRのうち少なくとも1つの辺が指定値以下のジオメトリのみを含みます。たとえば、 |
min_resolution |
ジオメトリのMBRのうち少なくとも1つの辺が指定値以上のジオメトリのみを含みます。たとえば、 |
querytype |
|
unit |
測定単位( |
戻り値
式SDO_WITHIN_DISTANCE(arg1, arg2, arg3) = 'TRUE'は、指定した距離内にあるオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。
使用上の注意
2つの拡張オブジェクト(たとえば、線やポリゴンなど、点のないオブジェクト)の距離は、それら2つのオブジェクト間の最短距離です。そのため、2つの隣接したポリゴン間の距離は0(ゼロ)です。
表に空間索引が含まれない場合、または索引の作成時に指定された次元数と問合せウィンドウの次元数が一致しない場合、この演算子は無効になります。
この演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件は、次の形式である必要があります。
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距離以内のジオメトリを選択します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図2-1に示す定義およびデータを使用しています。この場合、図中のすべてのジオメトリが戻されます。)
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') = 'TRUE'; 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') = 'TRUE'; 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') = 'TRUE';
次の例では、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') = 'TRUE';
次の例では、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') = 'TRUE';
SDO_WITHIN_DISTANCEのより複雑な例については、「SDO_WITHIN_DISTANCEの例」を参照してください。
関連項目