4 SDO_TOPO_MAPパッケージ・サブプログラム

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

このパッケージには、トポロジの編集に関連するサブプログラムが含まれています。これらのサブプログラムでは、事前に作成したTopoMapオブジェクト、またはSpatial and Graphによって暗黙的に作成されたTopoMapオブジェクトのいずれかが使用されます。

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

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

4.1 SDO_TOPO_MAP.ADD_EDGE

構文

SDO_TOPO_MAP.ADD_EDGE(     
  topology IN VARCHAR2,      
  node_id1 IN NUMBER,      
  node_id2 IN NUMBER,      
  geom     IN SDO_GEOMETRY      
) RETURN NUMBER;

説明

トポロジにエッジを追加して、追加したエッジのエッジIDを戻します。

パラメータ

topology

エッジを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

node_id1

追加するエッジの開始ノードのノードIDを指定します。

node_id2

追加するエッジの終了ノードのノードIDを指定します。

geom

追加するエッジを表すSDO_GEOMETRYオブジェクト(線または連続線ストリング・ジオメトリ)を指定します。

使用上の注意

Spatial and Graphは、追加されたエッジに自動的にエッジIDを割り当てます。topologyがNULLではない場合、適切なエントリが<topology-name>_EDGE$表に挿入されます。また、エッジの追加がフェイス情報表に影響を及ぼす場合は、<topology-name>_FACE$表内の適切なエントリが更新されます。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)

node_id1node_id2に同じ値を指定した場合、ループ・エッジが作成されます。

ノードとエッジを追加および削除する方法の詳細は、「トポロジの編集」を参照してください。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddEdgeメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトに、ノードN3とノードN4を結ぶエッジを追加します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.ADD_EDGE(null, 3, 4,
  SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
    SDO_ORDINATE_ARRAY(25,35, 20,37)))
  INTO :res_number;
 
Call completed.
 
SQL> PRINT res_number;
 
RES_NUMBER                                                                      
----------                                                                      
        29 

4.2 SDO_TOPO_MAP.ADD_ISOLATED_NODE

構文

SDO_TOPO_MAP.ADD_ISOLATED_NODE(     
  topology IN VARCHAR2,      
  face_id  IN NUMBER,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.ADD_ISOLATED_NODE(     
  topology IN VARCHAR2,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.ADD_ISOLATED_NODE(     
topology IN VARCHAR2,      
face_id  IN NUMBER,      
x        IN NUMBER,      
y        IN NUMBER      
) RETURN NUMBER;

または

SDO_TOPO_MAP.ADD_ISOLATED_NODE(     
topology IN VARCHAR2,      
x        IN NUMBER,      
y        IN NUMBER      
) RETURN NUMBER;

説明

トポロジに孤立ノードを追加して、追加した孤立ノードのノードIDを戻します。

パラメータ

topology

孤立ノードを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

face_id

孤立ノードを追加するフェイスのフェイスIDを指定します。(指定した点が指定したフェイス上に存在しない場合は、例外が発生します。)

point

追加する孤立ノードを表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。

x

追加する孤立ノードを表す点のX軸値を指定します。

y

追加する孤立ノードを表す点のY軸値を指定します。

使用上の注意

Spatial and Graphは、追加されたノードに自動的にノードIDを割り当てます。topologyがNULLではない場合、適切なエントリが<topology-name>_NODE$表に挿入されます。また、追加された孤立ノードのエントリを含めるために<topology-name>_FACE$表が更新されます。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)

孤立ノードを追加するフェイスのIDがわかっている場合、face_idパラメータを指定できます。このパラメータを指定すると、次の2つのメリットがあります。

  • 検証: ファンクションは、指定されたフェイス上に指定された点が存在するかどうかを確認し、存在しない場合は例外が発生します。このパラメータを指定しない場合、ファンクションはトポロジ内のいずれかのフェイス上にその点が存在するかどうかを確認し、存在しない場合は例外が発生します。

  • パフォーマンス: ファンクションは、指定された点が存在するかどうかを、指定されたフェイス上のみで確認します。このパラメータを指定しない場合、ファンクションは、その点が存在するかどうかを、(場合によっては)トポロジ内のすべてのフェイス上で確認します。

連結ノードを追加するには、SDO_TOPO_MAP.ADD_NODEファンクションを使用します。

ノードとエッジを追加および削除する方法の詳細は、「トポロジの編集」を参照してください。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddIsolatedNodeメソッドを使用する場合と同じです。

次の例では、フェイスF2上の孤立ノードN4の右に孤立ノードを追加して、追加したノードのノードIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

DECLARE
  result_num NUMBER;
BEGIN
result_num := SDO_TOPO_MAP.ADD_ISOLATED_NODE(null, 2,
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(22,37,NULL), NULL, NULL));
DBMS_OUTPUT.PUT_LINE('Result = ' || result_num);
END;
/
Result = 24                                                                     
 
PL/SQL procedure successfully completed.

4.3 SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY

構文

SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY(     
  topology IN VARCHAR2,      
  curve    IN SDO_GEOMETRY      
) RETURN SDO_NUMBER_ARRAY;

または

SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY(     
  topology IN VARCHAR2,      
  coords   IN SDO_NUMBER_ARRAY      
) RETURN SDO_NUMBER_ARRAY;

説明

トポロジに線形(線ストリングまたは複数の線で構成されるストリング)ジオメトリを追加し、必要に応じてエッジとノードを挿入します。この処理は、トポロジ・グラフ内におけるジオメトリとエッジおよびノードの完全交差と、挿入後に共有されているエッジのエッジIDの配列(ジオメトリの開始から終了までの順序で配列)に基づいて行われます。

パラメータ

topology

エッジを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

curve

追加するエッジを表すSDO_GEOMETRYオブジェクト(曲線または線ストリング・ジオメトリ)を指定します。

coords

追加するエッジの座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。

使用上の注意

このファンクションは、少なくとも1つの新しいエッジを作成し、必要に応じて複数の新しいエッジを作成します。たとえば、線ストリング・ジオメトリが既存のエッジと交差している場合、追加された線ストリングに対して2つのエッジが作成され、既存のエッジ(交差されたエッジ)は2つのエッジに分割されます。topologyがNULLではない場合、Spatial and Graphは必要に応じて自動的に<topology-name>_EDGE$表を更新します。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこの表を更新できます。)

このファンクションは、挿入後に共有されているエッジのエッジIDの配列を、ジオメトリの開始から終了までの順序で戻します。追加されたジオメトリのセグメントがトポロジ内の既存のエッジと重なった場合、戻されるエッジの符号は、追加されたセグメントと既存のエッジの方向によって決定されます。既存のエッジの方向が線形ジオメトリと同じである場合、戻されるエッジ要素は正になります。既存のエッジの方向が線形ジオメトリと反対である場合、戻されるエッジ要素は負になります。

curveパラメータまたはcoordsパラメータで指定されているオブジェクトで線セグメントが重なっている場合は、例外が発生します。ただし、線セグメントは1つ以上の点で交差できます。

ノードとエッジを追加および削除する方法の詳細は、「トポロジの編集」を参照してください。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddLinearGeometryメソッドを使用する場合と同じです。

次の例では、指定した線ストリング・ジオメトリを表すエッジを追加し、追加されたエッジのエッジIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY(null,
  SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
    SDO_ORDINATE_ARRAY(50,10, 55,10, 57,11)))
FROM DUAL;
 
SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY(NULL,SDO_GEOMETRY(2002,NULL,NULL,SDO_ELEM_INFO_
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(31)

4.4 SDO_TOPO_MAP.ADD_LOOP

構文

SDO_TOPO_MAP.ADD_LOOP(     
  topology  IN VARCHAR2,      
  node_id   IN NUMBER,      
  geom      IN SDO_GEOMETRY      
) RETURN NUMBER;

説明

ループして同じノードに接続されているエッジを追加して、追加したエッジのエッジIDを戻します。

パラメータ

topology

エッジを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

node_id

エッジを追加するノードのノードIDを指定します。エッジは、このノードで開始および終了します。

geom

追加するエッジを表すSDO_GEOMETRYオブジェクト(線ストリング・ジオメトリ)を指定します。線ストリングの開始点および終了点は、node_idを表す点と同じである必要があります。

使用上の注意

このファンクションは、新しいエッジを作成し、ループの内部で構成される新しいフェイスも作成します。エッジを孤立ノードに追加した場合、そのエッジは孤立エッジになります。topologyがNULLではない場合、Spatial and Graphは必要に応じて自動的に<topology-name>_EDGE$表および<topology-name>_FACE$表を更新します。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)

ノードとエッジを追加および削除する方法の詳細は、「トポロジの編集」を参照してください。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddLoopメソッドを使用する場合と同じです。

次の例では、ノードN4で開始および終了するエッジ・ループを追加して、追加したエッジのエッジIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.ADD_LOOP(null, 4,
  SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
    SDO_ORDINATE_ARRAY(20,37, 20,39, 25,39, 20,37)))
  INTO :res_number;
 
Call completed.
 
SQL> PRINT res_number;
 
RES_NUMBER                                                                      
----------                                                                      
        30 

4.5 SDO_TOPO_MAP.ADD_NODE

構文

SDO_TOPO_MAP.ADD_NODE(     
  topology           IN VARCHAR2,      
  edge_id            IN NUMBER,      
  point              IN SDO_GEOMETRY,      
  coord_index        IN NUMBER,      
  is_new_shape_point IN VARCHAR2      
) RETURN NUMBER;

または

SDO_TOPO_MAP.ADD_NODE(     
  topology           IN VARCHAR2,      
  edge_id            IN NUMBER,      
  x                  IN NUMBER,      
  y                  IN NUMBER,      
  coord_index        IN NUMBER,      
  is_new_shape_point IN VARCHAR2      
) RETURN NUMBER;

説明

トポロジに連結ノードを追加して既存のエッジを分割し、追加したノードのノードIDを戻します。

パラメータ

topology

ノードを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

edge_id

ノードを追加するエッジのエッジIDを指定します。

point

追加するノードを表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。点は、既存の形状点であるか、または2つの連続する形状点を結ぶ線セグメントを分割する新しい点である必要があります。

x

追加するノードを表す点のX軸値を指定します。点は、既存の形状点であるか、または2つの連続する形状点を結ぶ線セグメントを分割する新しい点である必要があります。

y

追加するノードを表す点のY軸値を指定します。点は、既存の形状点であるか、または2つの連続する形状点を結ぶ線セグメントを分割する新しい点である必要があります。

coord_index

エッジの座標配列内で、ノードがその位置またはその位置の後ろに追加される配列位置のインデックス(位置)を指定します。各頂点(ノードまたは形状点)の位置を、エッジの座標配列内に含めます。開始点(ノード)はインデックス(位置) 0、開始点の次の点は1のようになります。(ただし、coord_index値に最後の頂点のインデックスを指定することはできません。)たとえば、エッジ座標が(2,2, 5,2, 8,3)の場合、2つ目の頂点(5,2)のインデックスは1になります。

is_new_shape_point

追加したノードを、エッジのインデックス付けされた頂点(coord_index値)に続く新しい形状点にする場合はTRUE、インデックス付けされた頂点上に配置する場合はFALSEを指定します。

値にTRUEを指定すると、新しい点にノードを追加でき、pointパラメータまたはxyのパラメータの組合せにより指定した座標でエッジ・セグメントが分割されます。値にFALSEを指定すると、pointパラメータまたはxyのパラメータの組合せで指定した座標は無視され、coord_index値に関連付けられた既存の形状点にノードが追加されます。

使用上の注意

Spatial and Graphは、追加されたノードに自動的にノードIDを割り当て、新しいエッジを作成します。元のエッジの開始側にある分割されたエッジには、元のエッジのエッジIDが割り当てられます。topologyがNULLではない場合、適切なエントリが<topology-name>_NODE$表および<topology-name>_EDGE$表に挿入されます。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)

孤立ノードを追加するには、SDO_TOPO_MAP.ADD_ISOLATED_NODEファンクションを使用します。

ノードとエッジを追加および削除する方法の詳細は、「トポロジの編集」を参照してください。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddNodeメソッドを使用する場合と同じです。

次の例では、エッジE2上のノードN2の右に連結ノードを追加して、追加したノードのノードIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

DECLARE
  result_num NUMBER;
BEGIN
result_num := SDO_TOPO_MAP.ADD_NODE(null, 2,
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(27,30,NULL), NULL, NULL),
  0, 'TRUE');
DBMS_OUTPUT.PUT_LINE('Result = ' || result_num);
END;
/
Result = 26                                                                     
 
PL/SQL procedure successfully completed.

4.6 SDO_TOPO_MAP.ADD_POINT_GEOMETRY

構文

SDO_TOPO_MAP.ADD_POINT_GEOMETRY(
  topology IN VARCHAR2,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.ADD_POINT_GEOMETRY(
  topology IN VARCHAR2,      
  coord    IN SDO_NUMBER_ARRAY      
) RETURN NUMBER;

説明

指定した点ジオメトリまたは座標の組合せを表すノードを追加し、追加されたノードのノードIDを戻します。

パラメータ

topology

ノードを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

point

追加するノードを表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。

coord

追加するノードの座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。

使用上の注意

点が既存のノードと一致する場合、トポロジは変更されません。一致しない場合は、孤立ノードまたはエッジを分割するノードが追加されます。

ノードとエッジを追加および削除する方法の詳細は、「トポロジの編集」を参照してください。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddPointGeometryメソッドを使用する場合と同じです。

次の例では、指定した点ジオメトリを表すノードを追加し、追加されたノードのノードIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。

SELECT SDO_TOPO_MAP.ADD_POINT_GEOMETRY(null,
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(57,12,NULL), NULL, NULL))
FROM DUAL;
 
SDO_TOPO_MAP.ADD_POINT_GEOMETRY(NULL,SDO_GEOMETRY(2001,NULL,SDO_POINT_TYPE(57,12
--------------------------------------------------------------------------------
                                                                              29

次の例では、指定した座標(58, 12)にノードを追加し、追加されたノードのノードIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。

SELECT SDO_TOPO_MAP.ADD_POINT_GEOMETRY(null, SDO_NUMBER_ARRAY(58,12))
FROM DUAL;
 
SDO_TOPO_MAP.ADD_POINT_GEOMETRY(NULL,SDO_NUMBER_ARRAY(58,12))                   
-------------------------------------------------------------                   
                                                           30 

4.7 SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY

構文

SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY(     
  topology  IN VARCHAR2,      
  polygon   IN SDO_GEOMETRY      
) RETURN SDO_NUMBER_ARRAY;

または

SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY(     
  topology  IN VARCHAR2,      
  coords    IN SDO_NUMBER_ARRAY      
) RETURN SDO_NUMBER_ARRAY;

説明

指定したポリゴン・ジオメトリを表すフェイスを1つ以上追加し、追加された各フェイスのフェイスIDを戻します。

パラメータ

topology

フェイスを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

polygon

追加するフェイスを表すSDO_GEOMETRYオブジェクト(ポリゴン・ジオメトリまたは複数のポリゴンで構成されるジオメトリ)を指定します。オブジェクトの各ポリゴンには、任意の数の内部リングを含めることのできる外部リングが1つ必要です。

coords

追加されるフェイスを表す1つのポリゴン・ジオメトリの座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。ポリゴンの頂点は反時計周りで示され、最後の頂点が最初の頂点と同じになる必要があります。

使用上の注意

このファンクションは、少なくとも1つの新しいフェイスを作成し、必要に応じて複数の新しいフェイスを作成します。たとえば、ポリゴン・ジオメトリが既存のフェイスと交差している場合、追加されたポリゴンに対してフェイスが作成され、既存のフェイス(交差されたフェイス)の定義が調整されます。topologyがNULLではない場合、Spatial and Graphは必要に応じて自動的に<topology-name>_FACE$表を更新します。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこの表を更新できます。)

ポリゴンが既存のフェイスと一致する場合、トポロジは変更されません。

複数のポリゴンで構成されるジオメトリの場合は、外部リングを別の外部リングに重ねることはできません。たとえば、公園(外部リング)の中に池(内部リング)がありその池の中に島(前述の内部リング内にある外部リング)が含まれているような、複数のポリゴンで構成される単一のジオメトリを表すフェイスを追加することはできません。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddPolygonGeometryメソッドを使用する場合と同じです。

次の例では、指定したポリゴン・ジオメトリを表すフェイスを追加し、追加されたエッジのフェイスIDを戻して出力します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。

DECLARE
  res_number_array SDO_NUMBER_ARRAY;
  face_count NUMBER;
  face_ctr NUMBER;
  this_face NUMBER;
BEGIN
res_number_array := SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY(null,
  SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1),
    SDO_ORDINATE_ARRAY(61,10, 70,10, 70,15, 65,15, 61,10)));
-- DBMS_OUTPUT.PUT_LINE('Result = ' || res_number_array);
-- Print each face associated with the geometry.
face_count := res_number_array.count;
for face_ctr in 1..face_count loop
  this_face := res_number_array(face_ctr);
  dbms_output.put_line ('this face = '|| this_face);
  end loop;  -- printed each face
END;
/
this face = 12 

4.8 SDO_TOPO_MAP.CHANGE_EDGE_COORDS

構文

SDO_TOPO_MAP.CHANGE_EDGE_COORDS(     
  topology  IN VARCHAR2,      
  edge_id   IN NUMBER,      
  geom      IN SDO_GEOMETRY);

または

SDO_TOPO_MAP.CHANGE_EDGE_COORDS(     
  topology         IN VARCHAR2,      
  edge_id          IN NUMBER,      
  geom             IN SDO_GEOMETRY,      
  moved_iso_nodes  OUT SDO_NUMBER_ARRAY,      
  moved_iso_edges  OUT SDO_NUMBER_ARRAY,      
  allow_iso_moves  IN VARCHAR2);

説明

エッジの座標、およびその関連情報を変更します。

パラメータ

topology

エッジが含まれるトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

edge_id

座標を変更するエッジのエッジIDを指定します。

geom

変更されたエッジを表すSDO_GEOMETRYオブジェクト(線または連続線ストリング・ジオメトリ)を指定します。変更されたエッジの開始点および終了点は、元のエッジの開始点および終了点と同じである必要があります。

moved_iso_nodes

allow_iso_movesパラメータ値がTRUEの場合、Spatial and Graphによって、このプロシージャの結果として別のフェイスに移動された孤立ノードのノードID値が格納される出力パラメータです。allow_iso_movesパラメータ値がFALSEの場合、Spatial and Graphによって、実際には移動されなかったが、allow_iso_movesパラメータ値がTRUEだった場合は別のフェイスに移動されていたはずの孤立ノードのノードID値が格納されます。

moved_iso_edges

allow_iso_movesパラメータ値がTRUEの場合、Spatial and Graphによって、このプロシージャの結果として別のフェイスに移動された孤立エッジのエッジID値が格納される出力パラメータです。allow_iso_movesパラメータ値がFALSEの場合、Spatial and Graphによって、実際には移動されなかったが、allow_iso_movesパラメータ値がTRUEだった場合は別のフェイスに移動されていたはずの孤立エッジのエッジID値が格納されます。

allow_iso_moves

TRUEを指定すると、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジ座標の変更操作を実行し、これらの孤立ノードおよび孤立エッジを含むフェイスの情報を調整できます。FALSEを指定すると、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジ座標の変更操作は実行できません。

allow_iso_movesパラメータを指定しない場合は、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作を実行できます。また、これらの孤立ノードおよび孤立エッジを含むフェイスの情報が調整されます。

使用上の注意

このプロシージャによってフェイス間の境界が変更される場合、Spatial and Graphは、自動的に、孤立ノードおよび孤立フェイスを再度割り当て、両側のフェイスのMBRを調整し、必要に応じてトポロジ・データ・モデル表を更新します。

topologyがNULLではない場合、このプロシージャは、<topology-name>_EDGE$表(「エッジ情報表」を参照)の指定されたエッジに関する情報を変更します。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこの表を更新できます。)

このプロシージャを使用して、指定したエッジの開始点または終了点(あるいはその両方)を変更することはできません。これらの操作を実行するには、エッジを削除して、変更する開始点または終了点(あるいはその両方)のノードを削除してから、必要な新しいノードを追加し、エッジを追加する必要があります。

位相要素を編集する方法の詳細は、「トポロジの編集」を参照してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のchangeEdgeCoordsメソッドを使用する場合と同じです。

次の例では、エッジE1の座標を変更します。(3つ目の点のみを、16,38から16,39に変更します。)ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.CHANGE_EDGE_COORDS(null, 1,
  SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
    SDO_ORDINATE_ARRAY(8,30, 16,30, 16,39, 3,38, 3,30, 8,30)));

4.9 SDO_TOPO_MAP.CLEAR_TOPO_MAP

構文

SDO_TOPO_MAP.CLEAR_TOPO_MAP(     
  topo_map  IN VARCHAR2);

説明

TopoMapオブジェクトに関連付けられたキャッシュ内のすべてのオブジェクトおよび変更を消去します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

使用上の注意

TopoMapオブジェクトが更新可能な場合、このプロシージャはそのオブジェクトを読取り専用に変更します。

インメモリー・キャッシュを使用して位相要素を編集する方法の詳細は、「トポロジ・データを編集する方法」を参照してください。

このプロシージャは、TopoMapオブジェクトに関連付けられたキャッシュ内の変更をトポロジに適用するSDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャとは対照的です。指定したTopoMapオブジェクトにSDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャを使用した後で、SDO_TOPO_MAP.CLEAR_TOPO_MAPプロシージャをコールすることはできません。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のclearCacheメソッドを使用する場合と同じです。

次の例では、CITY_DATAという名前のトポロジに関連するCITY_DATA_TOPOMAPという名前のTopoMapオブジェクトに関連付けられたキャッシュをクリアします。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.CLEAR_TOPO_MAP('CITY_DATA_TOPOMAP');

4.10 SDO_TOPO_MAP.COMMIT_TOPO_MAP

構文

SDO_TOPO_MAP.COMMIT_TOPO_MAP;

説明

トポロジを更新して現行の更新可能なTopoMapオブジェクトに対して行われた変更を反映し、すべての変更をデータベースにコミットして、TopoMapオブジェクトを読取り専用にします。

パラメータ

なし。

使用上の注意

このプロシージャは、トポロジに対する一連の編集が終了した後で、すべての変更をデータベースにコミットする場合に使用します。コミット操作の完了後に、TopoMapオブジェクトを編集することはできません。完了後にトポロジを編集するには、(SDO_TOPO_MAP.CLEAR_TOPO_MAPプロシージャを使用して)キャッシュをクリアするか、または(SDO_TOPO_MAP.CREATE_TOPO_MAPプロシージャを使用して)新しいTopoMapオブジェクトを作成してから、(SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャを使用して)トポロジを更新用にTopoMapオブジェクトにロードする必要があります。

このプロシージャは、TopoMapオブジェクトを編集可能なままにして、コミット操作を実行しない(したがってデータベース・トランザクションを終了しない)SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャとは対照的です。

TopoMapオブジェクトのすべての変更をロールバックするには、SDO_TOPO_MAP.ROLLBACK_TOPO_MAPプロシージャを使用します。

インメモリー・キャッシュを使用して位相要素を編集する方法の詳細は、「トポロジ・データを編集する方法」を参照してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のcommitDBメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトに対するすべての変更をデータベースにコミットして、TopoMapオブジェクトに追加の編集が行われないようにします。

EXECUTE SDO_TOPO_MAP.COMMIT_TOPO_MAP;

4.11 SDO_TOPO_MAP.CREATE_EDGE_INDEX

構文

SDO_TOPO_MAP.CREATE_EDGE_INDEX(     
  topo_map  IN VARCHAR2);

説明

TopoMapオブジェクトに関連付けられたキャッシュ内で、エッジの内部Rツリー索引を作成します(すでに存在する場合は、再作成します)。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

使用上の注意

インメモリーRツリー索引が、指定したTopoMapオブジェクトのエッジおよびフェイスに作成されるようにSpatial and Graphを設定できます。これらの索引では、メモリー・リソースがいくらか消費され、索引の作成に時間がかかりますが、セッションで多くの位相要素を編集する場合は、これらの索引によってパフォーマンスが大幅に向上します。また、読取り専用のTopoMapオブジェクトを使用する問合せのパフォーマンスも向上します。TopoMapオブジェクトが更新可能であり、多くの編集操作を実行している場合は、索引を定期的に再作成することをお薦めします。ただし、TopoMapオブジェクトが更新されない場合は、読取り専用のTopoMapオブジェクトのロード時またはロード後、あるいはSDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャのコール後に、索引を作成してください。

TopoMapオブジェクトに関連付けられたキャッシュ内で、フェイスの内部Rツリー索引を作成する(すでに存在する場合は、再作成する)SDO_TOPO_MAP.CREATE_FACE_INDEXプロシージャと比較してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のcreateEdgeIndexメソッドを使用する場合と同じです。

次の例では、CITY_DATAという名前のトポロジに関連するCITY_DATA_TOPOMAPという名前のTopoMapオブジェクトに関連付けられたキャッシュ内で、エッジの内部Rツリー索引を作成します(すでに存在する場合は、再作成します)。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.CREATE_EDGE_INDEX('CITY_DATA_TOPOMAP');

4.12 SDO_TOPO_MAP.CREATE_FACE_INDEX

構文

SDO_TOPO_MAP.CREATE_FACE_INDEX(     
  topo_map  IN VARCHAR2);

説明

TopoMapオブジェクトに関連付けられたキャッシュ内で、フェイスの内部Rツリー索引を作成します(すでに存在する場合は、再作成します)。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

使用上の注意

インメモリーRツリー索引が、指定したTopoMapオブジェクトのエッジおよびフェイスに作成されるようにSpatial and Graphを設定できます。これらの索引では、メモリー・リソースがいくらか消費され、索引の作成に時間がかかりますが、セッションで多くの位相要素を編集する場合は、これらの索引によってパフォーマンスが大幅に向上します。また、読取り専用のTopoMapオブジェクトを使用する問合せのパフォーマンスも向上します。TopoMapオブジェクトが更新可能であり、多くの編集操作を実行している場合は、索引を定期的に再作成することをお薦めします。ただし、TopoMapオブジェクトが更新されない場合は、読取り専用のTopoMapオブジェクトのロード時またはロード後、あるいはSDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャのコール後に、索引を作成してください。

TopoMapオブジェクトに関連付けられたキャッシュ内で、エッジの内部Rツリー索引を作成する(すでに存在する場合は、再作成する)SDO_TOPO_MAP.CREATE_EDGE_INDEXプロシージャと比較してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のcreateFaceIndexメソッドを使用する場合と同じです。

次の例では、CITY_DATAという名前のトポロジに関連するCITY_DATA_TOPOMAPという名前のTopoMapオブジェクトに関連付けられたキャッシュ内で、フェイスの内部Rツリー索引を作成します(すでに存在する場合は、再作成します)。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.CREATE_FACE_INDEX('CITY_DATA_TOPOMAP');

4.13 SDO_TOPO_MAP.CREATE_FEATURE

構文(トポロジ・ジオメトリ・レイヤー階層を使用しない場合または階層の最下位レベルを使用する場合)

SDO_TOPO_MAP.CREATE_FEATURE(     
  topology    IN VARCHAR2,      
  table_name  IN VARCHAR2,      
  column_name IN VARCHAR2,      
  geom        IN SDO_GEOMETRY      
) RETURN SDO_TOPO_GEOMETRY;
or
SDO_TOPO_MAP.CREATE_FEATURE(     
  topology    IN VARCHAR2,      
  table_name  IN VARCHAR2,      
  column_name IN VARCHAR2,      
  geom        IN SDO_GEOMETRY,
  snapfeature IN NUMBER     
) RETURN SDO_TOPO_GEOMETRY;

構文(階層の親レベルを使用する場合)

SDO_TOPO_MAP.CREATE_FEATURE(     
  topology      IN VARCHAR2,      
  table_name    IN VARCHAR2,      
  column_name   IN VARCHAR2,      
  dml_condition IN VARCHAR2      
) RETURN SDO_TOPO_GEOMETRY;

説明

Oracle Spatial and Graphのジオメトリからフィーチャを作成します。(このファンクションは、フィーチャ表に行を挿入するために使用します。)

  • (geomパラメータを使用し、dml_conditionパラメータを使用しない)最初の2つの構文は、トポロジ・ジオメトリ・レイヤー階層を使用せずにトポロジ内にフィーチャを作成するか、またはトポロジ・ジオメトリ・レイヤー階層を使用してトポロジの最下位レベルにフィーチャを作成します。

  • (dml_conditionパラメータを使用し、geomパラメータを使用しない) 3番目の構文は、トポロジ・ジオメトリ・レイヤー階層を使用して、トポロジの親レベルにフィーチャを作成します。

パラメータ

topology

関連付けの行われている指定したフィーチャ表およびフィーチャ列を含むトポロジを指定します。

table_name

column_nameで指定したフィーチャ列を含むフィーチャ表の名前を指定します。

column_name

トポロジ・ジオメトリを含む(SDO_TOPO_GEOMETRY型の)フィーチャ列の名前を指定します。

geom

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

snapfeature

1に設定すると、指定した新しいフィーチャがトポロジ内の既存のエッジおよびノードにスナップされます。

dml_condition

トポロジ・ジオメトリ・レイヤー階層を使用するトポロジ(「トポロジ・ジオメトリ・レイヤー階層」を参照)の場合は、子レイヤーから親レイヤーに挿入する行を選択するためのDML条件を指定します。引用符付き文字列で条件を指定します。ただし、WHEREという単語は使用しません。たとえば、STATE_ABBR列値がMAの行のみを選択するには、'state_abbr=''MA'''と指定します

使用上の注意

このファンクションは、空間表に格納されている既存のジオメトリからフィーチャを作成するために使用します。既存のジオメトリからのフィーチャの作成は、トポロジのフィーチャを作成する方法の1つです。他に、ノード情報表、エッジ情報表およびフェイス情報表にトポロジ・データをロードする方法もあります。どちらの方法についても、次の項を含む「トポロジ・データを使用するための主な手順」を参照してください。

このファンクションの最初または2番目の構文を使用する場合は、最初に更新可能なTopoMapオブジェクトを作成してロードする必要があります。トポロジのフィーチャまたは関連付けられた位相要素を作成するために、このファンクションは、ジオメトリ・オブジェクトのSDO_GTYPE値に応じて、更新可能なTopoMapオブジェクトのaddPointGeometryメソッド、addLinearGeometryメソッドまたはaddPolygonGeometryメソッドを内部的にコールし、次に更新可能なTopoMapオブジェクトのupdateTopologyメソッドをコールして位相要素をデータベースに書き込みます。このファンクションがINSERT文またはUPDATE文でコールされると、フィーチャ表内でフィーチャの作成または更新が行われます。ファンクションが完了すると、トポロジにジオメトリのオーバーレイが行われます。(つまり、Spatial and Graphは暗黙的に作成されたTopoMapオブジェクトを使用して、このファンクションへの各コールに対して新しいTopoMapオブジェクトを作成します。)

このファンクションの3番目の構文を使用する場合は、更新可能なTopoMapオブジェクトを作成する必要がありません。このファンクションは、dml_conditionパラメータ値に基づいて子レベルのフィーチャのTG_ID値を内部的に収集し、SDO_TGL_OBJECT_ARRAYオブジェクトを組み合せてSDO_GEOMETRYオブジェクトを作成します。

このファンクションがすべてのジオメトリで正常に実行されるようにするには、各ジオメトリに対してループを使用してファンクションをコールします。このファンクションは、INSERT文またはUPDATE文の副問合せで使用しないでください。副問合せで使用すると、トポロジで不整合が発生し、さらにその不整合に関するエラー・メッセージや警告メッセージを受け取れない場合があります。

次の状態が1つ以上存在する場合は、例外が発生します。

  • topologytable_nameまたはcolumn_nameが存在しない。

  • geomで指定しているジオメトリ・オブジェクトのタイプが、トポロジ・ジオメトリ・レイヤーのタイプと一致しない。たとえば、土地区画フィーチャの作成に線ストリング・ジオメトリは使用できません。

  • トポロジ・ジオメトリ・レイヤー階層を持たないトポロジでdml_conditionが使用されている。

  • 入力ジオメトリに、最適化された形状(最適化された矩形や円など)が含まれている。

  • 線ストリングまたは複数の線で構成されるストリングのジオメトリで、線セグメントが重なっている。

  • 複数のポリゴンで構成されるジオメトリで、外部リングが他の外部リングに重なっている。

次の例では、CITY_STREETSフィーチャ表、TRAFFIC_SIGNSフィーチャ表およびLAND_PARCELSフィーチャ表のFEATURE列に、それぞれCITY_STREETS_GEOM空間表、TRAFFIC_SIGNS_GEOM空間表およびLAND_PARCELS_GEOM空間表のGEOMETRY列のすべてのジオメトリを移入します。この例では、CITY_DATAトポロジに対して更新可能なTopoMapオブジェクトが作成され、ロードされていると想定しています。(この例では、「空間ジオメトリから作成したトポロジ」の定義およびデータを参照しています。)

BEGIN
  FOR street_rec IN (SELECT name, geometry FROM city_streets_geom) LOOP
   INSERT INTO city_streets VALUES(street_rec.name,
     SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'CITY_STREETS', 'FEATURE',
         street_rec.geometry));
  END LOOP;
 
  FOR sign_rec IN (SELECT name, geometry FROM traffic_signs_geom) LOOP
   INSERT INTO traffic_signs VALUES(sign_rec.name,
     SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'TRAFFIC_SIGNS', 'FEATURE',
         sign_rec.geometry));
  END LOOP;
 
  FOR parcel_rec IN (SELECT name, geometry FROM land_parcels_geom) LOOP
   INSERT INTO land_parcels VALUES(parcel_rec.name,
     SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'LAND_PARCELS', 'FEATURE',
         parcel_rec.geometry));
  END LOOP;
END;
/

次の例では、郡と州という2つのレイヤーを使用したトポロジ・ジオメトリ・レイヤー階層を持つトポロジを作成します。親レイヤー(州)フィーチャを作成するCREATE_FEATUREファンクションへのコールには、dml_conditionパラメータ('p_name=''NH'''など)が含まれます。

declare
 name varchar2(64);
 cursor c1 is select state_abrv, county from
   counties order by 1, 2;
 stateabrv varchar2(2);
begin
 
 -- Initialize.
 sdo_topo_map.create_topo_map('cnty', 'm2', 10000, 10000, 10000);
 sdo_topo_map.load_topo_map('m2', -180, -90, 180, 90, 'true');
 
 -- Insert one county at a time.
 for cnty_rec in c1 loop
   stateabrv := cnty_rec.state_abrv;
   name := cnty_rec.county;
   insert into cnty_areas select state_abrv || '-' ||county,
     sdo_topo_map.create_feature('CNTY', 'CNTY_AREAS', 'FEATURE', geom) from
     counties where state_abrv=stateabrv and county=name;
 end loop;
 
 -- Roll back topology.
 sdo_topo_map.rollback_topo_map();
 sdo_topo_map.drop_topo_map('m2');
 
 -- Roll back inserts.
 rollback;
 
exception
 when others then
   dbms_output.put_line(SQLERRM);
   sdo_topo_map.rollback_topo_map();
   sdo_topo_map.drop_topo_map('m2');
   rollback;
end;
/
 
-- Add parent feature layer.
--  
--   The following commented out statement can be used to populate the
--     child_layer_id parameter in sdo_topo.add_topo_geometry_layer.
--  
--   select tg_layer_id
--     from user_sdo_topo_info 
--     where TOPOLOGY = 'SC' 
--       and table_name = 'SC_AREAS';
-- 
execute sdo_topo.add_topo_geometry_layer('SC','SC_P_AREAS', 'FEATURE', -
                                      'POLYGON', NULL, child_layer_id => 1);
 
-- Create and insert state features (logically) from county features.
insert into sc_p_areas (f_name, p_name, feature) values ('NH', 'US',
  sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''NH'''));
insert into sc_p_areas (f_name, p_name, feature) values ('CT', 'US',
  sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''CT'''));
insert into sc_p_areas (f_name, p_name, feature) values ('ME', 'US',
  sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''ME'''));
insert into sc_p_areas (f_name, p_name, feature) values ('MA', 'US',
  sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''MA'''));
commit;

4.14 SDO_TOPO_MAP.CREATE_TOPO_MAP

構文

SDO_TOPO_MAP.CREATE_TOPO_MAP(     
  topology         IN VARCHAR2,      
  topo_map         IN VARCHAR2,      
  number_of_edges  IN NUMBER DEFAULT 100,      
  number_of_nodes  IN NUMBER DEFAULT 80,      
  number_of_faces  IN NUMBER DEFAULT 30);

説明

既存のトポロジに関連付けられたTopoMapオブジェクト・キャッシュを作成します。

パラメータ

topology

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

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

number_of_edges

任意の時点でTopoMapオブジェクトに存在すると想定されるエッジの最大数を指定します。このパラメータを指定しない場合、デフォルト値の100が使用されます。

number_of_nodes

任意の時点でTopoMapオブジェクトに存在すると想定されるノードの最大数を指定します。このパラメータを指定しない場合、デフォルト値の80が使用されます。

number_of_faces

任意の時点でTopoMapオブジェクトに存在すると想定されるフェイスの最大数を指定します。このパラメータを指定しない場合、デフォルト値の30が使用されます。

使用上の注意

指定したTopoMapオブジェクトに関連付けられたキャッシュ内に格納されるエッジ、ノードまたはフェイス(あるいはこれらの組合せ)のおおまかな数を適切に判断できる場合、number_of_edgesnumber_of_nodesおよびnumber_of_facesパラメータを使用すると、プロシージャのパフォーマンスが向上し、メモリー使用量を低減できます。Spatial and Graphは、まず、各タイプの指定された数またはデフォルトの数のオブジェクトにメモリー・キャッシュを割り当て、より多くのオブジェクトを格納する必要がある場合は、後で割当てを段階的に増やします。

1回のユーザー・セッションに複数のTopoMapオブジェクトを作成できますが、1回のユーザー・セッションに存在できる更新可能なTopoMapオブジェクトは常に1つのみです。

インメモリー・キャッシュを使用して位相要素を編集する方法の詳細は、「トポロジ・データを編集する方法」を参照してください。

このプロシージャの使用は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のコンストラクタをコールする場合と同じです。

次の例では、CITY_DATA_TOPOMAPという名前のTopoMapオブジェクトおよびそれに関連付けられたキャッシュを作成して、そのTopoMapオブジェクトをCITY_DATAという名前のトポロジに関連付けます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.CREATE_TOPO_MAP('CITY_DATA', 'CITY_DATA_TOPOMAP');

4.15 SDO_TOPO_MAP.DROP_TOPO_MAP

構文

SDO_TOPO_MAP.DROP_TOPO_MAP(     
  topo_map IN VARCHAR2);

説明

現行のユーザー・セッションからTopoMapオブジェクトを削除します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

使用上の注意

このプロシージャは、TopoMapオブジェクトが更新可能な場合、コミットされていない変更をロールバックします(SDO_TOPO_MAP.ROLLBACK_TOPO_MAP操作と同じ処理を実行します)。また、TopoMapオブジェクトに関連付けられたキャッシュをクリアして、セッションからTopoMapオブジェクトを削除します。

インメモリー・キャッシュを使用して位相要素を編集する方法の詳細は、「トポロジ・データを編集する方法」を参照してください。

このプロシージャの動作は、クライアント側のJavaアプリケーションで、TopoMapオブジェクトの変数をNULL値に設定した場合と同じです。(クライアント側のJava APIについては、「トポロジ・データ・モデルのJavaインタフェース」を参照してください。)

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

CALL SDO_TOPO_MAP.DROP_TOPO_MAP('CITY_DATA_TOPOMAP');

4.16 SDO_TOPO_MAP.GET_CONTAINING_FACE

構文

SDO_TOPO_MAP.GET_CONTAINING_FACE(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.GET_CONTAINING_FACE(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  x        IN NUMBER,      
  y        IN NUMBER      
) RETURN NUMBER;

説明

指定された点を含むフェイスのフェイスID番号を戻します。

パラメータ

topology

フェイスおよび点を含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

point

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

x

点のX軸値を指定します。

y

点のY軸値を指定します。

使用上の注意

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

このファンクションは、指定されたTopoMapオブジェクトのフェイス(孤立フェイスを含む)のうち、孤立要素を除外したオープン・セットに、指定された点が含まれるフェイスを判断します(存在する場合)。(孤立要素を除外したフェイスのオープン・セットは、フェイス内のすべての点で構成されますが、境界上の点は含みません。)点がフェイスの境界上にある場合、ファンクションは値0 (ゼロ)を戻します。

トポロジ全体がTopoMapオブジェクトにロードされており、点がキャッシュの有限フェイス内に存在しない場合、このファンクションは値-1(ユニバース・フェイス)を戻します。トポロジのウィンドウがTopoMapオブジェクトにロードされており、点がキャッシュの有限フェイス内に存在しない場合、このファンクションは、点がウィンドウ内に存在する場合は値-1(ユニバース・フェイス)を戻し、点がウィンドウの外部に存在する場合は値0(ゼロ)を戻します。トポロジ全体もウィンドウもロードされていない場合、このファンクションは0(ゼロ)を戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetContainingFaceメソッドを使用する場合と同じです。

次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAPの(22, 37)に存在する点を含むフェイスのフェイスID番号を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_CONTAINING_FACE(null, 'CITY_DATA_TOPOMAP',
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(22,37,NULL), NULL, NULL))
  FROM DUAL;
 
SDO_TOPO_MAP.GET_CONTAINING_FACE(NULL,'CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NULL
--------------------------------------------------------------------------------
                                                                               2

4.17 SDO_TOPO_MAP.GET_EDGE_ADDITIONS

構文

SDO_TOPO_MAP.GET_EDGE_ADDITIONS() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクトに追加されたエッジのエッジID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に追加されたエッジのエッジID番号を戻します。この間にフェイスが追加されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetEdgeAdditionsメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトに追加されたエッジのエッジID番号を戻します。

SELECT SDO_TOPO_MAP.GET_EDGE_ADDITIONS FROM DUAL;
 
GET_EDGE_ADDITIONS                                                              
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(28, 29, 30, 32)

4.18 SDO_TOPO_MAP.GET_EDGE_CHANGES

構文

SDO_TOPO_MAP.GET_EDGE_CHANGES() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクト内で変更されたエッジのエッジID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に変更されたエッジのエッジID番号を戻します。この間にフェイスが変更されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetEdgeChangesメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクト内で変更されたエッジのエッジID番号を戻します。

SELECT SDO_TOPO_MAP.GET_EDGE_CHANGES FROM DUAL;
 
GET_EDGE_CHANGES                                                                
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(3, 2, 1) 

4.19 SDO_TOPO_MAP.GET_EDGE_COORDS

構文

SDO_TOPO_MAP.GET_EDGE_COORDS(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  edge_id  IN NUMBER      
) RETURN SDO_NUMBER_ARRAY;

説明

指定されたエッジの開始ノード、形状点および終了ノードの座標の配列を戻します。

パラメータ

topology

エッジを含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

edge_id

エッジのエッジID値を指定します。

使用上の注意

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetEdgeCoordsメソッドを使用する場合と同じです。

次の例では、エッジID値が1のエッジの開始ノード、形状点および終了ノードの座標を戻します。戻される配列には、6つの点の座標が含まれます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_EDGE_COORDS(null, 'CITY_DATA_TOPOMAP', 1) FROM DUAL;
 
SDO_TOPO_MAP.GET_EDGE_COORDS(NULL,'CITY_DATA_TOPOMAP',1)                            
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(8, 30, 16, 30, 16, 38, 3, 38, 3, 30, 8, 30)

4.20 SDO_TOPO_MAP.GET_EDGE_DELETIONS

構文

SDO_TOPO_MAP.GET_EDGE_DELETIONS() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクトから削除されたエッジのエッジID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に削除されたエッジのエッジID番号を戻します。この間にフェイスが削除されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetEdgeDeletionsメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトから削除されたエッジのエッジID番号を戻します。空のSDO_NUMBER_ARRAYオブジェクトが戻された場合、削除されたエッジはありません。

SELECT SDO_TOPO_MAP.GET_EDGE_DELETIONS FROM DUAL;
 
GET_EDGE_DELETIONS                                                              
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY()

4.21 SDO_TOPO_MAP.GET_EDGE_NODES

構文

SDO_TOPO_MAP.GET_EDGE_NODES(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  edge_id  IN NUMBER      
) RETURN SDO_NUMBER_ARRAY;

説明

指定されたエッジの開始ノードおよび終了ノードのID番号の配列を戻します。

パラメータ

topology

エッジを含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

edge_id

エッジのエッジID値を指定します。

使用上の注意

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

エッジが1つのノードで開始および終了する場合、そのノードのID番号が、配列の最初と最後の番号になります。

このファンクションと同等のメソッドは、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)には存在しません。getEdgeメソッドは、oracle.spatial.topo.EdgeクラスのJavaエッジ・オブジェクトを戻します。

次の例では、エッジID値が1のエッジ上に存在するノードのID番号を戻します。戻される配列には、2つのノードID番号が含まれます。指定したエッジはノードIDが1のノードで開始および終了するループ・エッジであるため、(同じノードに対する) 2つのノードID番号はいずれも1です。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_EDGE_NODES(null, 'CITY_DATA_TOPOMAP', 1) FROM DUAL;
 
SDO_TOPO_MAP.GET_EDGE_NODES(NULL,'CITY_DATA_TOPOMAP',1)                             
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(1, 1)

4.22 SDO_TOPO_MAP.GET_FACE_ADDITIONS

構文

SDO_TOPO_MAP.GET_FACE_ADDITIONS() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクトに追加されたフェイスのフェイスID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に追加されたフェイスのフェイスID番号を戻します。この間にフェイスが追加されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetFaceAdditionsメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトに追加されたフェイスのフェイスID番号を戻します。

SELECT SDO_TOPO_MAP.GET_FACE_ADDITIONS FROM DUAL;
 
GET_FACE_ADDITIONS                                                              
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(11)

4.23 SDO_TOPO_MAP.GET_FACE_CHANGES

構文

SDO_TOPO_MAP.GET_FACE_CHANGES() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクト内で変更されたフェイスのフェイスID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に変更されたフェイスのフェイスID番号を戻します。この間にフェイスが変更されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetFaceChangesメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクト内で変更されたフェイスのフェイスID番号を戻します。

SELECT SDO_TOPO_MAP.GET_FACE_CHANGES FROM DUAL;
 
GET_FACE_CHANGES                                                                
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(2, 1, -1)

4.24 SDO_TOPO_MAP.GET_FACE_BOUNDARY

構文

SDO_TOPO_MAP.GET_FACE_BOUNDARY(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  face_id  IN NUMBER      
  option   IN NUMBER      
) RETURN SDO_NUMBER_ARRAY;

説明

指定されたフェイスの境界を構成するエッジのエッジID番号を示す配列を戻します。

パラメータ

topology

フェイスを含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

face_id

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

option

境界を計算するためのオプションを示す数値の1つを指定します。0はスパーを使用しない(つまり二重にトレースされるエッジを使用しない)外部境界リング、1はスパーを使用しない外部リングおよび内部リング、2はスパーを使用した外部リングおよび内部リングを示します。値が2の場合、縮重する可能性はありますが、完全な境界が戻されます。

使用上の注意

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetFaceBoundaryメソッドを使用する場合と同じです。

次の例では、フェイスID値が3のフェイスの、スパーを使用しない外部境界リング内のエッジを戻します。戻される配列には、4つのエッジID値が含まれます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_FACE_BOUNDARY(null, 'CITY_DATA_TOPOMAP', 3, 0) FROM DUAL;
 
SDO_TOPO_MAP.GET_FACE_BOUNDARY(NULL,'CITY_DATA_TOPOMAP',3,0)                    
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(19, 6, 21, 9)

4.25 SDO_TOPO_MAP.GET_FACE_DELETIONS

構文

SDO_TOPO_MAP.GET_FACE_DELETIONS() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクトから削除されたフェイスのフェイスID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に削除されたフェイスのフェイスID番号を戻します。この間にフェイスが削除されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetFaceDeletionsメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトから削除されたフェイスのフェイスID番号を戻します。空のSDO_NUMBER_ARRAYオブジェクトが戻された場合、削除されたフェイスはありません。

SELECT SDO_TOPO_MAP.GET_FACE_DELETIONS FROM DUAL;
 
GET_FACE_DELETIONS                                                              
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY()

4.26 SDO_TOPO_MAP.GET_NEAREST_EDGE

構文

SDO_TOPO_MAP.GET_NEAREST_EDGE(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.GET_NEAREST_EDGE(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  x        IN NUMBER,      
  y        IN NUMBER      
) RETURN NUMBER;

説明

指定された点に最も近いエッジのエッジID番号を戻します。

パラメータ

topology

エッジおよび点を含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

point

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

x

点のX軸値を指定します。

y

点のY軸値を指定します。

使用上の注意

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

最も近いエッジは、空間索引を使用して、データベース内のトポロジの表現から判断されます。インスタンスでエッジが変更、追加または削除された場合、データベースが更新されてこれらの変更が反映されないと、このファンクションの結果にTopoMapオブジェクト・キャッシュの実際の状況が反映されない場合があります。

点に最も近いエッジが複数ある場合、いずれかのエッジID値が戻されます。トポロジ内にエッジが存在しない場合、このファンクションは0(ゼロ)を戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNearestEdgeメソッドを使用する場合と同じです。

次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAPの(8, 8)に存在する点に最も近いエッジのエッジID番号を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_NEAREST_EDGE(null, 'CITY_DATA_TOPOMAP',
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8,8,NULL), NULL, NULL))
  FROM DUAL;
 
SDO_TOPO_MAP.GET_NEAREST_EDGE(NULL,'CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NULL,SD
--------------------------------------------------------------------------------
                                                                              22

4.27 SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE

構文

SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE(     
  topo_map IN VARCHAR2,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE(     
  topo_map IN VARCHAR2,      
  x        IN NUMBER,      
  y        IN NUMBER      
) RETURN NUMBER;

説明

指定されたTopoMapオブジェクトにロードされているエッジの中で、指定された点に最も近いエッジのエッジID番号を戻します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

point

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

x

点のX軸値を指定します。

y

点のY軸値を指定します。

使用上の注意

点に最も近いエッジが複数ある場合、いずれかのエッジID値が戻されます。トポロジ・データがロードされていない場合またはキャッシュ内にエッジが存在しない場合、このファンクションは0(ゼロ)を戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNearestEdgeInCacheメソッドを使用する場合と同じです。

次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAPの(8, 8)に存在する点に最も近いエッジのエッジID番号を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE('CITY_DATA_TOPOMAP',
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8,8,NULL), NULL, NULL))
  FROM DUAL;
 
SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE('CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NUL
--------------------------------------------------------------------------------
                                                                              22

4.28 SDO_TOPO_MAP.GET_NEAREST_NODE

構文

SDO_TOPO_MAP.GET_NEAREST_NODE(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.GET_NEAREST_NODE(     
  topology IN VARCHAR2,      
  topo_map IN VARCHAR2,      
  x        IN NUMBER,      
  y        IN NUMBER      
) RETURN NUMBER;

説明

指定された点に最も近いノードのノードID番号を戻します。

パラメータ

topology

ノードおよび点を含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

point

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

x

点のX軸値を指定します。

y

点のY軸値を指定します。

使用上の注意

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

最も近いノードは、空間索引を使用して、データベース内のトポロジの表現から判断されます。インスタンスでノードが変更、追加または削除された場合、データベースが更新されてこれらの変更が反映されないと、このファンクションの結果にTopoMapオブジェクト・キャッシュの実際の状況が反映されない場合があります。

点に最も近いノードが複数ある場合、いずれかのノードID値が戻されます。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNearestNodeメソッドを使用する場合と同じです。

次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAPの(8, 8)に存在する点に最も近いノードのノードID番号を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_NEAREST_NODE(null, 'CITY_DATA_TOPOMAP',
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8,8,NULL), NULL, NULL))
  FROM DUAL;
 
SDO_TOPO_MAP.GET_NEAREST_NODE(NULL,'CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NULL,SD
--------------------------------------------------------------------------------
                                                                               8

4.29 SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE

構文

SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE(     
  topo_map IN VARCHAR2,      
  point    IN SDO_GEOMETRY      
) RETURN NUMBER;

または

SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE(     
  topo_map IN VARCHAR2,      
  x        IN NUMBER,      
  y        IN NUMBER      
) RETURN NUMBER;

説明

指定されたTopoMapオブジェクトにロードされているノードの中で、指定された点に最も近いノードのノードID番号を戻します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

point

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

x

点のX軸値を指定します。

y

点のY軸値を指定します。

使用上の注意

点に最も近いノードが複数ある場合、いずれかのノードID値が戻されます。トポロジ・データがロードされていない場合またはキャッシュ内にノードが存在しない場合、このファンクションは0(ゼロ)を戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNearestNodeInCacheメソッドを使用する場合と同じです。

次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAPの(8, 8)に存在する点に最も近いノードのノードID番号を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE('CITY_DATA_TOPOMAP',
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8,8,NULL), NULL, NULL))
  FROM DUAL;
 
SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE('CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NUL
--------------------------------------------------------------------------------
                                                                               8

4.30 SDO_TOPO_MAP.GET_NODE_ADDITIONS

構文

SDO_TOPO_MAP.GET_NODE_ADDITIONS() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクトに追加されたノードのノードID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に追加されたノードのノードID番号を戻します。この間にフェイスが追加されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNodeAdditionsメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトに追加されたノードのノードID番号を戻します。

SELECT SDO_TOPO_MAP.GET_NODE_ADDITIONS FROM DUAL;
 
GET_NODE_ADDITIONS                                                              
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(24, 25, 26, 27, 28)

4.31 SDO_TOPO_MAP.GET_NODE_CHANGES

構文

SDO_TOPO_MAP.GET_NODE_CHANGES() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクト内で変更されたノードのノードID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に変更されたノードのノードID番号を戻します。この間にフェイスが変更されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNodeChangesメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクト内で変更されたノードのノードID番号を戻します。

SELECT SDO_TOPO_MAP.GET_NODE_CHANGES FROM DUAL;
 
GET_NODE_CHANGES                                                                
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(2, 4) 

4.32 SDO_TOPO_MAP.GET_NODE_COORD

構文

SDO_TOPO_MAP.GET_NODE_COORD(     
  topology  IN VARCHAR2,      
  topo_map  IN VARCHAR2,      
  node_id   IN NUMBER      
) RETURN SDO_GEOMETRY;

説明

指定されたノードの座標を示すSDO_GEOMETRYオブジェクトを戻します。

パラメータ

topology

ノードを含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

node_id

ノードのノードID値を指定します。

使用上の注意

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNodeCoordメソッドを使用する場合と同じです。

次の例では、ノードID値が14のノードの座標を示すジオメトリ・オブジェクトを戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_NODE_COORD(null, 'CITY_DATA_TOPOMAP', 14) FROM DUAL;
 
SDO_TOPO_MAP.GET_NODE_COORD(NULL,'CITY_DATA_TOPOMAP',14)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 0, SDO_POINT_TYPE(21, 14, NULL), NULL, NULL)

4.33 SDO_TOPO_MAP.GET_NODE_DELETIONS

構文

SDO_TOPO_MAP.GET_NODE_DELETIONS() RETURN SDO_NUMBER_ARRAY;

説明

現行の更新可能なTopoMapオブジェクトから削除されたノードのノードID番号の配列を戻します。

パラメータ

なし。

使用上の注意

このファンクションは、現行の更新可能なTopoMapオブジェクト内で、オブジェクトの最後のロード(SDO_TOPO_MAP.LOAD_TOPO_MAPを使用)、更新(SDO_TOPO_MAP.UPDATE_TOPO_MAPを使用)、クリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPを使用)、コミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPを使用)またはロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPを使用)以降に削除されたノードのノードID番号を戻します。この間にフェイスが削除されていない場合、ファンクションは空のSDO_NUMBER_ARRAYオブジェクトを戻します。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNodeDeletionsメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトから削除されたノードのノードID番号を戻します。空のSDO_NUMBER_ARRAYオブジェクトが戻された場合、削除されたノードはありません。

SELECT SDO_TOPO_MAP.GET_NODE_DELETIONS FROM DUAL;
 
GET_NODE_DELETIONS                                                              
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY()

4.34 SDO_TOPO_MAP.GET_NODE_FACE_STAR

構文

SDO_TOPO_MAP.GET_NODE_FACE_STAR(     
  topology  IN VARCHAR2,      
  topo_map  IN VARCHAR2,      
  node_id   IN NUMBER      
) RETURN SDO_NUMBER_ARRAY;

説明

指定されたノードに接続されているフェイスのフェイスID番号を時計回りに示す、SDO_NUMBER_ARRAYオブジェクトを戻します。

パラメータ

topology

ノードを含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

node_id

ノードのノードID値を指定します。

使用上の注意

ノードのノード・フェイス・スターは、ノードに接続されているフェイスを指します。ノードに接続されているエッジごとに1つのフェイスが戻されます。孤立ノードの場合は、孤立ノードを含むフェイスが戻されます。フェイスはリスト内に複数回出現する場合があります。

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNodeFaceStarメソッドを使用する場合と同じです。

ノードのノード・スターを戻すには、SDO_TOPO_MAP.GET_NODE_STARファンクションを使用します。

次の例では、ノードID値が14のノードのノード・フェイス・スターを戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_NODE_FACE_STAR(null, 'CITY_DATA_TOPOMAP', 14) FROM DUAL;
 
SDO_TOPO_MAP.GET_NODE_FACE_STAR(NULL,'CITY_DATA_TOPOMAP',14)                    
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(4, 7, 6, 3)

4.35 SDO_TOPO_MAP.GET_NODE_STAR

構文

SDO_TOPO_MAP.GET_NODE_STAR(     
  topology  IN VARCHAR2,      
  topo_map  IN VARCHAR2,      
  node_id   IN NUMBER      
) RETURN SDO_NUMBER_ARRAY;

説明

指定されたノードに接続されているエッジのエッジID番号を時計回りに示す、SDO_NUMBER_ARRAYオブジェクトを戻します。

パラメータ

topology

ノードを含むトポロジの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。名前は20文字以下である必要があります。

topo_map

TopoMapオブジェクトの名前またはNULL値(「GET_xxxトポロジ・ファンクションの使用」を参照)を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

node_id

ノードのノードID値を指定します。

使用上の注意

ノードのノード・スターは、ノードに接続されているエッジを指します。正のエッジIDは、ノードが開始ノードであるエッジを表します。負のエッジIDは、ノードが終了ノードであるエッジを表します。ノードにループが接続されている場合は、エッジが反対の符号を使用してリストに2回出現することがあります。

topologyまたはtopo_mapパラメータには、有効な名前を指定する必要があります(「GET_xxxトポロジ・ファンクションの使用」を参照)。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetNodeStarメソッドを使用する場合と同じです。

ノードのノード・フェイス・スターを戻すには、SDO_TOPO_MAP.GET_NODE_FACE_STARファンクションを使用します。

次の例では、ノードID値が14のノードのノード・スターを戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_NODE_STAR(null, 'CITY_DATA_TOPOMAP', 14) FROM DUAL;
 
SDO_TOPO_MAP.GET_NODE_STAR(NULL,'CITY_DATA_TOPOMAP',14)                             
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(19, -10, -20, -9)

4.36 SDO_TOPO_MAP.GET_TOPO_NAME

構文

SDO_TOPO_MAP.GET_TOPO_NAME(     
  topo_map  IN VARCHAR2      
) RETURN VARCHAR2;

説明

指定されたTopoMapオブジェクトに関連付けられたトポロジの名前を戻します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

使用上の注意

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetTopoNameメソッドを使用する場合と同じです。

次の例では、CITY_DATA_TOPOMAPという名前のTopoMapオブジェクトに関連付けられたトポロジの名前を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.GET_TOPO_NAME('CITY_DATA_TOPOMAP') FROM DUAL;
 
SDO_TOPO_MAP.GET_TOPO_NAME('CITY_DATA_TOPOMAP')                                     
--------------------------------------------------------------------------------
CITY_DATA 

4.37 SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID

構文

SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID() RETURN NUMBER;

説明

現行の更新可能なTopoMapオブジェクトにデータがロードされている場合に、トポロジ・トランザクションID番号を戻します。

パラメータ

なし。

使用上の注意

トポロジの履歴情報表内の各行では、TOPO_TX_ID列にトポロジ・トランザクションID番号が含まれます。履歴情報表については、「履歴情報表」を参照してください。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のgetTopoTransactionIdメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトのトポロジ・トランザクションID番号を戻します。

SELECT SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID FROM DUAL;
 
GET_TOPO_TRANSACTION_ID                                                              
-----------------------
                      1 

4.38 SDO_TOPO_MAP.LIST_TOPO_MAPS

構文

SDO_TOPO_MAP.LIST_TOPO_MAPS() RETURN VARCHAR2;

説明

セッションで現在アクティブな各TopoMapオブジェクトのエントリをカンマで区切ったリストを戻します。現在アクティブなTopoMapオブジェクトが存在しない場合は、空の文字列を戻します。

パラメータ

なし。

使用上の注意

カンマで区切られたリストの各エントリには、TopoMapオブジェクトの名前、TopoMapオブジェクトに関連付けられたトポロジの名前、およびupdatable(TopoMapオブジェクトが更新(編集)可能な場合)またはread-only(TopoMapオブジェクトが更新不可の場合)のいずれかの情報が含まれます。

TopoMapオブジェクトの詳細(更新可能および読取り専用状態を含む)は、「TopoMapオブジェクト」を参照してください。

セッションからTopoMapオブジェクトを削除するには、SDO_TOPO_MAP.DROP_TOPO_MAPプロシージャを使用します。

次の例では、セッションで現在アクティブな各TopoMapオブジェクトに対して、Topomapオブジェクト名、トポロジ名、およびオブジェクトが更新可能か読取り専用かを示します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.LIST_TOPO_MAPS FROM DUAL;
 
LIST_TOPO_MAPS
--------------------------------------------------------------------------------
(CITY_DATA_TOPOMAP, CITY_DATA, updatable)

4.39 SDO_TOPO_MAP.LOAD_TOPO_MAP

構文(ファンクション)

SDO_TOPO_MAP.LOAD_TOPO_MAP(     
  topo_map      IN VARCHAR2,      
  allow_updates IN VARCHAR2,      
  build_indexes IN VARCHAR2 DEFAULT 'TRUE'      
) RETURN VARCHAR2;

または

SDO_TOPO_MAP.LOAD_TOPO_MAP(     
  topo_map      IN VARCHAR2,      
  xmin          IN NUMBER,      
  ymin          IN NUMBER,      
  xmax          IN NUMBER,      
  ymax          IN NUMBER,      
  allow_updates IN VARCHAR2,      
  build_indexes IN VARCHAR2 DEFAULT 'TRUE'      
) RETURN VARCHAR2;

構文(プロシージャ)

SDO_TOPO_MAP.LOAD_TOPO_MAP(     
  topo_map      IN VARCHAR2,      
  allow_updates IN VARCHAR2,      
  build_indexes IN VARCHAR2 DEFAULT 'TRUE');'

または

SDO_TOPO_MAP.LOAD_TOPO_MAP(     
  topo_map      IN VARCHAR2,      
  xmin          IN NUMBER,      
  ymin          IN NUMBER,      
  xmax          IN NUMBER,      
  ymax          IN NUMBER,      
  allow_updates IN VARCHAR2,      
  build_indexes IN VARCHAR2 DEFAULT 'TRUE');'

説明

トポロジ全体またはトポロジのウィンドウ(矩形部分)の位相要素(プリミティブ)をTopoMapオブジェクトにロードします。ファンクションの構文を使用すると、位相要素がキャッシュにロードされている場合は文字列TRUEを、位相要素がキャッシュにロードされていない場合は文字列FALSEを戻します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

xmin

ロードするウィンドウ(トポロジの矩形部分)の左下のX座標値を指定します。

ウィンドウの指定時にロードされる位相要素については、「使用上の注意」および図4-1を参照してください。

ymin

ロードするウィンドウ(トポロジの矩形部分)の左下のY座標値を指定します。

xmax

ロードするウィンドウ(トポロジの矩形部分)の右上のX座標値を指定します。

ymax

ロードするウィンドウ(トポロジの矩形部分)の右上のY座標値を指定します。

allow_updates

TopoMapオブジェクトを更新可能(TopoMapオブジェクトでのトポロジの編集操作、および変更内容のデータベースへの書込みを可能)にするにはTRUEを指定します。データベースに関してTopoMapオブジェクトを読取り専用(TopoMapオブジェクトでのトポロジの編集操作は可能であるが、変更内容のデータベースへの書込みを禁止)にするには、FALSEを指定します。

TopoMapオブジェクトを更新可能にすると、TopoMapオブジェクト内の位相要素がロックされます。つまり、これらの位相要素を、別のデータベース・ユーザーのセッションで更新可能なTopoMapオブジェクトに含めることはできません。(1回のユーザー・セッションでアクティブにできる更新可能なTopoMapオブジェクトは常に1つのみです)。

build_indexes

エッジおよびフェイスのデータにインメモリーRツリー索引を作成するにはTRUE (デフォルト)を指定します。エッジおよびフェイスのデータにメモリー内Rツリー索引を作成しない場合はFALSEを指定します。索引を作成すると、特に、大規模なトポロジで編集操作のパフォーマンスが向上します。

使用上の注意

TopoMapオブジェクトをロードする際に、位相要素がロードされたかどうかを確認する必要がない場合(たとえば、指定したトポロジ領域または矩形領域が空かどうかを確認する必要がない場合)、ファンクション構文を使用するよりも、プロシージャ構文の方が処理を効率的に実行できます。ファンクション構文を使用すると、位相要素がロードされたかどうかを確認できます。

TopoMapオブジェクトにデータをロードする前に、(SDO_TOPO_MAP.CREATE_TOPO_MAPプロシージャを使用して)TopoMapオブジェクトを作成しておく必要があります。

TopoMapオブジェクトにすでにデータが含まれている場合、このファンクションまたはプロシージャは使用できません。TopoMapオブジェクトにデータが含まれている場合は、このファンクションまたはプロシージャをコールする前に、変更をコミット(SDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャを使用)してキャッシュをクリア(SDO_TOPO_MAP.CLEAR_TOPO_MAPプロシージャを使用)するか、または変更をロールバック(SDO_TOPO_MAP.ROLLBACK_TOPO_MAPプロシージャを使用)する必要があります。

インメモリー・キャッシュを使用して位相要素を編集する方法の詳細は、「トポロジ・データを編集する方法」を参照してください。

このファンクションまたはプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のloadTopologyメソッドまたはloadWindowメソッドを使用する場合と同じです。

TopoMapオブジェクトが、トポロジ全体のTopoMapオブジェクトであるか、またはxminyminxmaxおよびymaxパラメータを使用して指定されたウィンドウのTopoMapオブジェクトであるかにかかわらず、すべてのTopoMapオブジェクトには、それに関連付けられた領域があります。更新可能なTopoMapオブジェクトの場合は、この領域内でのみ更新が可能です。(この領域には、直接更新できない位相要素が含まれている場合もありますが、ユーザーの編集操作の結果として、Oracle Spatial and Graphが必要に応じて変更する場合があります。)

TopoMapオブジェクトがロードされると、そのTopoMapオブジェクトの領域と交差するすべてのノード、フェイスおよびエッジがロードされます。フェイスがロードされると、フェイスの境界上にあるすべてのエッジおよびノードがロードされます。エッジがロードされると、エッジの開始ノードおよび終了ノードがロードされます。図4-1に示すトポロジおよびウィンドウ(破線で表示)について考えてみます。

図4-1 ウィンドウへの位相要素のロード

図4-1の説明が続きます
図4-1「ウィンドウへの位相要素のロード」の説明

次に、図4-1に示すウィンドウについて説明します。

  • フェイスF1は、部分的にウィンドウに重なっているため、ロードされます。

  • エッジE3、E4、E5、E6、E7、E8、E9、E10、E11、E12、E13、E14およびE16はロードされます。

    エッジE3は、部分的にウィンドウに重なっているため、ロードされます。

    エッジE9は、部分的にウィンドウに重なっているフェイス(F1)の境界であるため、ロードされます。

    エッジE12は、部分的にウィンドウに重なっているフェイス(F1)内の孤立エッジであるため、ロードされます。

    エッジE1は、ウィンドウと相互作用するフェイスに関連付けられていないため、ロードされません。

  • ノードN2、N5、N6、N7、N8、N9、N10、N11、N12、N16、N19およびN20はロードされます。

    連結ノードN2は、エッジE3がロードされるため、ロードされます。

    連結ノードN12は、エッジE9およびE11がロードされるため、ロードされます。

    孤立ノードN16は、ロックされたフェイス内の孤立ノードであるため、ロードされます。

次の例では、デフォルトで、すべてのCITY_DATAトポロジの要素を、それに関連するTopoMapオブジェクトに編集用にロードして、インメモリーRツリー索引を作成します。この例では、操作が正常に実行され、一部の位相要素がキャッシュにロードされたことを示す結果が戻されます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.LOAD_TOPO_MAP('CITY_DATA_TOPOMAP', 'TRUE') INTO :res_varchar;
 
Call completed.
 
PRINT res_varchar;
 
RES_VARCHAR
--------------------------------------------------------------------------------
TRUE

4.40 SDO_TOPO_MAP.MOVE_EDGE

構文

SDO_TOPO_MAP.MOVE_EDGE(     
  topology    IN VARCHAR2,      
  edge_id     IN NUMBER,      
  s_node_id   IN NUMBER,      
  t_node_id   IN NUMBER,      
  edge_coords IN SDO_NUMBER_ARRAY);

または

SDO_TOPO_MAP.MOVE_EDGE(     
  topology        IN VARCHAR2,      
  edge_id         IN NUMBER,      
  s_node_id       IN NUMBER,      
  t_node_id       IN NUMBER,      
  edge_coords     IN SDO_NUMBER_ARRAY,      
  moved_iso_nodes OUT SDO_NUMBER_ARRAY,      
  moved_iso_edges OUT SDO_NUMBER_ARRAY,      
  allow_iso_moves IN VARCHAR2);

説明

連結エッジを移動します。

パラメータ

topology

エッジの移動先となるトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

edge_id

移動するエッジのエッジIDを指定します。

edge_coords

エッジの移動先の開始点から終了点までの座標の配列を指定します。

s_node_id

移動の影響を受ける点(エッジの開始ノードまたは終了ノード)の移動前の位置を示す、ソース・ノードのノードIDを指定します。たとえば、エッジE19の終了点をノードN17からN16に移動する場合、s_node_id値には、ノードN17のノードID番号を指定します。

t_node_id

移動の影響を受ける点の移動後の位置を示す、ターゲット・ノードのノードIDを指定します。たとえば、エッジE19の終了点をノードN17からN16に移動する場合、t_node_id値には、ノードN16のノードID番号を指定します。

moved_iso_nodes

allow_iso_movesパラメータ値がTRUEの場合、Spatial and Graphによって、このプロシージャの結果として別のフェイスに移動された孤立ノードのノードID値が格納される出力パラメータです。allow_iso_movesパラメータ値がFALSEの場合、Spatial and Graphによって、実際には移動されなかったが、allow_iso_movesパラメータ値がTRUEだった場合は別のフェイスに移動されていたはずの孤立ノードのノードID値が格納されます。

moved_iso_edges

allow_iso_movesパラメータ値がTRUEの場合、Spatial and Graphによって、このプロシージャの結果として別のフェイスに移動された孤立エッジのエッジID値が格納される出力パラメータです。allow_iso_movesパラメータ値がFALSEの場合、Spatial and Graphによって、実際には移動されなかったが、allow_iso_movesパラメータ値がTRUEだった場合は別のフェイスに移動されていたはずの孤立エッジのエッジID値が格納されます。

allow_iso_moves

TRUEを指定すると、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作を実行し、これらの孤立ノードおよび孤立エッジを含むフェイスの情報を調整できます。FALSEを指定すると、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作は実行できません。

allow_iso_movesパラメータを指定しない場合は、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作を実行でき、また、これらの孤立ノードおよび孤立エッジを含むフェイスの情報が調整されます。

使用上の注意

エッジを移動する方法の詳細は、「エッジの移動」を参照してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のmoveEdgeメソッドを使用する場合と同じです。

次の例では、エッジID値が19のエッジを移動し、移動の前後のエッジ座標を表示します。エッジの移動操作によって、エッジの終了点をノードID値が17のノードから16のノードに移動します。(移動するエッジは「トポロジ・データ・モデルの概念」図1-2に示すE19で、このエッジはノードN17までの垂直線の状態から、ノードN16までの左上を向く対角線に変更されます。この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

-- Get coordinates of edge E19.
SELECT SDO_TOPO_MAP.GET_EDGE_COORDS(null, 'CITY_DATA_TOPOMAP', 19) FROM DUAL;
 
SDO_TOPO_MAP.GET_EDGE_COORDS(NULL,'CITY_DATA_TOPOMAP',19)                           
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(21, 14, 21, 22)                                                
 
-- Move edge E19: from N14 -> N17 to N14 -> N16. The 3rd and 4th parameters
-- identify N17 and N16.
CALL SDO_TOPO_MAP.MOVE_EDGE(null, 19, 17, 16,
  SDO_NUMBER_ARRAY(21,14, 9,22));
 
Call completed.
 
-- Get coordinates of edge E19 after the move.
SELECT SDO_TOPO_MAP.GET_EDGE_COORDS(null, 'CITY_DATA_TOPOMAP', 19) FROM DUAL;
 
SDO_TOPO_MAP.GET_EDGE_COORDS(NULL,'CITY_DATA_TOPOMAP',19)                           
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(21, 14, 9, 22)

4.41 SDO_TOPO_MAP.MOVE_ISOLATED_NODE

構文

SDO_TOPO_MAP.MOVE_ISOLATED_NODE(     
  topology  IN VARCHAR2,      
  node_id   IN NUMBER,      
  point     IN SDO_GEOMETRY);

または

SDO_TOPO_MAP.MOVE_ISOLATED_NODE(     
  topology  IN VARCHAR2,      
  node_id   IN NUMBER,      
  x         IN NUMBER,      
  y         IN NUMBER);

説明

孤立ノードを移動します。

パラメータ

topology

ノードの移動先となるトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

node_id

移動するノードのノードIDを指定します。

point

孤立ノードの移動先を表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。

x

孤立ノードの移動先を表す点のX軸値を指定します。

y

孤立ノードの移動先を表す点のY軸値を指定します。

使用上の注意

ノードを移動する方法の詳細は、「ノードの移動」を参照してください。

ノードは、そのノードが現在配置されているフェイス内の場所に移動する必要があります。それ以外の場合は、ノードを削除して再作成する必要があります。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のmoveIsolatedNodeメソッドを使用する場合と同じです。

次の例では、孤立ノードを追加して移動します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.ADD_ISOLATED_NODE(null, 2, 
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(22,38,NULL), NULL, NULL))
  INTO :res_number;
 
-- Move the just-added isolated node (from 20,38 to 22,39).
CALL SDO_TOPO_MAP.MOVE_ISOLATED_NODE( null, :res_number, 
  SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(22,39,NULL), NULL, NULL));

4.42 SDO_TOPO_MAP.MOVE_NODE

構文

SDO_TOPO_MAP.MOVE_NODE(     
  topology     IN VARCHAR2,      
  node_id      IN NUMBER,      
  edges_coords IN SDO_EDGE_ARRAY);

または

SDO_TOPO_MAP.MOVE_NODE(     
  topology        IN VARCHAR2,      
  node_id         IN NUMBER,      
  edges_coords    IN SDO_EDGE_ARRAY,      
  moved_iso_nodes OUT SDO_NUMBER_ARRAY,      
  moved_iso_edges OUT SDO_NUMBER_ARRAY,      
  allow_iso_moves IN VARCHAR2);

説明

連結ノードおよびその連結ノードに接するエッジを移動します。

パラメータ

topology

ノードの移動先となるトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

node_id

移動するノードのノードIDを指定します。

edges_coords

SDO_EDGE_ARRAY型(「SDO_EDGE_ARRAY型およびSDO_NUMBER_ARRAY型」を参照)の配列で使用する配列を指定します。各内部配列は、ノードに接する各エッジの移動先の開始点から終了点までの座標で構成されます。外部配列は、ノードに接するすべてのエッジの配列で構成され、その配列の順序は、移動するノードの開始エッジから時計回りの順(SDO_TOPO_MAP.GET_NODE_STARファンクションのコールで取得される順序)です。

各エッジの配列には、開始点および終了点を含める必要があります。移動されたノードに2回接続されているループは、配列で2回指定する必要があります。

moved_iso_nodes

allow_iso_movesパラメータ値がTRUEの場合、Spatial and Graphによって、このプロシージャの結果として別のフェイスに移動された孤立ノードのノードID値が格納される出力パラメータです。allow_iso_movesパラメータ値がFALSEの場合、Spatial and Graphによって、実際には移動されなかったが、allow_iso_movesパラメータ値がTRUEだった場合は別のフェイスに移動されていたはずの孤立ノードのノードID値が格納されます。

moved_iso_edges

allow_iso_movesパラメータ値がTRUEの場合、Spatial and Graphによって、このプロシージャの結果として別のフェイスに移動された孤立エッジのエッジID値が格納される出力パラメータです。allow_iso_movesパラメータ値がFALSEの場合、Spatial and Graphによって、実際には移動されなかったが、allow_iso_movesパラメータ値がTRUEだった場合は別のフェイスに移動されていたはずの孤立エッジのエッジID値が格納されます。

allow_iso_moves

TRUEを指定すると、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するノードの移動操作を実行し、これらの孤立ノードおよび孤立エッジを含むフェイスの情報を調整できます。FALSEを指定すると、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するノードの移動操作は実行できません。

allow_iso_movesパラメータを指定しない場合は、Spatial and Graphで、孤立ノードまたは孤立エッジを別のフェイスに移動するノードの移動操作を実行でき、また、これらの孤立ノードおよび孤立エッジを含むフェイスの情報が調整されます。

使用上の注意

ノードを移動する方法の詳細は、「ノードの移動」を参照してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のmoveNodeメソッドを使用する場合と同じです。

次の例では、ノードN3を移動して、このノードに接する唯一のエッジの座標を調整します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

-- Move node N3 to right: from 25,35 to 26,35.
-- E3 is changed from 25,30 -> 25,35 to 25,30 -> 26,35.
CALL SDO_TOPO_MAP.MOVE_NODE(null, 3,
  SDO_EDGE_ARRAY(SDO_NUMBER_ARRAY(25,30, 26,35)));

4.43 SDO_TOPO_MAP.REMOVE_EDGE

構文

SDO_TOPO_MAP.REMOVE_EDGE(     
  topology IN VARCHAR2,      
  edge_id  IN NUMBER);

説明

トポロジからエッジを削除します。

パラメータ

topology

エッジを削除するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

edge_id

削除するエッジのエッジIDを指定します。

使用上の注意

topologyがNULLではない場合、Spatial and Graphは自動的に<topology-name>_EDGE$表および<topology-name>_FACE$表の適切なエントリを更新します。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)

トポロジからエッジを削除する方法の詳細は、「エッジの削除」を参照してください。

次の例では、現行の更新可能なTopoMapオブジェクトから、エッジID値が99のエッジを削除します。

CALL SDO_TOPO_MAP.REMOVE_EDGE(null, 99);

4.44 SDO_TOPO_MAP.REMOVE_NODE

構文

SDO_TOPO_MAP.REMOVE_NODE(     
  topology IN VARCHAR2,      
  node_id  IN NUMBER);

説明

トポロジからノードを削除します。

パラメータ

topology

ノードを削除するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

node_id

削除するノードのノードIDを指定します。

使用上の注意

topologyがNULLではない場合、Spatial and Graphは自動的に<topology-name>_NODE$表および<topology-name>_EDGE$表の適切なエントリを更新し、必要に応じて<topology-name>_FACE$表の適切なエントリも更新します。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)

トポロジからノードを削除する方法の詳細は、「ノードの削除」を参照してください。

次の例では、現行の更新可能なTopoMapオブジェクトから、ノードID値が500のノードを削除します。

CALL SDO_TOPO_MAP.REMOVE_NODE(null, 500);

4.45 SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES

構文

SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES(     
  topology  IN VARCHAR2);

説明

トポロジから不要ノードを削除します。(不要ノードの詳細は、「不要ノードの削除」を参照してください。)

パラメータ

topology

不要ノードを削除するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

使用上の注意

トポロジから不要ノードを削除する方法の詳細は、「不要ノードの削除」を参照してください。

次の例では、現行の更新可能なTopoMapオブジェクトから不要ノードをすべて削除します。

CALL SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES(null);

4.46 SDO_TOPO_MAP.ROLLBACK_TOPO_MAP

構文

SDO_TOPO_MAP.ROLLBACK_TOPO_MAP;

説明

現行の更新可能なTopoMapオブジェクトを使用して行われた、データベースに対するすべての変更をロールバックします。また、オブジェクトでの変更を廃棄し、オブジェクトのキャッシュ構造を消去して、オブジェクトを読取り専用に設定します。

パラメータ

なし。

使用上の注意

このプロシージャは、トポロジの一連の編集が終了した後で、データベースに対するすべての変更およびキャッシュ内のすべての変更を廃棄する(コミットしない)場合に使用します。ロールバック操作の完了後に、TopoMapオブジェクトを編集することはできません。完了後にトポロジを編集するには、SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャを使用して更新用に同じTopoMapオブジェクトにトポロジをロードするか、またはSDO_TOPO_MAP.CREATE_TOPO_MAPプロシージャを使用して新しいTopoMapオブジェクトを作成し、更新用にそのTopoMapオブジェクトにトポロジをロードします。

TopoMapオブジェクトのすべての変更をコミットするには、SDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャを使用します。

インメモリー・キャッシュを使用して位相要素を編集する方法の詳細は、「トポロジ・データを編集する方法」を参照してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のrollbackDBメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトに関連付けられたすべての変更をデータベースからロールバックします。

EXECUTE SDO_TOPO_MAP.ROLLBACK_TOPO_MAP;

4.47 SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP

構文

SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP(     
  topo_map IN VARCHAR2,      
  xmin     IN NUMBER,      
  ymin     IN NUMBER,      
  xmax     IN NUMBER,      
  ymax     IN NUMBER,      
  capacity IN NUMBER      
) RETURN SDO_NUMBER_ARRAY;

説明

指定した問合せウィンドウと相互作用するエッジのエッジID番号を示す配列を戻します。問合せでは、指定したTopoMapオブジェクトに作成されているエッジのRツリーを使用します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

xmin

問合せウィンドウの左下のX座標値を指定します。

ymin

問合せウィンドウの左下のY座標値を指定します。

xmax

問合せウィンドウの右上のX座標値を指定します。

ymax

問合せウィンドウの右上のY座標値を指定します。

capacity

戻すエッジID値の最大数を指定します。0(ゼロ)または負の数値を指定すると、100が使用されます。

使用上の注意

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のsearchEdgeRTreeメソッドを使用する場合と同じです。

次の例では、左下の角が(5,5)で右上の角が(30,40)の問合せウィンドウと相互作用するエッジのエッジID番号(最大200)を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP('CITY_DATA_TOPOMAP', -
  5,5, 30,40, 200) FROM DUAL;
 
SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP('CITY_DATA_TOPOMAP',5,5,30,40,200)      
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(12, 13, 22, 20, 9, 21, 19, 6, 10, 7, 26, 3, 1, 25, 2)

4.48 SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP

構文

SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP(     
  topo_map IN VARCHAR2,      
  xmin     IN NUMBER,      
  ymin     IN NUMBER,      
  xmax     IN NUMBER,      
  ymax     IN NUMBER,      
  capacity IN NUMBER      
) RETURN SDO_NUMBER_ARRAY;

説明

指定した問合せウィンドウと相互作用するフェイスのフェイスID番号の配列を戻します。問合せでは、指定したTopoMapオブジェクトに作成されたフェイスのRツリーを使用します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

xmin

問合せウィンドウの左下のX座標値を指定します。

ymin

問合せウィンドウの左下のY座標値を指定します。

xmax

問合せウィンドウの右上のX座標値を指定します。

ymax

問合せウィンドウの右上のY座標値を指定します。

capacity

戻すフェイスID値の最大数を指定します。0(ゼロ)または負の数値を指定すると、100が使用されます。

使用上の注意

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のsearchFaceRTreeメソッドを使用する場合と同じです。

次の例では、左下の角が(5,5)で右上の角が(30,40)の問合せウィンドウと相互作用するフェイスのフェイスID番号(最大200)を戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

SELECT SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP('CITY_DATA_TOPOMAP', -
  5,5, 30,40, 200) FROM DUAL;
 
SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP('CITY_DATA_TOPOMAP',5,5,30,40,200)      
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(6, 7, 3, 4, 9, 1, 2)

4.49 SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE

構文

SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE(     
  maxsize IN NUMBER DEFAULT 268435456);

説明

Oracle Java仮想マシンで実行するアプリケーション用の最大Javaヒープ・サイズを設定します。

パラメータ

maxsize

最大Javaヒープ・サイズのバイト数を指定します。デフォルト値は268435456(256MB)です。

使用上の注意

java.lang.OutOfMemoryError例外が発生した場合は、このプロシージャを使用して、最大ヒープ・サイズを増やすことができます。

システムの上限より大きな値を指定すると、システムの上限値が使用されます。

次の例では、最大Javaヒープ・サイズを536870912(512MB)に設定します。

EXECUTE SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE(536870912);

4.50 SDO_TOPO_MAP.UPDATE_TOPO_MAP

構文

SDO_TOPO_MAP.UPDATE_TOPO_MAP;

説明

トポロジを更新して、現行の更新可能なTopoMapオブジェクトに対して行われた編集を反映します。

パラメータ

なし。

使用上の注意

このプロシージャは、編集セッション中、定期的にトポロジを更新する場合に使用します(「キャッシュを明示的に使用した編集処理(PL/SQL API)」を参照)。エッジ情報表、フェイス情報表およびノード情報表への更新は必要に応じて行われます(「トポロジ・データ・モデル表」を参照)。TopoMapオブジェクトは、追加の編集操作のためにオープンしたままになります。SDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャをコールするまで、更新がデータベースに実際にコミットされることはありません。

このプロシージャは、トポロジを更新する前に、TopoMapオブジェクトに対してレベル0の検証を実行します。(詳細は、SDO_TOPO_MAP.VALIDATE_TOPO_MAPファンクションのlevelパラメータの説明を参照してください。)

TopoMapオブジェクトのロード時にインメモリーRツリー索引を作成した場合(SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャでbuild_indexesパラメータにTRUEを指定するか、またはデフォルト値を受け入れた場合)、SDO_TOPO_MAP.CREATE_EDGE_INDEXプロシージャおよびSDO_TOPO_MAP.CREATE_FACE_INDEXプロシージャを使用して、これらの索引を再作成できます。索引のパフォーマンスを最適化するには、位相要素を数多く編集したときに、これらの索引を定期的に再作成する必要があります。

このプロシージャは、指定したTopoMapオブジェクトに関連付けられたキャッシュをクリアして、オブジェクトを読取り専用に設定するSDO_TOPO_MAP.CLEAR_TOPO_MAPプロシージャとは対照的です。

TopoMapオブジェクトのすべての変更をコミットするには、SDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャを使用します。

インメモリー・キャッシュを使用して位相要素を編集する方法の詳細は、「トポロジ・データを編集する方法」を参照してください。

このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のupdateTopologyメソッドを使用する場合と同じです。

次の例では、現行の更新可能なTopoMapオブジェクトに関連付けられたトポロジを更新して、このオブジェクトに対して行われた変更を反映させます。

EXECUTE SDO_TOPO_MAP.UPDATE_TOPO_MAP;

4.51 SDO_TOPO_MAP.VALIDATE_TOPO_MAP

構文

SDO_TOPO_MAP.VALIDATE_TOPO_MAP(     
  topo_map IN VARCHAR2,      
  level    IN NUMBER DEFAULT 1      
) RETURN VARCHAR2;

説明

TopoMapオブジェクトの1次検証を実行し、オプション(デフォルト)で計算ジオメトリも確認します。TopoMapオブジェクトの位相要素の構造に一貫性がある場合は文字列TRUEを戻し、一貫性がない場合は例外が発生します。

パラメータ

topo_map

TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

level

1次検証の一環として、次の事項を確認するには0(ゼロ)を指定します。

  • すべてのフェイスが閉じられており、無限ループが存在しない。

  • 前後のすべてのエッジ・ポインタに一貫性がある。

  • すべてのエッジがノードに接続されている。

  • 各孤立ノードがフェイスに関連付けられている。

  • フェイスの境界上のすべてのエッジが、フェイスに関連付けられている。

0を指定した場合のすべての事項と、計算ジオメトリに関連する次の事項を確認するには1(デフォルト)を指定します。

  • 各孤立要素が、関連付けられたフェイスの境界内に存在する。

  • エッジが、それ自体または別のエッジと交差していない。

  • エッジの開始座標および終了座標が、ノードの座標と一致している。

  • ノード・スターが幾何学的に適切に順序付けされている。

使用上の注意

このファンクションは、エッジ、ノードおよびフェイス間のすべてのポインタの関係について一貫性を確認します。このファンクションを使用して、(SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャを使用して)トポロジを更新する前に更新可能なTopoMapオブジェクトを検証したり、問合せを発行する前に読取り専用のTopoMapオブジェクトを検証することができます。

このファンクションは、内部計算に許容差10E-15を使用します(「トポロジ・データ・モデルの許容差」を参照)。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のvalidateCacheメソッドを使用する場合と同じです。

次の例では、CITY_DATA_TOPOMAPという名前のTopoMapオブジェクトのトポロジを検証します。この例では、トポロジが有効であることを示す結果が戻されます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.VALIDATE_TOPO_MAP('CITY_DATA_TOPOMAP') INTO :res_varchar;
 
Call completed.
 
PRINT res_varchar;
 
RES_VARCHAR
--------------------------------------------------------------------------------
TRUE

4.52 SDO_TOPO_MAP.VALIDATE_TOPOLOGY

構文

SDO_TOPO_MAP.VALIDATE_TOPOLOGY(     
  topology  IN VARCHAR2,      
) RETURN VARCHAR2;

または

SDO_TOPO_MAP.VALIDATE_TOPOLOGY(
  topology         IN VARCHAR2,
  prevent_updates  IN VARCHAR2,
  level            IN NUMBER DEFAULT 1      
) RETURN VARCHAR2;

または

SDO_TOPO_MAP.VALIDATE_TOPOLOGY(
  topology  IN VARCHAR2,
  xmin      IN NUMBER,
  ymin      IN NUMBER,  
  xmax      IN NUMBER,
  ymax      IN NUMBER      
) RETURN VARCHAR2;

または

SDO_TOPO_MAP.VALIDATE_TOPOLOGY(
  topology  IN VARCHAR2,
  xmin      IN NUMBER,
  ymin      IN NUMBER,  
  xmax      IN NUMBER,
  ymax      IN NUMBER      
) RETURN VARCHAR2;

説明

トポロジ全体またはトポロジのウィンドウ(矩形部分)を、TopoMapオブジェクトにロードします。トポロジの構造に一貫性がある場合は文字列TRUEを戻し、一貫性がない場合は例外が発生します。

パラメータ

topology

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

xmin

検証するウィンドウ(トポロジの矩形部分)の左下のX座標値を指定します。

ymin

検証するウィンドウ(トポロジの矩形部分)の左下のY座標値を指定します。

xmax

検証するウィンドウ(トポロジの矩形部分)の右上のX座標値を指定します。

ymax

検証するウィンドウ(トポロジの矩形部分)の右上のY座標値を指定します。

prevent_updates

検証の実行中に、他のユーザーがトポロジを更新できないようにするにはTRUEを指定します。検証の実行中に、他のユーザーがトポロジを更新できるようにするにはFALSEを指定します。FALSEを指定した場合、他のユーザーによって検証の実行中に行われたトポロジの変更は、このファンクションでは考慮されず、結果にも影響しません。

level

次の事項を確認するには0(ゼロ)を指定します。

  • すべてのフェイスが閉じられており、無限ループが存在しない。

  • 前後のすべてのエッジ・ポインタに一貫性がある。

  • すべてのエッジがノードに接続されている。

  • 各孤立ノードがフェイスに関連付けられている。

  • フェイスの境界上のすべてのエッジが、フェイスに関連付けられている。

0を指定した場合のすべての事項と、計算ジオメトリに関連する次の事項を確認するには1(デフォルト)を指定します。

  • 各孤立要素が、関連付けられたフェイスの境界内に存在する。

  • エッジが、それ自体または別のエッジと交差していない。

  • エッジの開始座標および終了座標が、ノードの座標と一致している。

  • ノード・スターが幾何学的に適切に順序付けされている。

使用上の注意

このファンクションは、TopoMapオブジェクトを暗黙的に作成し、検証の完了後、削除します。(TopoMapオブジェクトの詳細は、「TopoMapオブジェクト」を参照してください。)

このファンクションは、内部計算に許容差10E-15を使用します(「トポロジ・データ・モデルの許容差」を参照)。

次の例では、CITY_DATAという名前のトポロジを検証します。この例では、トポロジが有効であることを示す結果が戻されます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

CALL SDO_TOPO_MAP.VALIDATE_TOPOLOGY('CITY_DATA') INTO :res_varchar;
 
Call completed.
 
PRINT res_varchar;
 
RES_VARCHAR
--------------------------------------------------------------------------------
TRUE