29.2 SDO_PC_PKG.CLIP_PC_FLAT
書式
SDO_PC_PKG.CLIP_PC_FLAT( geometry IN SDO_GEOMETRY, table_name IN VARCHAR2, tolerance IN NUMBER, other_dim_qry IN SDO_MBR, mask IN VARCHAR2 DEFAULT NULL ) RETURN REF CURSOR;
説明
点群データが平面表に格納された、平面形式の点群でクリップ操作を実行します。
パラメータ
- geometry
-
クリップ・ウィンドウとして使用する2次元ジオメトリです。たとえば:
geometry => SDO_GEOMETRY( 2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARRAY( 0.75, 0.75, 1.25, 1.25)) - table_name
-
点群データを含む表またはビューの名前を指定します。表またはビューの最初の2つの列は、XおよびYという名前で、Oracle NUMBER型にする必要があります。オプションで、XおよびYに続いて、表またはビューにはNUMBER型のZ列と、その他の非空間の点群属性を含めることができます。その他の非空間の点群属性は、任意のデータ型を持つことができますが、
other_dim_qryパラメータの制約として指定する場合は、Oracle NUMBER型にする必要があります。 - tolerance
-
点群のオブジェクトの許容差を指定します(空間許容差の詳細は、「許容差」を参照してください)。このパラメータがNULLの場合、デフォルト値は0.0000000000005です。
- other_dim_qry
-
Oracle NUMBER型の任意の列(X列とY列を除く)に対する、ユーザー定義の問合せ範囲を提供する最小境界矩形(MBR)を指定します。
SDO_MBR型は
(LOWER_LEFT SDO_VPOINT_TYPE, UPPER_RIGHT SDO_VPOINT_TYPE)として定義され、SDO_V_POINT_TYPEはVARRAY(64) OF NUMBERとして定義されます。問合せ範囲で制約されない、Oracle NUMBER型の列に対しては、SDO_V_POINT_TYPE配列にNULLを指定します。
- mask
-
ポリゴンと相互作用する点に適用可能な位相関係を指定します。有効な値は
'mask=<value>'で、<value>はSDO_RELATE演算子に対して有効な1つ以上のマスク値(TOUCH、OVERLAPBDYDISJOINT、OVERLAPBDYINTERSECT、EQUAL、INSIDE、COVEREDBY、CONTAINS、COVERS、ANYINTERACT、ON)です。近似チェックを実行するFILTERも指定できます。FILTERは、ポリゴンと交差するすべての候補と、その他のいくつかのものを戻します。論理ブール演算子ORを使用して、'mask=inside+touch'のように複数のマスクを組み合せることができますが、FILTERは他のマスクと組み合せることはできません。このパラメータがNULLであるか、または空の文字列を含む場合、
mask=ANYINTERACTであるとみなされます。
使用上のノート
このファンクションは、SDO_PCオブジェクトに格納された入力点群データを使用するSDO_PC_PKG.CLIP_PCとは異なり、平面形式の点群を使用できます。SDO_PCの代替として、ハードウェア環境と使用方法に応じて、平面形式が点群サポートに追加されました。平面形式の利点の1つは、その動的な性質で、点データに対する更新であるため、再ブロック化を必要としません。
Exadata以外の環境では、X列とY列に対して複合Bツリー索引を作成することを強くお薦めします。複合Bツリー索引には、other_dim_qryパラメータに対して記述されているユーザー定義の問合せ範囲で制約される他のOracle NUMBER列も含めます。点群データの更新があると、自動的にBツリー索引が更新されます。
このファンクションをSDO_PC_PKG.CLIP_PCと比較すると、このファンクションは、SDO_PCオブジェクトに格納された点群データを入力として使用します。
点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。この項には、点群データを格納するためのSDO_PCと平面表のアプローチの説明があります。
例
次の例では、INPPTABという名前の表の最初の3つの列からINPTAB2という名前のビューを作成します。次に、点群データに対してクリップ操作を実行します。
CREATE VIEW inptab2 AS (select x x, y y, z z from inptab);
DECLARE
my_cursor sys_refcursor;
TYPE rec IS RECORD(x NUMBER, y NUMBER, z number);
TYPE lst IS TABLE OF rec;
result_list lst;
BEGIN
my_cursor :=
SDO_PC_PKG.CLIP_PC_FLAT(
geometry =>
MDSYS.SDO_GEOMETRY(
2003,
NULL,
NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),
MDSYS.SDO_ORDINATE_ARRAY(
0.75, 0.75,
1.25, 1.25)),
table_name => 'INPTAB2',
tolerance => 0.05,
other_dim_qry => null,
mask => null);
FETCH my_cursor BULK COLLECT INTO result_list;
FOR I in 1 .. result_list.COUNT LOOP
dbms_output.put_line(
'(' || result_list(i).x || ', ' ||
result_list(i).y || ', ' ||
result_list(i).z || ')');
END LOOP;
CLOSE my_cursor;
END;
/親トピック: SDO_PC_PKGパッケージ(点群)