書式
SDO_FILTER(geometry1, geometry2, param);
説明
空間索引を使用して、指定されたオブジェクト(対象領域など)と空間的に作用するオブジェクトの集合を識別したり、指定した2つのオブジェクトが相互作用するかどうかを判別します。非接続でないオブジェクトは、空間的に相互作用します。
この演算子は、1次フィルタ処理のみ実行します。SDO_RELATE演算子によって実行される2次フィルタ処理によって、オブジェクトが空間的に相互作用するかどうかを特定できます。
キーワードおよびパラメータ
値 | 説明 |
---|---|
geometry1 |
表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。 |
geometry2 |
表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。 |
param |
オプションで、
|
戻り値
式SDO_FILTER(geometry1,geometry2) = 'TRUE'は、非接続以外のオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。
使用上の注意
SDO_FILTER演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件式は、SDO_FILTER(arg1, arg2) = 'TRUE'形式である必要があります。(式は'TRUE'以外のどの値とも等しくない必要があります。)
geometry2
は表から取り出されるか、または一時的なSDO_GEOMETRYオブジェクト(バインド変数、SDO_GEOMETRYコンストラクタなど)となります。
geometry2
列が空間索引付けされていない場合、演算子は問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。
geometry2
の2つ以上のジオメトリが演算子に渡される場合は、ORDEREDオプティマイザ・ヒントが指定されている必要があり、geometry2
にある表をFROM句の最初に指定する必要があります。
geometry1
およびgeometry2
が異なる座標系に基づいている場合、geometry2
は、「演算子およびファンクションでの座標系が異なるジオメトリの使用」で説明するとおり、操作を実行するため一時的にgeometry1
の座標系に変換されます。
注意:
ファイングレイン・アクセス制御ポリシーの表またはビューへの追加に、DBMS_RLS.ADD_POLICYプロシージャが使用されていて、指定されたポリシー・ファンクションが空間演算子を使用する場合、その演算子はSDO_FILTERである必要があります。このコンテキストでは、他の空間演算子はサポートされていません。
空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。
例
次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)と相互作用するジオメトリを選択します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図2-1に示す定義およびデータを使用しています。)
SELECT c.mkt_id, c.name FROM cola_markets c WHERE SDO_FILTER(c.shape, SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(4,6, 8,8)) ) = 'TRUE'; MKT_ID NAME ---------- -------------------------------- 2 cola_b 1 cola_a 4 cola_d
次の例は前述の例と同じですが、ジオメトリのMBRのうち少なくとも1つの辺が4.1以上のジオメトリのみを含む、という点で異なります。この場合、cola_a
およびcola_b
のみが戻されます。これは、これらのMBRには4.1以上の長さを持つ辺が少なくとも1つあるためです。円cola_d
は、そのMBRの各辺の長さが4の四角形であるため、除外されます。
SELECT c.mkt_id, c.name FROM cola_markets c WHERE SDO_FILTER(c.shape, SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(4,6, 8,8)), 'min_resolution=4.1' ) = 'TRUE'; MKT_ID NAME ---------- -------------------------------- 2 cola_b 1 cola_a
次の例では、GEOMETRY列のオブジェクトが、GIDに1の値を持つQUERY_POLYS表のGEOMETRY列オブジェクトと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。
SELECT A.gid FROM Polygons A, query_polys B WHERE B.gid = 1 AND SDO_FILTER(A.Geometry, B.Geometry) = 'TRUE';
次の例では、GEOMETRY列オブジェクトが、aGeom
変数に格納されているジオメトリと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。
Select A.Gid FROM Polygons A WHERE SDO_FILTER(A.Geometry, :aGeom) = 'TRUE';
次の例では、GEOMETRY列オブジェクトが、左下の座標に(x1,y1)、右上の座標に(x2, y2)を持つ、指定した矩形と空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。
Select A.Gid FROM Polygons A WHERE SDO_FILTER(A.Geometry, sdo_geometry(2003,NULL,NULL, sdo_elem_info_array(1,1003,3), sdo_ordinate_array(x1,y1,x2,y2)) ) = 'TRUE';
次の例では、GEOMETRY列オブジェクトが、QUERY_POLYS表のGEOMETRY列オブジェクトに格納されているジオメトリと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。この例では、ORDEREDオプティマイザ・ヒントを使用し、FROM句の最初にQUERY_POLYS(geometry2
)表を指定します。これは、geometry2
の複数のジオメトリが含まれるためです(「使用上の注意」を参照)。
SELECT /*+ ORDERED */ A.gid FROM query_polys B, polygons A WHERE SDO_FILTER(A.Geometry, B.Geometry) = 'TRUE';
関連項目