書式
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;
説明
点群データが平面表に格納された、平面形式の点群でクリップ操作を実行します。
パラメータ
クリップ・ウィンドウとして使用する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))
点群データを含む表またはビューの名前を指定します。表またはビューの最初の2つの列は、XおよびYという名前で、Oracle NUMBER型にする必要があります。オプションで、XおよびYに続いて、表またはビューにはNUMBER型のZ列と、その他の非空間の点群属性を含めることができます。その他の非空間の点群属性は、任意のデータ型を持つことができますが、other_dim_qry
パラメータの制約として指定する場合は、Oracle NUMBER型にする必要があります。
点群のオブジェクトの許容差を指定します(空間許容差の詳細は、「許容差」を参照してください)。このパラメータがNULLの場合、デフォルト値は0.0000000000005です。
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=
<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; /