3 SDO_TOPOパッケージ・サブプログラム

MDSYS.SDO_TOPOパッケージには、Spatial and Graphのトポロジ・データ・モデル機能用のPL/SQL Application Program Interface (API)の一部を構成するサブプログラム(ファンクションおよびプロシージャ)が含まれています。このパッケージには、主にトポロジを作成および管理するためのサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、トポロジの概念(「トポロジ・データ・モデルの概要」を参照)を理解しておく必要があります。

別のパッケージSDO_TOPO_MAPには、主にトポロジの編集に関連するサブプログラムが含まれています。SDO_TOPO_MAPパッケージのリファレンス情報については、「SDO_TOPO_MAPパッケージ・サブプログラム」を参照してください。

この章では、SDO_TOPOサブプログラムのリファレンス情報をアルファベット順に説明します。

3.1 SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER

構文

SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER(     
  topology                 IN VARCHAR2,      
  table_name               IN VARCHAR2,      
  column_name              IN VARCHAR2,      
  topo_geometry_layer_type IN VARCHAR2,      
  relation_table_storage   IN VARCHAR2 DEFAULT NULL,      
  child_layer_id           IN NUMBER DEFAULT NULL);

説明

トポロジ・ジオメトリ・レイヤーをトポロジに追加します。

パラメータ

topology

指定した列内のトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーを追加するトポロジを指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

table_name

column_nameで指定した列を含むトポロジ・ジオメトリ・レイヤー表の名前を指定します。

column_name

トポロジに追加するトポロジ・ジオメトリ・レイヤー内のトポロジ・ジオメトリを含む(SDO_TOPO_GEOMETRY型の)列の名前を指定します。

topo_geometry_layer_type

トポロジ・ジオメトリ・レイヤーのタイプ(POINT、LINE、CURVE、POLYGONまたはCOLLECTION)を指定します。

relation_table_storage

<topology-name>_RELATION$表(「関係情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

child_layer_id

トポロジがトポロジ・ジオメトリ・レイヤー階層を持つ場合、このレイヤーの子トポロジ・ジオメトリ・レイヤーのレイヤーID番号を指定します。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)トポロジがトポロジ・ジオメトリ・レイヤー階層を持つときにこのパラメータを指定しない場合、トポロジ・ジオメトリ・レイヤーは階層の最も低いレベル(レベル0 (ゼロ))に追加されます。

トポロジがトポロジ・ジオメトリ・レイヤー階層を持たない場合は、トポロジ・ジオメトリ・レイヤーの追加時にこのパラメータを指定しないでください。

使用上の注意

任意のトポロジに対してこのプロシージャを最初にコールしたときに、<topology-name>_RELATION$表(「関係情報表」を参照)が作成されます。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。作成したトポロジを削除するには、SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYERプロシージャをコールします。

このプロシージャによって、トポロジ・ジオメトリ内の空間フィーチャに空間索引が作成され、さらにトポロジ・ジオメトリ内のtg_typetg_idの組合せに対するBツリー索引が作成されます。

CONNECTロールおよびRESOURCEロールを付与されているユーザーには、このプロシージャをコールするためにCREATE VIEW権限も付与されている必要があります。これは、Oracle Database 10g リリース2でのCONNECTロールの権限削減により、CONNECTロールからCREATE CLUSTER、CREATE DATABASE LINK、CREATE SEQUENCE、ALTER SESSION、CREATE SYNONYM、CREATE TABLE、CREATE VIEWの権限が削除されたため必要になります。

トポロジ・ジオメトリ・レイヤー表(table_nameパラメータ)は、オブジェクト表として指定することはできません。

topologytable_nameまたはcolumn_nameを指定していない場合、またはtopo_geometry_layer_typeの値がサポートされていない場合、例外が発生します。

次の例では、トポロジ・ジオメトリ・レイヤーをCITY_DATAトポロジに追加します。トポロジ・ジオメトリ・レイヤーは、LAND_PARCELS表のFEATURE列内のポリゴン・ジオメトリで構成されています。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'LAND_PARCELS', 'FEATURE', 'POLYGON');

3.2 SDO_TOPO.CREATE_TOPOLOGY

構文

SDO_TOPO.CREATE_TOPOLOGY(     
  topology                 IN VARCHAR2,      
  tolerance                IN NUMBER,      
  srid                     IN NUMBER DEFAULT NULL,      
  node_table_storage       IN VARCHAR2 DEFAULT NULL,      
  edge_table_storage       IN VARCHAR2 DEFAULT NULL,      
  face_table_storage       IN VARCHAR2 DEFAULT NULL,      
  history_table_storage    IN VARCHAR2 DEFAULT NULL.      
  digits_right_of_decimal  IN VARCHAR2 DEFAULT 16);

説明

トポロジを作成します。

パラメータ

topology

作成するトポロジの名前を指定します。名前は20文字以下である必要があります。

tolerance

トポロジ内のトポロジ・ジオメトリに関連付けられた許容差を指定します。(許容差については、「トポロジ・データ・モデルの許容差」を参照してください。)

srid

トポロジ内のすべてのトポロジ・ジオメトリ・レイヤーに関連付けられた座標系(空間参照システム)です。デフォルトはNULLです。この場合、座標系は関連付けられていません。NULL以外の値を指定する場合、SDO_COORD_REF_SYS表のSRID列の値を指定する必要があります(『Oracle Spatial and Graph開発者ガイド』を参照)。

node_table_storage

<topology-name>_NODE$表(「ノード情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

edge_table_storage

<topology-name>_EDGE$表(「エッジ情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

face_table_storage

<topology-name>_FACE$表(「フェイス情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

history_table_storage

<topology-name>_HISTORY$表(「履歴情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

digits_right_of_decimal

既存のトポロジにフィーチャを追加する際に、任意の座標位置を表すために小数点の右側で使用できる桁数です。追加されるすべてのフィーチャ(Java APIまたは同等のPL/SQLサブプログラムでaddLinearGeometryメソッド、addPolygonGeometryメソッドまたはaddPointGeometryメソッドへの引数として渡されるフィーチャ)は、このパラメータで指定されている小数点の右側の桁数に自動的に切り捨てられます。デフォルト値は16です。

この値は、受信データの精度に基づいて有効とされる小数点の右側の最後の桁に一致するように設定する必要があります。このメカニズムは、フィーチャ挿入処理中の計算ジオメトリの安定性を向上するために、また微小ポリゴンが作成されてしまうなどの予期しない結果を最小限に抑えるために提供されています。

使用上の注意

このプロシージャは、<topology-name>_EDGE$表、<topology-name>_NODE$表、<topology-name>_FACE$表および<topology-name>_HISTORY$表(「トポロジ・データ・モデル表」を参照)を作成します。また、これらの表の主キーにBツリー索引を作成します。また、トポロジのメタデータも作成します。

sridパラメータでは、測地座標系を指定できますが、トポロジに対するすべてのSpatial and Graphの内部演算子では、測地ではなくデカルトの算術演算子が使用されます。(測地座標系およびその他の座標系については、『Oracle Spatial and Graph開発者ガイド』を参照してください。)

ノード表、エッジ表、フェイス表および履歴表はパーティションなしでも作成できますが、これらの表を変更してパーティション化することもできます。また、パーティション化した表にパーティション化した空間索引を作成することもできます(『Oracle Spatial and Graph開発者ガイド』を参照)。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。作成したトポロジを削除するには、SDO_TOPO.DROP_TOPOLOGYプロシージャをコールします。

トポロジがすでに存在する場合、例外が発生します。

次の例では、CITY_DATAという名前のトポロジを作成します。このトポロジ内の空間ジオメトリの許容差は0.5で、WGS 84座標系(緯度と経度の座標で、SRID値は8307)が使用されます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.CREATE_TOPOLOGY('CITY_DATA', 0.5, 8307);

3.3 SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER

構文

SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER(     
  topology    IN VARCHAR2,      
  table_name  IN VARCHAR2,      
  column_name IN VARCHAR2);

説明

トポロジ・ジオメトリ・レイヤーをトポロジから削除します。

パラメータ

topology

指定した列内のトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーから削除するトポロジを指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

table_name

column_nameで指定した列を含む表の名前を指定します。

column_name

トポロジから削除するトポロジ・ジオメトリ・レイヤー内のトポロジ・ジオメトリを含む列の名前を指定します。

使用上の注意

このプロシージャは、指定したトポロジ・ジオメトリ・レイヤーに関連付けられたデータを、<topology-name>_RELATION$表(「関係情報表」を参照)から削除します。このプロシージャは、最後に残ったトポロジ・ジオメトリ・レイヤーをトポロジから削除すると、<topology-name>_RELATION$表も削除します。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。

次の例では、LAND_PARCELS表のFEATURE列内のジオメトリに基づくトポロジ・ジオメトリ・レイヤーを、CITY_DATAという名前のトポロジから削除します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER('CITY_DATA', 'LAND_PARCELS', 'FEATURE');

3.4 SDO_TOPO.DROP_TOPOLOGY

構文

SDO_TOPO.DROP_TOPOLOGY(     
  topology  IN VARCHAR2);

説明

トポロジを削除します。

パラメータ

topology

削除するトポロジの名前を指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

使用上の注意

このプロシージャは、<topology-name>_EDGE$表、<topology-name>_NODE$表、<topology-name>_FACE$表、<topology-name>_NODE$表、<topology-name>_RELATION$表および<topology-name>_HISTORY$表(「トポロジ・データ・モデル表」を参照)を削除します。

トポロジに関連付けられているトポロジ・レイヤーがない場合は、Spatial and Graphのメタデータからトポロジが削除されます。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。

トポロジを所有しているデータベース・ユーザーを削除することはできません。したがって、トポロジを所有するデータベース・ユーザーに対してDROP USER ... CASCADE文を使用する前に、そのユーザーとして接続し、SDO_TOPO.DROP_TOPOLOGYプロシージャを実行する必要があります。

トポロジ・ジオメトリ・レイヤー内のトポロジ・ジオメトリがトポロジに含まれている場合、例外が発生します。この例外が発生した場合、各トポロジ・ジオメトリ・レイヤーでSDO_TOPO.DELETE_TOPO_GEOMETRY_LAYERプロシージャを使用してトポロジ内のすべてのトポロジ・ジオメトリ・レイヤーを削除した後、トポロジを削除します。

次の例では、CITY_DATAという名前のトポロジを削除します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.DROP_TOPOLOGY('CITY_DATA');

3.5 SDO_TOPO.GET_FACE_BOUNDARY

構文

SDO_TOPO.GET_FACE_BOUNDARY(     
  topology   IN VARCHAR2,      
  face_id    IN NUMBER,      
  all_edges  IN VARCHAR2 DEFAULT 'FALSE'      
) RETURN SDO_LIST_TYPE;

説明

指定されたフェイスのエッジの符号付きID番号のリストを戻します。

パラメータ

topology

フェイスを含むトポロジの名前を指定します。名前は20文字以下である必要があります。

face_id

フェイスのフェイスID値を指定します。

all_edges

フェイスに隣接している(片側または両側にフェイスを持つ)すべてのエッジを含める場合はTRUE、フェイスの外部境界を構成するエッジのみを含める場合はFALSE(デフォルト)を指定します。(このファンクションの例を参照してください。)

使用上の注意

なし。

次の例では、フェイスID値が1のフェイスのエッジのID番号を戻します。最初の例では、all_edgesパラメータにデフォルト値'FALSE'を受け入れます。2つ目の例では、all_edges'TRUE'を指定したため、フェイス上の境界エッジおよび2つの孤立エッジのID番号がリストに含まれます。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを参照しています。)

-- Get the boundary of face with face_id 1.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 1) FROM DUAL;
 
SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA',1)                                       
--------------------------------------------------------------------------------
SDO_LIST_TYPE(1)                                                                
 
-- Specify 'TRUE' for the all_edges parameter.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 1, 'TRUE') FROM DUAL;
 
SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA',1,'TRUE')                                
--------------------------------------------------------------------------------
SDO_LIST_TYPE(1, -26, 25)

3.6 SDO_TOPO.GET_TOPO_OBJECTS

構文

SDO_TOPO.GET_TOPO_OBJECTS(     
  topology  IN VARCHAR2,      
  geometry  IN SDO_GEOMETRY      
) RETURN SDO_TOPO_OBJECT_ARRAY;

または

SDO_TOPO.GET_TOPO_OBJECTS(     
  topology               IN VARCHAR2,      
  topo_geometry_layer_id IN NUMBER,      
  topo_geometry_id       IN NUMBER      
) RETURN SDO_TOPO_OBJECT_ARRAY;

説明

指定されたジオメトリ・オブジェクトまたはトポロジ・ジオメトリ・オブジェクトと相互作用するSDO_TOPO_OBJECTオブジェクトの配列を戻します。

パラメータ

topology

トポロジの名前を指定します。名前は20文字以下である必要があります。

geometry

確認するジオメトリ・オブジェクトを指定します。

topo_geometry_layer_id

確認するトポロジ・ジオメトリ・オブジェクトを含むトポロジ・ジオメトリ・レイヤーのID番号を指定します。

topo_geometry_id

確認するトポロジ・ジオメトリ・オブジェクトのID番号を指定します。

使用上の注意

SDO_TOPO_OBJECT_ARRAYデータ型の詳細は、「挿入操作用のコンストラクタ: 位相要素の指定」を参照してください。

トポロジ・ジオメトリ・レイヤー階層を持つトポロジの場合、このファンクションは階層のすべてのレベルで使用でき、常にリーフレベル(最下位レベル)のオブジェクトを戻します。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)

次の例では、CITY_DATAトポロジ内の土地区画P2と相互作用するトポロジ・ジオメトリ・オブジェクトを戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

-- CITY_DATA layer, land parcels (topo_geometry_ layer_id = 1), 
-- parcel P2 (topo_geometry_id = 2)
SELECT SDO_TOPO.GET_TOPO_OBJECTS('CITY_DATA', 1, 2) FROM DUAL;
 
SDO_TOPO.GET_TOPO_OBJECTS('CITY_DATA',1,2)(TOPO_ID, TOPO_TYPE)                  
--------------------------------------------------------------------------------
SDO_TOPO_OBJECT_ARRAY(SDO_TOPO_OBJECT(9, 1), SDO_TOPO_OBJECT(10, 1), SDO_TOPO_OB
JECT(13, 1), SDO_TOPO_OBJECT(14, 1), SDO_TOPO_OBJECT(17, 1), SDO_TOPO_OBJECT(18,
 1), SDO_TOPO_OBJECT(6, 2), SDO_TOPO_OBJECT(7, 2), SDO_TOPO_OBJECT(8, 2), SDO_TO
PO_OBJECT(9, 2), SDO_TOPO_OBJECT(10, 2), SDO_TOPO_OBJECT(11, 2), SDO_TOPO_OBJECT
(12, 2), SDO_TOPO_OBJECT(13, 2), SDO_TOPO_OBJECT(14, 2), SDO_TOPO_OBJECT(17, 2),
 SDO_TOPO_OBJECT(18, 2), SDO_TOPO_OBJECT(19, 2), SDO_TOPO_OBJECT(20, 2), SDO_TOP
O_OBJECT(-6, 2), SDO_TOPO_OBJECT(-7, 2), SDO_TOPO_OBJECT(-8, 2), SDO_TOPO_OBJECT
(-9, 2), SDO_TOPO_OBJECT(-10, 2), SDO_TOPO_OBJECT(-11, 2), SDO_TOPO_OBJECT(-12, 
2), SDO_TOPO_OBJECT(-13, 2), SDO_TOPO_OBJECT(-14, 2), SDO_TOPO_OBJECT(-17, 2), S
DO_TOPO_OBJECT(-18, 2), SDO_TOPO_OBJECT(-19, 2), SDO_TOPO_OBJECT(-20, 2), SDO_TO
PO_OBJECT(-1, 3), SDO_TOPO_OBJECT(3, 3), SDO_TOPO_OBJECT(4, 3), SDO_TOPO_OBJECT(
5, 3), SDO_TOPO_OBJECT(6, 3), SDO_TOPO_OBJECT(7, 3), SDO_TOPO_OBJECT(8, 3)) 

3.7 SDO_TOPO.INITIALIZE_AFTER_IMPORT

構文

SDO_TOPO.INITIALIZE_AFTER_IMPORT(     
  topology  IN VARCHAR2);

説明

別のデータベースからインポートされたトポロジを作成(初期化)します。

パラメータ

topology

作成するトポロジの名前を指定します。トポロジは、ソース・データベースからエクスポートされている必要があります。

使用上の注意

このプロシージャは、指定したトポロジと関連するすべてのデータベースの構造を作成し、必要に応じて、すべてのフィーチャ表内のトポロジID値を調整し、正しい順序でフィーチャ・レイヤーを作成します。

このプロシージャをコールする前に、作成されるトポロジを所有するスキーマのユーザーとしてデータベースに接続します。

このプロシージャは、トポロジのエクスポートとインポートに必要なその他の手順(「トポロジ・データのエクスポートおよびインポート」を参照)をすべて実行した後に使用してください。

次の例では、CITY_DATA_EXP$を含むインポートされた表の情報を使用して、CITY_DATAという名前のトポロジを作成します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.INITIALIZE_AFTER_IMPORT('CITY_DATA');

3.8 SDO_TOPO.INITIALIZE_METADATA

構文

SDO_TOPO.INITIALIZE_METADATA(     
  topology  IN VARCHAR2);

説明

トポロジのメタデータを初期化します。ノード表、エッジ表およびフェイス表の順序情報を設定して、これらの表に必要な索引を作成(または再作成)します。

パラメータ

topology

順序を初期化するトポロジの名前を指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

使用上の注意

データをノード表、エッジ表およびフェイス表にロードした後にこのプロシージャを実行して、これらの表に格納されたIDの最大値より2大きい数値で、これらの表の順序を初期化する必要があります。これによって、これらの表の一意のID値が再利用されることが回避されます。(ノード表、エッジ表およびフェイス表については、「トポロジ・データ・モデル表」を参照してください。)

このプロシージャは、ノード表、エッジ表およびフェイス表のジオメトリ列またはMBRジオメトリ列に空間索引を作成します。バルク・ロード操作の前に索引が削除されている場合、バルク・ロード後にこのプロシージャを実行すると、これらの索引が再作成されます。

次の例では、CITY_DATAという名前のトポロジのメタデータを初期化します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.INITIALIZE_METADATA('CITY_DATA');

3.9 SDO_TOPO.PREPARE_FOR_EXPORT

構文

SDO_TOPO.PREPARE_FOR_EXPORT(     
  topology  IN VARCHAR2);

説明

別のデータベースにエクスポートするトポロジを準備します。

パラメータ

topology

エクスポートするトポロジの名前を指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

使用上の注意

このプロシージャは、現在のデータベース(ソース・データベース)で指定したトポロジを別のデータベース(ターゲット・データベース)にエクスポートできるように準備します。

このプロシージャは、<topology-name>_EXP$という形式の表名を使用して、現在のスキーマに表を作成します。この表には、USER_SDO_TOPO_INFOビューおよびALL_SDO_TOPO_INFOビューと同じ列が含まれます。これらの列については、「xxx_SDO_TOPO_INFOビュー」表1-8を参照してください。

このプロシージャをコールする前に、トポロジの所有者としてデータベースに接続します。

実行する手順など、トポロジのエクスポートとインポートの詳細は、「トポロジ・データのエクスポートおよびインポート」を参照してください。

次の例では、CITY_DATAという名前のトポロジをターゲット・データベースにエクスポートできるように準備します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.PREPARE_FOR_EXPORT('CITY_DATA');

3.10 SDO_TOPO.RELATE

構文

SDO_TOPO.RELATE(     
  geom1  IN SDO_TOPO_GEOMETRY,      
  geom2  IN SDO_TOPO_GEOMETRY,      
  mask   IN VARCHAR2      
) RETURN VARCHAR2;

または

SDO_TOPO.RELATE(
  feature1  IN SDO_TOPO_GEOMETRY,
  feature2  IN SDO_GEOMETRY,
  mask      IN VARCHAR2
) RETURN VARCHAR2;

または

SDO_TOPO.RELATE(
  geom            IN SDO_TOPO_GEOMETRY,
  topo_elem_array IN SDO_TOPO_OBJECT_ARRAY,
  mask            IN VARCHAR2      
) RETURN VARCHAR2;

説明

2つのトポロジ・ジオメトリ・オブジェクト、トポロジ・ジオメトリと空間ジオメトリ、またはトポロジ・ジオメトリとトポロジ・オブジェクト配列(SDO_TOPO_OBJECT_ARRAYオブジェクト)を調べて、これらの空間関係を決定します。

パラメータ

geom1

トポロジ・ジオメトリ・オブジェクトを指定します。

geom2

トポロジ・ジオメトリ・オブジェクトを指定します。

feature1

トポロジ・ジオメトリ・オブジェクトを指定します。

feature2

空間ジオメトリ・オブジェクトを指定します。

geom

トポロジ・ジオメトリ・オブジェクトを指定します。

topo_elem_array

SDO_TOPO_OBJECT_ARRAY型(「挿入操作用のコンストラクタ: 位相要素の指定」を参照)のトポロジ・オブジェクト配列を指定します。

mask

確認する1つ以上の関係を指定します。「使用方法」のキーワードのリストを参照してください。

使用上の注意

大量のオブジェクトを確認する場合は、SDO_TOPO.RELATEファンクションよりもトポロジ演算子(「トポロジ演算子」を参照)を使用した方が、パフォーマンスが向上します。ただし、2つのオブジェクトや少数のオブジェクトを確認する場合は、SDO_TOPO.RELATEファンクションの方が高いパフォーマンスを得られます。また、トポロジ演算子ではなくSDO_TOPO.RELATEファンクションを使用する必要がある場合もあります。たとえば、トポロジ演算子にはDETERMINEマスク・キーワードを指定できません。

次のキーワードをmaskパラメータで指定して、2つのオブジェクト間の空間関係を決定することができます。

  • ANYINTERACT: オブジェクトが非接続ではない場合にTRUEを戻します。

  • CONTAINS: 2番目のオブジェクトが完全に最初のオブジェクト内にあり、オブジェクト境界が触れていない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • COVEREDBY: 最初のオブジェクトが完全に2番目のオブジェクト内にあり、オブジェクト境界が1つ以上の点で触れている場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • COVERS: 2番目のオブジェクトが完全に最初のオブジェクト内にあり、オブジェクト境界が1つ以上の場所で触れている場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • DETERMINE: ジオメトリに最も一致する1つの関係キーワードを戻します。

  • DISJOINT: オブジェクトが共通の境界点や内部点を持たない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • EQUAL: オブジェクトが境界と内部のすべての点(オブジェクト内のすべての穴を含む)を共有している場合は、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • INSIDE: 最初のオブジェクトが完全に2番目のオブジェクト内にあり、オブジェクト境界が触れていない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • ON: 線(最初のオブジェクト)の境界と内部が完全にポリゴン(2番目のオブジェクト)の境界上にある場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • OVERLAPBDYDISJOINT: オブジェクトが重なっているが、その境界は相互作用していない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • OVERLAPBDYINTERSECT: オブジェクトが重なっており、その境界が1つ以上の場所で相互作用している場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • TOUCH: 2つのオブジェクトが共通の境界点を共有するが、内部点は共有しない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

maskの値(DETERMINEを除く)は、論理ブール演算子ORを使用して組み合せることができます。たとえば、'INSIDE + TOUCH'を指定すると、テストの結果に応じて文字列TRUEまたはFALSEを戻します。

次の例では、CITY_STREETS表内の各トポロジ・ジオメトリ・オブジェクトとP3土地区画との間にANYINTERACT関係が存在するかどうか(つまり、土地区画と相互作用する通り)を検出します。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを参照しています。出力は、読みやすくするために変更が加えられています。)

SELECT c.feature_name,
  SDO_TOPO.RELATE(c.feature, l.feature, 'anyinteract') Any_Interaction
  FROM city_streets c, land_parcels l WHERE l.feature_name = 'P3';
 
FEATURE_NAME  ANY_INTERACTION                                                                     
------------  ---------------        
R1            TRUE
R2            FALSE                
R3            FALSE                            
R4            FALSE

次の例では、CITY_STREETS表内の各トポロジ・ジオメトリ・オブジェクトと、P3という名前の土地区画フィーチャと偶然同じになったSDO_TOPO_OBJECT_ARRAYオブジェクトの間に、ANYINTERACT関係が存在するかどうかを検出します。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを使用しています。)結果は前述の例と同様です。また、読みやすいように形式を変更しています。

SELECT c.feature_name, 
  SDO_TOPO.RELATE(c.feature,
    SDO_TOPO_OBJECT_ARRAY (SDO_TOPO_OBJECT (5, 3), SDO_TOPO_OBJECT (8, 3)), 
    'anyinteract') Any_Interaction 
  FROM city_streets c, land_parcels l WHERE l.feature_name = 'P3';
 
FEATURE_NAME  ANY_INTERACTION                                                                     
------------  ---------------        
R1            TRUE
R2            FALSE                
R3            FALSE                            
R4            FALSE