32 SDO_TIN_PKGパッケージ(TIN)
MDSYS.SDO_TIN_PKGパッケージには、Triangulated Irregular Network (TIN)の使用をサポートするサブプログラムが含まれています。
このパッケージのサブプログラムを使用するには、Triangulated Irregular Network(TIN)を使用した表面のモデル化を含む、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては「3次元の空間オブジェクト」、TINを使用した表面のモデル化については「表面のモデル化」、TINに関連するデータ型については「TINに関連するオブジェクト型」を参照してください。
- SDO_TIN_PKG.CLIP_TIN
- SDO_TIN_PKG.CREATE_TIN
- SDO_TIN_PKG.DROP_DEPENDENCIES
- SDO_TIN_PKG.INIT
- SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN
- SDO_TIN_PKG.TO_DEM
- SDO_TIN_PKG.TO_GEOMETRY
親トピック: リファレンス情報
32.1 SDO_TIN_PKG.CLIP_TIN
構文
SDO_TIN_PKG.CLIP_TIN( inp IN SDO_TIN, qry IN SDO_GEOMETRY, qry_min_res IN NUMBER, qry_max_res IN NUMBER, blkid IN NUMBER DEFAULT NULL ) RETURN SDO_TIN_BLK_TYPE;
説明
TINに対してクリップ操作を実行します。
パラメータ
- inp
-
クリップ操作を実行するTINを指定します。
- qry
-
戻されるオブジェクトを選択するウィンドウを指定します。通常、2次元ジオメトリの場合はポリゴン、3次元ジオメトリの場合は錐台となります。
- qry_min_res
-
最小解像度の値を指定します。解像度が
qry_min_res
以上およびqry_max_res
以下のqry
のオブジェクトがクリップ操作により戻されます。 - qry_max_res
-
最大解像度の値を指定します。解像度が
qry_min_res
以上およびqry_max_res
以下のqry
のオブジェクトがクリップ操作により戻されます。 - blkid
-
クリップ操作によって戻されるオブジェクトを制限するブロックのブロックID番号を指定します。このパラメータがNULLの場合、他のパラメータを満たすすべてのオブジェクトが戻されます。
使用上のノート
このファンクションでは、指定した問合せウィンドウ内にあり、かつパラメータによって指定されている他の要件を満たしているTINの三角形を戻します。一般に、このファンクションはTINに対して問合せを実行するために使用します。TINの問合せのパフォーマンスを最大にするには、ファンクションが操作に対して考慮する必要のあるオブジェクトの数を最小限にします。
SDO_TINおよびSDO_TIN_BLK_TYPEデータ型については、「TINに関連するオブジェクト型」を参照してください。
TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。
例
次の例では、TINに対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/tin.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
. . . declare inp sdo_tin; begin select tin INTO inp from base where rownum=1; insert into restst select * from table(sdo_tin_pkg.clip_tin ( inp, -- Input TIN object sdo_geometry(2003, null, null, mdsys.sdo_elem_info_array(1, 1003, 3), mdsys.sdo_ordinate_array(-74.1, -73.9, 39.99999,40.00001)), -- Query null, null)); end; . . .
親トピック: SDO_TIN_PKGパッケージ(TIN)
32.2 SDO_TIN_PKG.CREATE_TIN
構文
SDO_TIN_PKG.CREATE_TIN( inp IN SDO_TIN, inptable IN VARCHAR2, clstPcdataTbl IN VARCHAR2 DEFAULT NULL);
説明
inptable
パラメータで指定した点を使用してTINを作成します。
パラメータ
- inp
-
使用するSDO_TINオブジェクトを指定します。このオブジェクトは、SDO_TIN_PKG.INITファンクションによって作成されている必要があります。
- inptable
-
入力TINデータを含む表またはビューの名前を指定します。この表またはビューには、次の列が含まれている必要があります。
-
RID (VARCHAR2(24)): 各点の一意のID。
-
VAL_D1 (NUMBER): 次元1の座標。
-
VAL_D2 (NUMBER): 次元2の座標。
-
. . .
-
VAL_Dn (NUMBER): 次元nの座標。ここでのnは、最も数字の大きい次元です。nは、TINが初期化されたときのSDO_TIN_PKG.INITファンクションへのコールに含まれていた
tin_tot_dimensions
パラメータ値と一致している必要があります。
-
- clstPcdataTbl
-
結果として生成された点データを格納する表の名前を指定します。値を指定しない場合、この表は作成されません。表の詳細は、「使用上のノート」を参照してください。
使用上のノート
TINの最初のいくつかの次元を索引付けすると、後でSDO_TIN_PKG.CLIP_TINファンクションを使用して検索することができます。索引付けする次元の正確な数は、初期化されたTINオブジェクト内のTINエクステントの次元(具体的にはinp.tin_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は、TINが初期化されたときのSDO_TIN_PKG.INITファンクションへのコールに含まれていた
tin_tot_dimensions
パラメータ値と一致している必要があります。
clstPcdataTbl
パラメータの値が指定されている場合、このファンクションは、PTN_IDおよびPOINT_IDに対して適切な値を割り当て、他の属性のinptable
表またはビューから値をコピーすることによって表にデータを挿入します。この表は索引構成表として作成できます。この表をアプリケーションで使用すると、索引次元で反映される次元以外の次元に関してSQL問合せを使用した検索を実行できます。(索引次元および総次元の説明は、SDO_TIN_PKG.INITファンクションのtin_tot_dimensions
パラメータの説明を参照してください。)
SDO_TINデータ型については、「TINに関連するオブジェクト型」を参照してください。
TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。
例
次の例ではTINを作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/tin.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
. . . -- Create the blocks for the TIN. sdo_tin_pkg.create_tin( tin, -- Initialized TIN 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_TIN_PKGパッケージ(TIN)
32.3 SDO_TIN_PKG.DROP_DEPENDENCIES
構文
SDO_TIN_PKG.DROP_DEPENDENCIES( basetable IN VARCHAR2, col IN VARCHAR2);
説明
TINブロック表と指定した実表および列の間の依存性を削除します。
パラメータ
- basetable
-
TINの初期化時に(SDO_TIN_PKG.INITファンクションの
basetable
パラメータで)指定されていた実表の名前を指定します。 - col
-
SDO_TIN_PKG.INITファンクションの
basecol
パラメータで指定されていた実表内の列名を指定します。
使用上のノート
このプロシージャは、TINブロック表を切り捨て、ブロック表と実表および列の組合せの間の関連付けを削除します。
このプロシージャを実行した後は、TINブロック表を削除したり、表を別の実表および列の組合せに関連付けることができます。詳細は、SDO_TIN_PKG.INITファンクションの「使用上のノート」を参照してください。
例
次の例では、TINブロック表と(それぞれがBASEとTINという名前の)実表および列の間の依存性を削除します。
. . . declare begin mdsys.sdo_tin_pkg.drop_dependencies('BASE', 'TIN'); end; /
親トピック: SDO_TIN_PKGパッケージ(TIN)
32.4 SDO_TIN_PKG.INIT
構文
SDO_TIN_PKG.INIT( basetable IN VARCHAR2, basecol IN VARCHAR2, blktable IN VARCHAR2, ptn_params IN VARCHAR2, tin_extent IN SDO_GEOMETRY, tin_tol IN NUMBER DEFAULT 0.000000000000005, tin_tot_dimensions IN NUMBER DEFAULT 2, tin_domain IN SDO_ORGSCL_TYPE DEFAULT NULL, tin_break_lines IN SDO_GEOMETRY DEFAULT NULL, tin_stop_lines IN SDO_GEOMETRY DEFAULT NULL, tin_void_rgns IN SDO_GEOMETRY DEFAULT NULL, tin_val_attr_tables IN SDO_STRING_ARRAY DEFAULT NULL, tin_other_attrs IN XMLTYPE DEFAULT NULL, ) RETURN SDO_TIN;
説明
SDO_TINオブジェクトの作成によりTINを初期化します。
パラメータ
- basetable
-
SDO_TIN型の列を含む実表の名前を指定します。
- basecol
-
実表のSDO_TIN型の列名を指定します。
- blktable
-
TINのブロックを格納するために使用する、TINブロック表の名前を指定します。この表は存在している必要があり、また
CREATE TABLE <table-name> AS select * from mdsys.sdo_tin_blk_table;
形式の文によって作成されている必要があります。各TINブロック表に関連付けることのできる
basetable
とbasecol
の組合せは1つのみです。 - ptn_params
-
TINのパーティション化に関するパラメータを指定します。カンマで区切られたキーワードを引用符で囲んだ文字列として指定します。たとえば、'
blk_capacity=1000,work_tablespace=my_work_ts'
などです。このパラメータがNULLの場合、TINはパーティション化されません。使用可能なキーワードは、次のとおりです。-
blk_capacity=n
: nは各パーティション内の最大行数です。デフォルト値は5000です。この値には、常に50より大きい数字を指定します。 -
work_tablespace=x
: xは、パーティション操作中に一時表を作成する表領域の名前です。
-
- tin_extent
-
TINの空間エクステント(TINに含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクトを指定します。このパラメータはnullであってはならない。
測地データの場合、このジオメトリは2つの次元を持つ必要があります。測地データ以外の場合は、最大で4つの次元を持つことができます。このジオメトリの次元は、
tin_tot_dimensions
パラメータで使用できる最小値として使用されます(このパラメータの説明を参照)。 - tin_tol
-
TIN内のオブジェクトの許容差。(空間許容差の詳細は、1.5.5項を参照してください。)このパラメータがNULLの場合、デフォルト値は0.0000000000005です。
- tin_tot_dimensions
-
TINオブジェクトの総次元を指定する数字を指定します。TINブロックの各点については、
tin_tot_dimensions
座標(値)が格納されます。総次元は、
tin_extent
ジオメトリの次元数である索引次元以上に指定する必要があります。総次元を索引次元より大きく指定すると、空間データと同じフェッチ操作で必要な非空間属性を取得できます。総次元の最大値は8です。このパラメータのデフォルト値は2です。 - tin_domain
-
(現在は使用されていません。)
- tin_break_lines
-
(現在は使用されていません。)
- tin_stop_lines
-
(現在は使用されていません。)
- tin_void_rgns
-
(現在は使用されていません。)
- tin_val_attr_tables
-
TINの値属性表の名前を指定するSDO_STRING_ARRAYオブジェクトを指定します。このパラメータがNULLの場合、TINに関連付けられる値属性表はありません。SDO_STRING_ARRAY型は、VARRAY(1048576) OF VARCHAR2(32)として定義されます。
- tin_other_attrs
-
TINのその他の属性を指定するXMLTYPEオブジェクトを指定します。このパラメータがNULLの場合、TINはその他の属性を持ちません。
このパラメータを使用すると、TINのピラミッド化にメタデータを含めることができます(「使用上のノート」を参照)。
使用上のノート
このファンクションを使用してSDO_TINオブジェクトを初期化した後は、このオブジェクトをSDO_TIN_PKG.CREATE_TINプロシージャへの入力として指定することでTINを作成できます。
SDO_TINデータ型については、「TINに関連するオブジェクト型」を参照してください。
TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。
tin_other_attrs
パラメータは、次に示す例のように、TINのピラミッド化のメタデータを指定するために使用できます。
xmltype( '<opc:sdoTinObjectMetadata 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:sdoTinPyramid/> </opc:sdoTinObjectMetadata>')
TINのピラミッド化では、レベル1 (詳細度が最も高い)からレベルn (詳細度が最も低い)までの複数のピラミッド・レベルを作成します。点群のピラミッド化(SDO_PC_PKG.INITの「使用上のノート」を参照)とは対照的に、TINのピラミッド化ではレベル1の保持に関するオプションがありません。レベル1は基本的にピラミッド化を伴わないTINと同じで、その他のすべてのレベルでは追加の領域が必要となるため、ピラミッド化を使用するTINでは、ピラミッド化を使用しないTINに比べて記憶域がより多く必要になります。
例
次の例では、SDO_TINオブジェクトの作成によりTINを初期化します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/tin.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
declare tin sdo_tin; begin -- Initialize the TIN object. tin := sdo_tin_pkg.init( 'BASE', -- Table that has the SDO_TIN column defined 'TIN', -- Column name of the SDO_TIN object 'BLKTAB', -- Table to store blocks of the TIN 'blk_capacity=1000', -- max # of points per block mdsys.sdo_geometry(2003, null, null, mdsys.sdo_elem_info_array(1,1003,3), mdsys.sdo_ordinate_array(-180, -90, 180, 90)), -- Extent 0.0000000005, -- Tolerance for TIN 3, -- Total number of dimensions null); . . .
親トピック: SDO_TIN_PKGパッケージ(TIN)
32.5 SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN
構文
SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN( ordinates2D SDO_ORDINATE_ARRAY, tin SDO_TIN ) RETURN SDO_ORDINATE_ARRAY;
説明
TINに対して2次元の点を投影することにより、点の高さを判断します。
パラメータ
- ordinates2D
-
投影する2次元の点を含むSDO_ORDINATE_ARRAYオブジェクトを指定します。これらの点には、方向付きの点(「方向付きの点」を参照)は使用できません。
- tin
-
点の投影先となるSDO_TINオブジェクトを指定します。
使用上のノート
このファンクションは、指定した2次元の入力点の高さの内挿を実行すると考えることができます。
SDO_TINデータ型については、「TINに関連するオブジェクト型」を参照してください。
TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。
例
次の例では、TINに対して2次元の点(2.3, 3.4)、(4.5, 5.6)、(6.7, 7.8)を投影し、3次元の点(2.3, 3.4, 5.7)、(4.5, 5.6, 10.1)、(6.7, 7.8, 14.5)を作成します。この例では、TINの形状は、zi=xi+yi
で示される傾斜面です。
SELECT sdo_tin_pkg.project_ordinates_onto_tin( ordinates2d => sdo_ordinate_array( 2.3, 3.4, 4.5, 5.6, 6.7, 7.8), tin => (select tin from tins where tin_id = 1)) FROM DUAL; SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN(ORDINATES2D=>SDO_ORDINATE_ARRAY(2.3,3.4,4 -------------------------------------------------------------------------------- SDO_ORDINATE_ARRAY(2.3, 3.4, 5.7, 4.5, 5.6, 10.1, 6.7, 7.8, 14.5) 1 row selected.
親トピック: SDO_TIN_PKGパッケージ(TIN)
32.6 SDO_TIN_PKG.TO_DEM
構文
SDO_TIN_PKG.TO_DEM( tin IN SDO_TIN, dem IN OUT SDO_GEORASTER, blocksize IN NUMBER, crs_units_per_pixel IN NUMBER);
説明
TINからDEM (数値標高モデル) GeoRasterオブジェクトを作成します。
パラメータ
- tin
-
TINオブジェクトを指定します。(SDO_TINデータ型については、「TINに関連するオブジェクト型」を参照してください。)
- dem
-
DEM GeoRasterオブジェクト。(SDO_GEORASTERデータ型の詳細は、『Oracle Spatial and Graph GeoRaster開発者ガイド』を参照してください。)
- blocksize
-
DEMのブロック・サイズをピクセル数で指定します。
- crs_units_per_pixel
-
各ピクセルに対するTINおよびDEMの座標参照系(SRID)の単位を指定します。たとえば、メジャーのSRID単位が10進度で、各ピクセルが1度の1/100を表す場合、
crs_units_per_pixel
値は0.01
になります。
使用上のノート
このプロシージャは、指定したGeoRasterオブジェクト(dem
パラメータ) を入力TINの情報に基づいて変更します。
TINとDEMは同じ座標参照系(SRID)を使用する必要があります。
次に例を示すように、dem
パラメータの場合、入力SDO_GEORASTERオブジェクトの取得は、GeoRasterオブジェクトを表に挿入し、そのGeoRasterオブジェクトを変数に戻すことによって行います。
INSERT INTO raster_table VALUES (1, sdo_geor.init('raster_data_table')) RETURNING raster_image INTO geor;
DEMの水平エクステントをピクセル数で求めるには、SRID単位での水平エクステントをcrs_units_per_pixel
パラメータ値で除算します。たとえば、次のような場合を考えてみます。
-
TINとDEMのSRIDは4326です。
-
SRIDの単位は10進度です。
-
入力TINの水平エクステントは、10進度で7です。
-
crs_units_per_pixel
値は0.01
です。
この例では、DEMの水平エクステントは700ピクセル(7/.01 = 700)です。
SDO_TINデータ型については、「TINに関連するオブジェクト型」を参照してください。
TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。
例
次の例では、TINからDEMを作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/tin.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
create table raster_table (id number, raster_image sdo_georaster); create table raster_data_table of sdo_raster (primary key (rasterId, pyramidLevel, bandBlockNumber, rowBlockNumber, columnBlockNumber)) lob(rasterblock) store as (nocache nologging); DECLARE inp sdo_tin; geor sdo_georaster; BEGIN select tin INTO inp from tins_hawaii_4326 where rownum=1; insert into raster_table values (1, sdo_geor.init('raster_data_table')) returning raster_image into geor; sdo_tin_pkg.to_dem( tin => inp, dem => geor, blocksize => 128, crs_units_per_pixel => 0.01); update raster_table set raster_image = geor where id = 1; END; /
親トピック: SDO_TIN_PKGパッケージ(TIN)
32.7 SDO_TIN_PKG.TO_GEOMETRY
構文
SDO_TIN_PKG.TO_GEOMETRY( pts IN BLOB, trs IN BLOB, num_pts IN NUMBER, num_trs IN NUMBER, tin_ind_dim IN NUMBER, tin_tot_dim IN NUMBER, srid IN NUMBER DEFAULT NULL, blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL, get_ids IN NUMBER DEFAULT NULL ) RETURN SDO_GEOMETRY;
説明
TINのすべてまたは一部を表すジオメトリ・オブジェクトを戻します。
パラメータ
- pts
-
点を含むBLOBを指定します。
- trs
-
三角形を含むBLOBを指定します。
- num_pts
-
結果として生成されるジオメトリに含まれる点の最大数を指定します。
- num_pts
-
結果として生成されるジオメトリに含まれる三角形の最大数を指定します。
- tin_ind_dim
-
索引付けする空間次元数を指定します。
- tin_tot_dim
-
データに定義する空間次元数を指定します。
- srid
-
データに関連付けられた空間参照(座標系)IDを指定します。このパラメータがNULLの場合、SRID値はデータに関連付けられません。
- blk_domain
-
(現在は使用されていません。)
- get_ids
-
NULLまたは0 (デフォルト)の場合は、戻されるジオメトリ内にある各点のブロックIDと点IDが含まれず、1の場合は、戻されるジオメトリ内にある各点のブロックIDと点IDが含まれます。
get_ids
が1の場合、戻されるジオメトリ内の各点に空間次元と2つの追加次元が含まれます。例としては、(x, y, z, blk_id, pt_id)のようになります。
使用上のノート
このファンクションは、pts
パラメータのすべての点ジオメトリおよびtrs
パラメータのすべての三角形ジオメトリを表す、単一のSDO_GEOMETRY集合オブジェクトを戻します。たとえば、点および三角形にクリップ操作の結果またはブロック全体の内容を反映することもできます。
TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。
例
次の例では、TINを表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/tin.sql
から取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。
. . . -- Return points in blk_id of the TIN as a multipoint collection. select sdo_tin_pkg.to_geometry( a.points, -- point LOB a.triangles, -- point LOB a.num_points, -- # of points in the LOB a.num_triangles, -- # of points in the LOB 2, -- index dimensionality (gtype dim in extent in INIT) 3, -- total dimensionality null -- SRID ) from blktab a where blk_id=0; . . .
親トピック: SDO_TIN_PKGパッケージ(TIN)