ヘッダーをスキップ
Oracle® Spatial開発者ガイド
11gリリース2 (11.2)
B72087-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

30 SDO_TIN_PKGパッケージ(TIN)

この章では、表30-1に示すTriangulated Irregular Network(TIN)のサブプログラムについて説明します。

表30-1 TINのサブプログラム

サブプログラム 説明

SDO_TIN_PKG.CLIP_TIN


TINに対してクリップ操作を実行します。

SDO_TIN_PKG.CREATE_TIN


inptableパラメータで指定した点を使用してTINを作成します。

SDO_TIN_PKG.DROP_DEPENDENCIES


TINブロック表と指定した実表および列の間の依存性を削除します。

SDO_TIN_PKG.INIT


TINを初期化します。

SDO_TIN_PKG.TO_GEOMETRY


TINのすべてまたは一部を表すジオメトリ・オブジェクトを戻します。


このパッケージのサブプログラムを使用するには、Triangulated Irregular Network(TIN)を使用した表面のモデル化を含む、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては1.11項、TINを使用した表面のモデル化については1.11.1項、TINに関連するデータ型については2.5項を参照してください。

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データ型については、2.5項を参照してください。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

次の例では、TINに対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_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.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データ型の詳細は、2.5項を参照してください。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

次の例ではTINを作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_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.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.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ブロック表に関連付けることのできるbasetablebasecolの組合せは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はその他の属性を持ちません。

使用上の注意

このファンクションを使用してSDO_TINオブジェクトを作成した後は、このオブジェクトをSDO_TIN_PKG.CREATE_TINプロシージャへの入力として指定することでTINを作成できます。

SDO_TINデータ型の詳細は、2.5項を参照してください。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

次の例では、SDO_TINオブジェクトの作成によりTINを初期化します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_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.TO_GEOMETRY

構文

SDO_TIN_PKG.TO_GEOMETRY(

     pts IN BLOB,

     trs IN BLOB,

     num_pts IN NUMBER,

     num_trs IN NUMBER,

     tin_tot_dim IN NUMBER,

     srid IN NUMBER DEFAULT NULL,

     blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL

     ) RETURN SDO_GEOMETRY;

説明

TINのすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

パラメータ

pts

点を含むBLOBを指定します。

trs

三角形を含むBLOBを指定します。

num_pts

結果として生成されるジオメトリに含まれる点の最大数を指定します。

num_pts

結果として生成されるジオメトリに含まれる三角形の最大数を指定します。

tin_tot_dim

データに定義する空間次元数を指定します。

srid

データに関連付けられた空間参照(座標系)IDを指定します。このパラメータがNULLの場合、SRID値はデータに関連付けられません。

blk_domain

(現在は未使用。)

使用上の注意

このファンクションは、ptsパラメータのすべての点ジオメトリおよびtrsパラメータのすべての三角形ジオメトリを表す、単一のSDO_GEOMETRY集合オブジェクトを戻します。たとえば、点および三角形にクリップ操作の結果またはブロック全体の内容を反映することもできます。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

次の例では、TINを表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_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;
. . .