30 SDO_PC_PKGパッケージ(点群)
MDSYS.SDO_PC_PKGパッケージには、点群の使用をサポートするサブプログラムが含まれています。
このパッケージのサブプログラムを使用するには、点群を使用したソリッドのモデル化など、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては「3次元の空間オブジェクト」、点群を使用したソリッドのモデル化については「ソリッドのモデル化」、点群に関連するデータ型については「点群に関連するオブジェクト型」を参照してください。
トピック:
30.1 SDO_PC_PKG.CLIP_PC
構文
SDO_PC_PKG.CLIP_PC( inp IN SDO_PC, ind_dim_qry IN SDO_GEOMETRY, other_dim_qry IN SDO_MBR, qry_min_res IN NUMBER, qry_max_res IN NUMBER, blkno IN NUMBER DEFAULT NULL, include_custom_dims IN NUMBER DEFAULT 0 ) RETURN SDO_PC_BLK_TYPE;
説明
点群に対してクリップ操作を実行します。
パラメータ
- inp
-
クリップ操作を実行する点群を指定します。
- ind_dimqry
-
点群の索引付けされた次元の問合せについて、戻されるオブジェクトを選択するウィンドウを指定します。通常、2次元ジオメトリの場合はポリゴン、3次元ジオメトリの場合は錐台となります。
- other_dimqry
-
点群の索引付けされていない次元の問合せについて、戻されるオブジェクトを選択するウィンドウを指定します。通常、2次元ジオメトリの場合はポリゴン、3次元ジオメトリの場合は錐台となります。索引付けされていない次元とは、総次元には含まれているが、索引付けされていない次元です。索引次元および総次元の説明は、SDO_PC_PKG.INITファンクションの
pc_tot_dimensions
パラメータの説明を参照してください。SDO_MBR型は
(LOWER_LEFT SDO_VPOINT_TYPE, UPPER_RIGHT SDO_VPOINT_TYPE)
として定義され、SDO_V_POINT_TYPEはVARRAY(64) OF NUMBER
として定義されます。 - qry_min_res
-
最小解像度の値を指定します。解像度が
qry_min_res
以上およびqry_max_res
以下のqry
のオブジェクトがクリップ操作により戻されます。 - qry_max_res
-
最大解像度の値を指定します。解像度が
qry_min_res
以上およびqry_max_res
以下のqry
のオブジェクトがクリップ操作により戻されます。 - blkid
-
クリップ操作によって戻されるオブジェクトを制限するブロックのブロックID番号を指定します。このパラメータがNULLの場合、他のパラメータを満たすすべてのオブジェクトが戻されます。
- include_custom_dims
-
数値0または1で、SDO_PCのPC_TOT_DIMENSIONSの個数に含まれる、通常(NUMBER型)の次元のみを含むファンクションによって点群ブロックが戻されるかどうかを指定します。このような通常の次元のみを戻す場合は、
include_custom_dims=0
(デフォルト)です。ブロック表に格納された点群ブロックには、その他のカスタム次元が含まれたままですが、この個々のCLIP_PC問合せはこれらを戻しません。include_custom_dims=1
では、通常の次元とカスタムの次元の両方が含まれます。カスタムの次元の詳細は、「使用上の注意」を参照してください。
使用上の注意
このファンクションは、指定した問合せウィンドウ内にあり、かつパラメータによって指定されている他の要件を満たしている点群の点を戻します。一般に、このファンクションは点群に対して問合せを実行するために使用します。点群の問合せのパフォーマンスを最大にするには、ファンクションが操作に対して考慮する必要のあるオブジェクトの数を最小限にします。
SDO_PCおよびSDO_PC_BLK_TYPEデータ型については、「点群に関連するオブジェクト型」を参照してください。
このファンクションは、カスタム次元の格納と問合せをサポートします。カスタム次元は、NUMBER型の場合とそれ以外の型の場合があり、SDO_PCのPC_TOT_DIMENSIONSの個数には含まれません。include_custom_dims=1
を指定すると、カスタム次元を問合せ結果に含めることはできますが、カスタム次元は数値型ではない(ind_dimqry
やother_dimqry
の数値インタフェースで表現できない)ため、ind_dimqry
パラメータとother_dimqry
パラメータのいずれの問合せ制約にも含まれません。
カスタムの次元はSDO_PC_PKG.CREATE_PCプロシージャでは作成できません。
このファンクションをSDO_PC_PKG.CLIP_PC_FLATと比較すると、このファンクションは、平面表に格納された点群データを入力として使用します(SDO_PCオブジェクトとは逆)。
点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。
例
次の例では、点群に対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/pc.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
. . . declare inp sdo_pc; begin select pc INTO inp from base where rownum=1; insert into restst select * from table(sdo_pc_pkg.clip_pc ( inp, -- Input point cloud object sdo_geometry(2003, 8307, null, sdo_elem_info_array(1, 1003, 3), sdo_ordinate_array(-175.86157, -14.60521, 0,0)), -- Query null, null, null)); end; / . . .
30.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; /
30.3 SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES
構文
SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES( pc IN SDO_PC, sampling_resolution IN NUMBER, elevations IN SDO_ORDINATE_ARRAY, region IN SDO_GEOMETRY ) RETURN SDO_GEOMETRY_ARRAY;
または
SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES( pc_flat_table IN VARCHAR2, srid IN NUMBER, sampling_resolution IN NUMBER, elevations IN SDO_ORDINATE_ARRAY, region IN SDO_GEOMETRY ) RETURN SDO_GEOMETRY_ARRAY;
または
SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES( pc IN SDO_PC, sampling_resolution IN NUMBER, elevations_min IN NUMBER, elevations_interval IN NUMBER, elevations_max IN NUMBER, region IN SDO_GEOMETRY ) RETURN SDO_GEOMETRY_ARRAY;
または
SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES( pc_flat_table IN VARCHAR2, srid IN SDO_PC, sampling_resolution IN NUMBER, elevations_min IN NUMBER, elevations_interval IN NUMBER, elevations_max IN NUMBER, region IN SDO_GEOMETRY ) RETURN SDO_GEOMETRY_ARRAY;
説明
点群の輪郭線を生成します。
パラメータ
- pc
-
輪郭線を生成する点群オブジェクトを指定します。
- sampling_resolution
-
点群の座標参照系内のグリッド・セルの高さおよび幅を決定する数値を指定します。数値が小さいほど、結果の輪郭ジオメトリは詳細になります。
輪郭生成のプロセスはグリッドベースです。グリッド・セル内の点は平均化されます。これは次のことを意味します。
-
グリッド・セルが同じ平均となるかぎりは、少しだけ異なる2つの点群は同じ輪郭になる場合があります。
-
輪郭線の頂点の数と円滑さは解像度に直接作用します。
-
- elevations
-
輪郭を生成する標高の配列を指定します。
- elevations_min
-
輪郭を生成する対象の等距離の標高のセット内の開始標高値。
- elevations_interval
-
輪郭を生成する際、
elevations_min
とelevations_max
の間の標高値に使用する間隔。たとえば、
elevations_min
が100、elevations_max
が150、elevations_interval
が10の場合、標高100、110、120、130、140および150について輪郭が生成されます。 - elevations_max
-
輪郭を生成する対象の等距離の標高のセット内の終了標高値。
- region
-
輪郭を生成するリージョンを制限するウィンドウ(点群のエクステント内)を指定します。
使用上の注意
このファンクションは、SDO_GEOMETRY輪郭の配列を戻します。配列内の輪郭の順序は、elevations
入力パラメータまたはelevations_min
、elevations_max
およびelevations_interval
入力パラメータに基づいて算出された値内の順序と同じです。個々の輪郭は複数線ストリングです。
より高い標高を含む輪郭は(外部の輪と同じ)反時計回りです。より低い標高を含む輪郭は(内部の輪と同じ)時計回りです。
点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。
例
次の例では、指定した点群オブジェクトから輪郭線を作成します。
SELECT sdo_pc_pkg.create_contour_geometries( (SELECT pc FROM pcs WHERE pc_id = 1), sampling_resolution => 50, elevations => sdo_ordinate_array(100, 101, 102, 103, 104, 105, 106, 107, 108, 109), region => mdsys.sdo_geometry(2003, null, null, mdsys.sdo_elem_info_array(1, 1003, 3), mdsys.sdo_ordinate_array(-1000, 0, 999, 100))) FROM DUAL; SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES((SELECTPCFROMPCSWHEREPC_ID=1),SAMPLING_RESO -------------------------------------------------------------------------------- SDO_GEOMETRY_ARRAY(SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 5 , 2, 1), SDO_ORDINATE_ARRAY(-75.5, 24.5, -25.5, 74.5, 25.5, 74.5, 74.5, 25.5, 75 .5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 7, 2, 1) , SDO_ORDINATE_ARRAY(-76.5, 24.5, -75.5, 25.5, -26.5, 74.5, 26.5, 74.5, 74.5, 26 .5, 76.5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-77.5, 24.5, -75.5, 26.5, -27.5, 74.5, 27.5, 74.5, 74 .5, 27.5, 77.5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-78.5, 24.5, -75.5, 27.5, -28.5, 74.5, 28.5, 74 .5, 74.5, 28.5, 78.5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY (1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-79.5, 24.5, -75.5, 28.5, -29.5, 74.5, 29 .5, 74.5, 74.5, 29.5, 79.5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO _ARRAY(1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-80.5, 24.5, -75.5, 29.5, -30.5, 74 .5, 30.5, 74.5, 74.5, 30.5, 80.5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, SDO_ELE M_INFO_ARRAY(1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-81.5, 24.5, -75.5, 30.5, -31 .5, 74.5, 31.5, 74.5, 74.5, 31.5, 81.5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, S DO_ELEM_INFO_ARRAY(1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-82.5, 24.5, -75.5, 31. 5, -32.5, 74.5, 32.5, 74.5, 74.5, 32.5, 82.5, 24.5)), SDO_GEOMETRY(2002, NULL, N ULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-83.5, 24.5, -75. 5, 32.5, -33.5, 74.5, 33.5, 74.5, 74.5, 33.5, 83.5, 24.5)), SDO_GEOMETRY(2002, N ULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 7, 2, 1), SDO_ORDINATE_ARRAY(-84.5, 24.5 , -75.5, 33.5, -34.5, 74.5, 34.5, 74.5, 74.5, 34.5, 84.5, 24.5))) 1 row selected.
30.4 SDO_PC_PKG.CREATE_PC
構文
SDO_PC_PKG.CREATE_PC( inp IN SDO_PC, inptable IN VARCHAR2, clstPcdataTbl IN VARCHAR2 DEFAULT NULL);
説明
inptable
パラメータで指定した点を使用して点群を作成します。
パラメータ
- inp
-
使用するSDO_PCオブジェクトを指定します。このオブジェクトは、SDO_PC_PKG.INITファンクションによって作成されている必要があります。
- inptable
-
入力点群データを含む表またはビューの名前を指定します。この表またはビューには、次の列が含まれている必要があります。
-
RID (VARCHAR2(24)): 各点の一意のID。
-
VAL_D1 (NUMBER): 次元1の座標。
-
VAL_D2 (NUMBER): 次元2の座標。
-
. . .
-
VAL_Dn (NUMBER): 次元nの座標。ここでのnは、最も数字の大きい次元です。nは、点群が初期化されたときのSDO_PC_PKG.INITファンクションへのコールに含まれていた
pc_tot_dimensions
パラメータ値と一致している必要があります。
-
- clstPcdataTbl
-
結果として生成された点データを格納する表の名前を指定します。値を指定しない場合、この表は作成されません。表の詳細は、「使用上の注意」を参照してください。
使用上の注意
点群の最初のいくつかの次元を索引付けすると、後でSDO_PC_PKG.CLIP_PCファンクションを使用して検索することができます。索引付けする次元の正確な数は、初期化された点群オブジェクト内の点群エクステントの次元(具体的にはinp.pc_extent.sdo_gtype/1000
)によって決まります。
inptable
パラメータにビュー名を指定すると、SELECT ROWID FROM <view-name>
の問合せはエラーを戻すことはできません。
clstPcdataTbl
パラメータで表名を指定する場合は、指定する表が存在し、次の列が含まれている必要があります。
-
PTN_ID (NUMBER)
-
POINT_ID (NUMBER)
-
RID (VARCHAR2(24)): 各点の一意のID。
-
VAL_D1 (NUMBER): 次元1の座標。
-
VAL_D2 (NUMBER): 次元2の座標。
-
. . .
-
VAL_Dn (NUMBER): 次元nの座標。ここでのnは、最も数字の大きい次元です。nは、点群が初期化されたときのSDO_PC_PKG.INITファンクションへのコールに含まれていた
pc_tot_dimensions
パラメータ値と一致している必要があります。
clstPcdataTbl
パラメータの値が指定されている場合、このファンクションは、PTN_IDおよびPOINT_IDに対して適切な値を割り当て、他の属性のinptable
表またはビューから値をコピーすることによって表にデータを挿入します。この表は索引構成表として作成できます。この表をアプリケーションで使用すると、索引次元で反映される次元以外の次元に関してSQL問合せを使用した検索を実行できます。(索引次元および総次元の説明は、SDO_PC_PKG.INITファンクションのpc_tot_dimensions
パラメータの説明を参照してください。)
SDO_PCおよびSDO_PC_BLK_TYPEデータ型については、「点群に関連するオブジェクト型」を参照してください。
点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。
例
次の例では点群を作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/pc.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
. . . -- Create the blocks for the point cloud. sdo_pc_pkg.create_pc( pc, -- Initialized PointCloud object 'INPTAB', -- Name of input table to ingest into the pointcloud 'RES' -- Name of output table that stores the points (with ptn_id,pt_id) ); . . .
30.5 SDO_PC_PKG.DROP_DEPENDENCIES
構文
SDO_PC_PKG.DROP_DEPENDENCIES( basetable IN VARCHAR2, col IN VARCHAR2);
説明
点群ブロック表と指定した実表および列の間の依存性を削除します。
パラメータ
- basetable
-
点群の初期化時に(SDO_PC_PKG.INITファンクションの
basetable
パラメータで)指定されていた実表の名前を指定します。 - col
-
SDO_PC_PKG.INITファンクションの
basecol
パラメータで指定されていた実表内の列の名前を指定します。
使用上の注意
このプロシージャは、点群ブロック表を切り捨て、ブロック表と実表および列の組合せの間の関連付けを削除します。
このプロシージャを実行した後は、点群ブロック表を削除したり、表を別の実表および列の組合せに関連付けることができます。詳細は、SDO_PC_PKG.INITファンクションの「使用上の注意」を参照してください。
例
次の例では、点群ブロック表と(それぞれがBASEとPCという名前の)実表および列の間の依存性を削除します。
. . . declare begin mdsys.sdo_pc_pkg.drop_dependencies('BASE', 'PC'); end; /
30.6 SDO_PC_PKG.GET_PT_IDS
構文
SDO_PC_PKG.GET_PT_IDS( pts IN BLOB, num_pts IN NUMBER, pc_tot_dim IN NUMBER, blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL, ) RETURN SDO_NUMBER_ARRAY;
説明
点群内のブロックにある点のブロックIDおよび点IDの値を戻します。
パラメータ
- pts
-
点群ブロックを含むバイナリ・ラージ・オブジェクト(BLOB)を指定します。
- num_pts
-
点群ブロック内の点の数を指定します。点群ブロックの場合、点の数は点群ブロック表のNUM_POINTS列に格納されます(「SDO_PCオブジェクト型」の表2-7を参照)。
- pc_tot_dim
-
点群ブロック内の点の次元数を指定します。
- blk_domain
-
(現在は使用されていません。)
使用上の注意
このファンクションは、SDO_NUMBER_ARRAYオブジェクトを戻します。配列には数字の複数のペアが含まれ、各ペアは点のブロックIDと点IDを示します。このファンクションへの特定のコールについては、戻される配列内のすべての点に関連付けられているブロックID値が同じになります。SDO_NUMBER_ARRAY型は、VARRAY(1048576) OF NUMBER
として定義されます。
点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。
例
次の例では、点群ブロック内の点のブロックIDおよび点IDの値を戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/pc.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
SELECT SDO_PC_PKG.GET_PT_IDS( a.points, -- LOB containing the points a.num_points, -- # of points in the LOB 3 -- Total dimensionality of the points in the LOB ) FROM restst a WHERE num_points >0;
30.7 SDO_PC_PKG.INIT
構文
SDO_PC_PKG.INIT( basetable IN VARCHAR2, basecol IN VARCHAR2, blktable IN VARCHAR2, ptn_params IN VARCHAR2, pc_extent IN SDO_GEOMETRY, pc_tol IN NUMBER DEFAULT 0.0000000000005, pc_tot_dimensions IN NUMBER DEFAULT 2, pc_domain IN SDO_ORGSCL_TYPE DEFAULT NULL, pc_val_attr_tables IN SDO_STRING_ARRAY DEFAULT NULL, pc_other_attrs IN XMLTYPE DEFAULT NULL, ) RETURN SDO_PC;
説明
SDO_PCオブジェクトの作成により点群を初期化します。
パラメータ
- basetable
-
SDO_PC型の列を含む実表の名前を指定します。
- basecol
-
実表のSDO_PC型の列名を指定します。
- blktable
-
点群のブロックを格納するために使用する、点群ブロック表の名前を指定します。この表は存在している必要があり、また
CREATE TABLE <table-name> AS select * from mdsys.sdo_pc_blk_table;
形式の文によって作成されている必要があります。各点群ブロック表に関連付けることのできる
basetable
とbasecol
の組合せは1つのみです。 - ptn_params
-
点群のパーティション化に関するパラメータを指定します。カンマで区切られたキーワードを引用符で囲んだ文字列で指定します。たとえば、'
blk_capacity=1000,work_tablespace=my_work_ts'
などです。このパラメータがNULLの場合、点群はパーティション化されません。使用可能なキーワードは、次のとおりです。-
blk_capacity=n
: nは各パーティション内の最大行数です。デフォルト値は5000です。この値には、常に50より大きい数字を指定します。 -
work_tablespace=x
: xは、パーティション操作中に一時表を作成する表領域の名前です。
-
- pc_extent
-
点群の空間エクステント(点群に含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクトを指定します。このパラメータはnullであってはならない。
測地データの場合、このジオメトリは2つの次元を持つ必要があります。測地データ以外の場合は、最大で4つの次元を持つことができます。このジオメトリの次元は、
pc_tot_dimensions
パラメータで使用できる最小値として使用されます(このパラメータの説明を参照)。 - pc_tol
-
点群のオブジェクトの許容差を指定します。(空間許容差の詳細は、1.5.5項を参照してください。)このパラメータがNULLの場合、デフォルト値は0.0000000000005です。
- pc_tot_dimensions
-
点群オブジェクトの総次元を指定する数字を指定します。点群ブロックの各点については、
pc_tot_dimensions
座標(値)が格納されます。総次元は、
pc_extent
ジオメトリの次元数である索引次元以上に指定する必要があります。総次元を索引次元より大きく指定すると、空間データと同じフェッチ操作で必要な非空間属性を取得できます。総次元の最大値は8です。このパラメータのデフォルト値は2です。 - pc_domain
-
(現在は使用されていません。)
- pc_val_attr_tables
-
点群の値属性表の名前を指定するSDO_STRING_ARRAYオブジェクトを指定します。このパラメータがNULLの場合、点群に関連付けられる値属性表はありません。SDO_STRING_ARRAY型は、VARRAY(1048576) OF VARCHAR2(32)として定義されます。
- pc_other_attrs
-
点群のその他の属性を指定するXMLTYPEオブジェクトを指定します。このパラメータがNULLの場合、点群はその他の属性を持ちません。
「使用上の注意」の説明のように、このパラメータは、点群のピラミッド化にメタデータを含めることができます。
使用上の注意
このファンクションを使用してSDO_PCオブジェクトを初期化した後は、このオブジェクトをSDO_PC_PKG.CREATE_PCプロシージャへの入力として指定することにより点群を作成できます。
SDO_PCデータ型については、「TINに関連するオブジェクト型」を参照してください。
点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。
このファンクションを使用した後、blktable
表は実表と同期された状態で維持されます。たとえば、実表から行を削除すると、その行の対応する点群オブジェクトのブロックもブロック表から削除され、実表が切り捨てられると、ブロック表も切り捨てられます。
ブロック表を削除できるのは、実表が削除された場合か、またはSDO_PC_PKG.DROP_DEPENDENCIESプロシージャが実行された場合のみです。
pc_other_attrs
パラメータは、次の例のように点群のピラミッド化のメタデータを指定するために使用できます。
xmltype( '<opc:sdoPcObjectMetadata xmlns:opc="http://xmlns.oracle.com/spatial/vis3d/2011/sdovis3d.xsd" xmlns:las="http://liblas.org/schemas/LAS/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <opc:sdoPcPyramid preserveLevel1="true"/> </opc:sdoPcObjectMetadata>')
次の文を入力すると、pc_other_attrs
パラメータのXMLスキーマ定義(XSD)が表示されます。
SET LONG 40000 SELECT xmlschema FROM sdo_xml_schemas WHERE description = 'EPSG sdo3d.xsd';
点群のピラミッド化は、レベル1 (リーフ)からレベルn (ルート)までの複数のピラミッド・レベルを作成します。通常、レベルiに格納されている点は、より詳細なレベルのいずれでも繰り返されることはありません。すべての点は、正確に1回物理的に格納されます。リーフ・レベル1は、preserveLevel1="true"
(前述の例を参照)を指定することで、このルールから除外できるので、ピラミッド化に準拠していないアプリケーションには適用する必要ありません。ただし、このpreserveLevel1="true"
オプション(除外されるのでレベル1を維持)では、各点が2回格納(ルート・レベルで1回とピラミッドの残りで1回)されるので、2倍の領域が必要になります。
例
次の例では、SDO_PCオブジェクトを作成することによって点群を初期化し、オブジェクトのIDを表示します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/pc.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
. . . declare pc sdo_pc; begin -- Initialize the point cloud object. pc := sdo_pc_pkg.init( 'BASE', -- Table that has the SDO_POINT_CLOUD column defined 'PC', -- Column name of the SDO_POINT_CLOUD object 'BLKTAB', -- Table to store blocks of the point cloud 'blk_capacity=1000', -- max # of points per block mdsys.sdo_geometry(2003, 8307, null, mdsys.sdo_elem_info_array(1,1003,3), mdsys.sdo_ordinate_array(-180, -90, 180, 90)), -- Extent 0.5, -- Tolerance for point cloud 3, -- Total number of dimensions null); . . .
30.8 SDO_PC_PKG.TO_GEOMETRY
構文
SDO_PC_PKG.TO_GEOMETRY( pts IN BLOB, num_pts IN NUMBER, pc_tot_dim IN NUMBER, srid IN NUMBER DEFAULT NULL, blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL ) RETURN SDO_GEOMETRY;
説明
点群のすべてまたは一部を表すジオメトリ・オブジェクトを戻します。
パラメータ
使用上の注意
このファンクションは、pts
パラメータのすべての点ジオメトリを表す、単一の複数点のSDO_GEOMETRYオブジェクトを戻します。たとえば、点にクリップ操作の結果またはブロック全体の内容を反映することもできます。
点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。
例
次の例では、点群を表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/pc.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
. . . -- Return points in blk_id of the point cloud as a multipoint collection. select sdo_pc_pkg.to_geometry( a.points, -- point LOB a.num_points, -- # of points in the LOB 3, -- total dimensionality 8307 -- SRID ) from blktab a where blk_id=0; . . .