この章では、表28-1に示す点群のサブプログラムについて説明します。
表28-1 点群のサブプログラム
サブプログラム | 説明 |
---|---|
|
点群に対してクリップ操作を実行します。 |
|
|
|
点群ブロック表と指定した実表および列の間の依存性を削除します。 |
|
点群を初期化します。 |
|
点群のすべてまたは一部を表すジオメトリ・オブジェクトを戻します。 |
このパッケージのサブプログラムを使用するには、点群を使用したソリッドのモデル化など、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては1.11項、点群を使用したソリッドのモデル化については1.11.2項、点群に関連するデータ型については2.6項を参照してください。
構文
SDO_PC_PKG.CLIP_PC(
inp IN SDO_PC,
ind_dimqry IN SDO_GEOMETRY,
other_dimqry IN SDO_MBR,
qry_min_res IN NUMBER,
qry_max_res IN NUMBER,
blkno IN NUMBER DEFAULT NULL.
) RETURN SDO_PC_BLK_TYPE;
パラメータ
クリップ操作を実行する点群を指定します。
点群の索引付けされた次元の問合せについて、戻されるオブジェクトを選択するウィンドウを指定します。通常、2次元ジオメトリの場合はポリゴン、3次元ジオメトリの場合は錐台となります。
点群の索引付けされていない次元の問合せについて、戻されるオブジェクトを選択するウィンドウを指定します。通常、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_max_res
以下のqry
のオブジェクトがクリップ操作により戻されます。
最大解像度の値を指定します。解像度がqry_min_res
以上およびqry_max_res
以下のqry
のオブジェクトがクリップ操作により戻されます。
クリップ操作によって戻されるオブジェクトを制限するブロックのブロックID番号を指定します。このパラメータがNULLの場合、他のパラメータを満たすすべてのオブジェクトが戻されます。
使用上の注意
このファンクションは、指定した問合せウィンドウ内にあり、かつパラメータによって指定されている他の要件を満たしている点群の点を戻します。一般に、このファンクションは点群に対して問合せを実行するために使用します。点群の問合せのパフォーマンスを最大にするには、ファンクションが操作に対して考慮する必要のあるオブジェクトの数を最小限にします。
SDO_PCおよびSDO_PC_BLK_TYPEデータ型については、2.6項を参照してください。
点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。
例
次の例では、点群に対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME
/md/demo/examples/PointCloud/plsql/
にあるsdo_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; / . . .
構文
SDO_PC_PKG.CREATE_PC(
inp IN SDO_PC,
inptable IN VARCHAR2,
clstPcdataTbl IN VARCHAR2 DEFAULT NULL);
パラメータ
使用するSDO_PCオブジェクトを指定します。このオブジェクトは、SDO_PC_PKG.INITファンクションによって作成されている必要があります。
入力点群データを含む表またはビューの名前を指定します。この表またはビューには、次の列が含まれている必要があります。
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
パラメータ値と一致している必要があります。
結果として生成された点データを格納する表の名前を指定します。値を指定しない場合、この表は作成されません。表の詳細は、「使用上の注意」を参照してください。
使用上の注意
点群の最初のいくつかの次元を索引付けすると、後で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データ型については、2.6項を参照してください。
点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。
例
次の例では点群を作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME
/md/demo/examples/PointCloud/plsql/
にあるsdo_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) ); . . .
パラメータ
点群の初期化時に(SDO_PC_PKG.INITファンクションのbasetable
パラメータで)指定されていた実表の名前を指定します。
SDO_PC_PKG.INITファンクションのbasecol
パラメータで指定されていた実表内の列の名前を指定します。
使用上の注意
このプロシージャは、点群ブロック表を切り捨て、ブロック表と実表および列の組合せの間の関連付けを削除します。
このプロシージャを実行した後は、点群ブロック表を削除したり、表を別の実表および列の組合せに関連付けることができます。詳細は、SDO_PC_PKG.INITファンクションの「使用上の注意」を参照してください。
構文
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;
使用上の注意
このファンクションは、SDO_NUMBER_ARRAYオブジェクトを戻します。配列には数字の複数のペアが含まれ、各ペアは点のブロックIDと点IDを示します。このファンクションへの特定のコールについては、戻される配列内のすべての点に関連付けられているブロックID値が同じになります。SDO_NUMBER_ARRAY型は、VARRAY(1048576) OF NUMBER
として定義されます。
点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。
例
次の例では、点群ブロック内の点のブロックIDおよび点IDの値を戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME
/md/demo/examples/PointCloud/plsql/
にあるsdo_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;
構文
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型の列を含む実表の名前を指定します。
実表のSDO_PC型の列名を指定します。
点群のブロックを格納するために使用する、点群ブロック表の名前を指定します。この表は存在している必要があり、またCREATE TABLE <table-name> AS select * from mdsys.sdo_pc_blk_table;
形式の文によって作成されている必要があります。
各点群ブロック表に関連付けることのできるbasetable
とbasecol
の組合せは1つのみです。
点群のパーティション化に関するパラメータを指定します。カンマで区切られたキーワードを引用符で囲んだ文字列で指定します。たとえば、'blk_capacity=1000,work_tablespace=my_work_ts'
などです。このパラメータがNULLの場合、点群はパーティション化されません。使用可能なキーワードは、次のとおりです。
blk_capacity=n
: nは各パーティション内の最大行数です。デフォルト値は5000です。この値には、常に50より大きい数字を指定します。
work_tablespace=x
: xは、パーティション操作中に一時表を作成する表領域の名前です。
点群の空間エクステント(点群に含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクトを指定します。このパラメータは、NULL以外である必要があります。
測地データの場合、このジオメトリは2つの次元を持つ必要があります。測地データ以外の場合は、最大で4つの次元を持つことができます。このジオメトリの次元は、pc_tot_dimensions
パラメータで使用できる最小値として使用されます(このパラメータの説明を参照)。
点群のオブジェクトの許容差を指定します。(空間許容差の詳細は、1.5.5項を参照してください。)このパラメータがNULLの場合、デフォルト値は0.0000000000005です。
点群オブジェクトの総次元を指定する数字を指定します。点群ブロックの各点については、pc_tot_dimensions
座標(値)が格納されます。
総次元は、pc_extent
ジオメトリの次元数である索引次元以上に指定する必要があります。総次元を索引次元より大きく指定すると、空間データと同じフェッチ操作で必要な非空間属性を取得できます。総次元の最大値は8です。このパラメータのデフォルト値は2です。
(現在は未使用。)
点群の値属性表の名前を指定するSDO_STRING_ARRAYオブジェクト。このパラメータがNULLの場合、点群に関連付けられる値属性表はありません。SDO_STRING_ARRAY型は、VARRAY(1048576) OF VARCHAR2(32)として定義されます。
点群のその他の属性を指定するXMLTYPEオブジェクトを指定します。このパラメータがNULLの場合、点群はその他の属性を持ちません。
使用上の注意
このファンクションを使用してSDO_PCオブジェクトを作成した後は、このオブジェクトをSDO_PC_PKG.CREATE_PCプロシージャへの入力として指定することにより点群を作成できます。
SDO_PCデータ型の詳細は、2.5項を参照してください。
点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。
このファンクションを使用した後、blktable表は実表と同期された状態で維持されます。たとえば、実表から行を削除すると、その行の対応する点群オブジェクトのブロックもブロック表から削除され、実表が切り捨てられると、ブロック表も切り捨てられます。
ブロック表を削除できるのは、実表が削除された場合か、またはSDO_PC_PKG.DROP_DEPENDENCIESプロシージャが実行された場合のみです。
例
次の例では、SDO_PCオブジェクトを作成することによって点群を初期化し、オブジェクトのIDを表示します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME
/md/demo/examples/PointCloud/plsql/
にあるsdo_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); . . .
構文
SDO_PC_PKG.TO_GEOMETRY(
pts IN BLOB,
num_pts IN NUMBER,
tin_tot_dim IN NUMBER,
srid IN NUMBER DEFAULT NULL,
blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL
) RETURN SDO_GEOMETRY;
パラメータ
点を含むBLOBを指定します。
結果として生成されるジオメトリに含まれる点の最大数を指定します。
データに定義する空間次元数を指定します。
データに関連付けられた空間参照(座標系)IDを指定します。このパラメータがNULLの場合、SRID値はデータに関連付けられません。
(現在は未使用。)
使用上の注意
このファンクションは、pts
パラメータのすべての点ジオメトリを表す、単一の複数点のSDO_GEOMETRYオブジェクトを戻します。たとえば、点にクリップ操作の結果またはブロック全体の内容を反映することもできます。
点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。
例
次の例では、点群を表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME
/md/demo/examples/PointCloud/plsql/
にあるsdo_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; . . .