MDSYS.SDO_TOPO_MAPパッケージには、Spatialのトポロジ・データ・モデル用のPL/SQL Application Program Interface(API)の一部を構成するサブプログラム(ファンクションおよびプロシージャ)が含まれています。このパッケージには、トポロジの編集に関連するサブプログラムが含まれています。これらのサブプログラムでは、事前に作成したTopoMapオブジェクト、またはSpatialによって暗黙的に作成されたTopoMapオブジェクトのいずれかが使用されます。
この章で説明するサブプログラムを使用する場合は、トポロジの概念(第1章を参照)およびトポロジの編集方法(第2章を参照)を理解しておく必要があります。
この章では、SDO_TOPO_MAPサブプログラムのリファレンス情報をアルファベット順に説明します。
構文
SDO_TOPO_MAP.ADD_EDGE(
topology IN VARCHAR2,
node_id1 IN NUMBER,
node_id2 IN NUMBER,
geom IN SDO_GEOMETRY
) RETURN NUMBER;
パラメータ
エッジを追加するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
追加するエッジの開始ノードのノードIDを指定します。
追加するエッジの終了ノードのノードIDを指定します。
追加するエッジを表すSDO_GEOMETRYオブジェクト(線または連続線ストリング・ジオメトリ)を指定します。
使用上の注意
Spatialは、追加されたエッジに自動的にエッジIDを割り当てます。topology
がNULLではない場合、適切なエントリが<topology-name>_EDGE$表に挿入されます。また、エッジの追加がフェイス情報表に影響を及ぼす場合は、<topology-name>_FACE$表内の適切なエントリが更新されます。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)
node_id1
とnode_id2
に同じ値を指定した場合、ループ・エッジが作成されます。
ノードとエッジを追加および削除する方法の詳細は、第2章を参照してください。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のaddEdge
メソッドを使用する場合と同じです。
例
次の例では、現行の更新可能なTopoMapオブジェクトに、ノードN3とノードN4を結ぶエッジを追加します。(この例では、1.12.1項の定義およびデータを参照しています。)
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
構文
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;
パラメータ
孤立ノードを追加するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
孤立ノードを追加するフェイスのフェイスIDを指定します。(指定した点が指定したフェイス上に存在しない場合は、例外が発生します。)
追加する孤立ノードを表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。
追加する孤立ノードを表す点のX軸値を指定します。
追加する孤立ノードを表す点のY軸値を指定します。
使用上の注意
Spatialは、追加されたノードに自動的にノード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ファンクションを使用します。
ノードとエッジを追加および削除する方法の詳細は、第2章を参照してください。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のaddIsolatedNode
メソッドを使用する場合と同じです。
例
次の例では、フェイスF2上の孤立ノードN4の右に孤立ノードを追加して、追加したノードのノードIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、1.12.1項の定義およびデータを参照しています。)
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.
構文
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の配列(ジオメトリの開始から終了までの順序で配列)に基づいて行われます。
パラメータ
エッジを追加するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
追加するエッジを表すSDO_GEOMETRYオブジェクト(曲線または線ストリング・ジオメトリ)を指定します。
追加するエッジの座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。
使用上の注意
このファンクションは、少なくとも1つの新しいエッジを作成し、必要に応じて複数の新しいエッジを作成します。たとえば、線ストリング・ジオメトリが既存のエッジと交差している場合、追加された線ストリングに対して2つのエッジが作成され、既存のエッジ(交差されたエッジ)は2つのエッジに分割されます。topology
がNULLではない場合、Spatialは必要に応じて自動的に<topology-name>_EDGE$表を更新します。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこの表を更新できます。)
このファンクションは、挿入後に共有されているエッジのエッジIDの配列を、ジオメトリの開始から終了までの順序で戻します。追加されたジオメトリのセグメントがトポロジ内の既存のエッジと重なった場合、戻されるエッジの符号は、追加されたセグメントと既存のエッジの方向によって決定されます。既存のエッジの方向が線形ジオメトリと同じである場合、戻されるエッジ要素は正になります。既存のエッジの方向が線形ジオメトリと反対である場合、戻されるエッジ要素は負になります。
curve
パラメータまたはcoords
パラメータで指定されているオブジェクトで線セグメントが重なっている場合は、例外が発生します。ただし、線セグメントは1つ以上の点で交差できます。
ノードとエッジを追加および削除する方法の詳細は、第2章を参照してください。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のaddLinearGeometry
メソッドを使用する場合と同じです。
例
次の例では、指定した線ストリング・ジオメトリを表すエッジを追加し、追加されたエッジのエッジIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
構文
SDO_TOPO_MAP.ADD_LOOP(
topology IN VARCHAR2,
node_id IN NUMBER,
geom IN SDO_GEOMETRY
) RETURN NUMBER;
パラメータ
エッジを追加するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
エッジを追加するノードのノードIDを指定します。エッジは、このノードで開始および終了します。
追加するエッジを表すSDO_GEOMETRYオブジェクト(線ストリング・ジオメトリ)を指定します。線ストリングの開始点および終了点は、node_id
を表す点と同じである必要があります。
使用上の注意
このファンクションは、新しいエッジを作成し、ループの内部で構成される新しいフェイスも作成します。エッジを孤立ノードに追加した場合、そのエッジは孤立エッジになります。topology
がNULLではない場合、Spatialは必要に応じて自動的に<topology-name>_EDGE$表および<topology-name>_FACE$表を更新します。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)
ノードとエッジを追加および削除する方法の詳細は、第2章を参照してください。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のaddLoop
メソッドを使用する場合と同じです。
例
次の例では、ノードN4で開始および終了するエッジ・ループを追加して、追加したエッジのエッジIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、1.12.1項の定義およびデータを参照しています。)
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
構文
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;
パラメータ
ノードを追加するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
ノードを追加するエッジのエッジIDを指定します。
追加するノードを表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。点は、既存の形状点であるか、または2つの連続する形状点を結ぶ線セグメントを分割する新しい点である必要があります。
追加するノードを表す点のX軸値を指定します。点は、既存の形状点であるか、または2つの連続する形状点を結ぶ線セグメントを分割する新しい点である必要があります。
追加するノードを表す点のY軸値を指定します。点は、既存の形状点であるか、または2つの連続する形状点を結ぶ線セグメントを分割する新しい点である必要があります。
エッジの座標配列内で、ノードがその位置またはその位置の後ろに追加される配列位置のインデックス(位置)を指定します。各頂点(ノードまたは形状点)の位置を、エッジの座標配列内に含めます。開始点(ノード)はインデックス(位置) 0、開始点の次の点は1のようになります。(ただし、coord_index
値に最後の頂点のインデックスを指定することはできません。)たとえば、エッジ座標が(2,2, 5,2, 8,3)の場合、2つ目の頂点(5,2)のインデックスは1になります。
追加したノードを、エッジのインデックス付けされた頂点(coord_index
値)に続く新しい形状点にする場合はTRUE
、インデックス付けされた頂点上に配置する場合はFALSE
を指定します。
値にTRUE
を指定すると、新しい点にノードを追加でき、point
パラメータまたはx
とy
のパラメータの組合せにより指定した座標でエッジ・セグメントが分割されます。値にFALSE
を指定すると、point
パラメータまたはx
とy
のパラメータの組合せで指定した座標は無視され、coord_index
値に関連付けられた既存の形状点にノードが追加されます。
使用上の注意
Spatialは、追加されたノードに自動的にノードIDを割り当て、新しいエッジを作成します。元のエッジの開始側にある分割されたエッジには、元のエッジのエッジIDが割り当てられます。topology
がNULLではない場合、適切なエントリが<topology-name>_NODE$表および<topology-name>_EDGE$表に挿入されます。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)
孤立ノードを追加するには、SDO_TOPO_MAP.ADD_ISOLATED_NODEファンクションを使用します。
ノードとエッジを追加および削除する方法の詳細は、第2章を参照してください。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のaddNode
メソッドを使用する場合と同じです。
例
次の例では、エッジE2上のノードN2の右に連結ノードを追加して、追加したノードのノードIDを戻します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、1.12.1項の定義およびデータを参照しています。)
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.
構文
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;
パラメータ
ノードを追加するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
追加するノードを表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。
追加するノードの座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。
使用上の注意
点が既存のノードと一致する場合、トポロジは変更されません。一致しない場合は、孤立ノードまたはエッジを分割するノードが追加されます。
ノードとエッジを追加および削除する方法の詳細は、第2章を参照してください。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)の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
構文
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;
パラメータ
フェイスを追加するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
追加するフェイスを表すSDO_GEOMETRYオブジェクト(ポリゴン・ジオメトリまたは複数のポリゴンで構成されるジオメトリ)を指定します。オブジェクトの各ポリゴンには、任意の数の内部リングを含めることのできる外部リングが1つ必要です。
追加されるフェイスを表す1つのポリゴン・ジオメトリの座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。ポリゴンの頂点は反時計周りで示され、最後の頂点が最初の頂点と同じになる必要があります。
使用上の注意
このファンクションは、少なくとも1つの新しいフェイスを作成し、必要に応じて複数の新しいフェイスを作成します。たとえば、ポリゴン・ジオメトリが既存のフェイスと交差している場合、追加されたポリゴンに対してフェイスが作成され、既存のフェイス(交差されたフェイス)の定義が調整されます。topology
がNULLではない場合、Spatialは必要に応じて自動的に<topology-name>_FACE$を更新します。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこの表を更新できます。)
ポリゴンが既存のフェイスと一致する場合、トポロジは変更されません。
複数のポリゴンで構成されるジオメトリの場合は、外部リングを別の外部リングに重ねることはできません。たとえば、公園(外部リング)の中に池(内部リング)がありその池の中に島(前述の内部リング内にある外部リング)が含まれているような、複数のポリゴンで構成される単一のジオメトリを表すフェイスを追加することはできません。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)の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
構文
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);
パラメータ
エッジが含まれるトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
座標を変更するエッジのエッジIDを指定します。
変更されたエッジを表すSDO_GEOMETRYオブジェクト(線または連続線ストリング・ジオメトリ)を指定します。変更されたエッジの開始点および終了点は、元のエッジの開始点および終了点と同じである必要があります。
allow_iso_moves
パラメータ値がTRUE
の場合、Spatialによって、このプロシージャの結果として別のフェイスに移動された孤立ノードのノードID値が格納される出力パラメータです。allow_iso_moves
パラメータ値がFALSE
の場合、Spatialによって、実際には移動されなかったが、allow_iso_moves
パラメータ値がTRUE
だった場合は別のフェイスに移動されていたはずの孤立ノードのノードID値が格納されます。
allow_iso_moves
パラメータ値がTRUE
の場合、Spatialによって、このプロシージャの結果として別のフェイスに移動された孤立エッジのエッジID値が格納される出力パラメータです。allow_iso_moves
パラメータ値がFALSE
の場合、Spatialによって、実際には移動されなかったが、allow_iso_moves
パラメータ値がTRUE
だった場合は別のフェイスに移動されていたはずの孤立エッジのエッジID値が格納されます。
True
を指定すると、Spatialで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジ座標の変更操作を実行し、これらの孤立ノードおよび孤立エッジを含むフェイスの情報を調整できます。False
を指定すると、Spatialで、孤立ノードまたは孤立エッジを移動するエッジ座標の変更操作を実行できません。
allow_iso_moves
パラメータを指定しない場合は、Spatialで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作を実行できます。また、これらの孤立ノードおよび孤立エッジを含むフェイスの情報が調整されます。
使用上の注意
このプロシージャによってフェイス間の境界が変更される場合、Spatialは、自動的に、孤立ノードおよび孤立フェイスを再度割り当て、両側のフェイスのMBRを調整し、必要に応じてトポロジ・データ・モデル表を更新します。
topology
がNULLではない場合、このプロシージャは、<topology-name>_EDGE$表(1.5.1項を参照)の指定されたエッジに関する情報を変更します。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこの表を更新できます。)
このプロシージャを使用して、指定したエッジの開始点または終了点(あるいはその両方)を変更することはできません。これらの操作を実行するには、エッジを削除して、変更する開始点または終了点(あるいはその両方)のノードを削除してから、必要な新しいノードを追加し、エッジを追加する必要があります。
位相要素を編集する方法の詳細は、第2章を参照してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のchangeEdgeCoords
メソッドを使用する場合と同じです。
例
次の例では、エッジE1の座標を変更します。(3つ目の点のみを、16,38から16,39に変更します。)ここでは、現行の更新可能なTopoMapオブジェクトを使用します。(この例では、1.12.1項の定義およびデータを参照しています。)
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)));
使用上の注意
TopoMapオブジェクトが更新可能な場合、このプロシージャはそのオブジェクトを読取り専用に変更します。
メモリー内キャッシュを使用して位相要素を編集する方法の詳細は、2.1項を参照してください。
このプロシージャは、TopoMapオブジェクトに関連付けられたキャッシュ内の変更をトポロジに適用するSDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャとは対照的です。指定したTopoMapオブジェクトにSDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャを使用した後で、SDO_TOPO_MAP.CLEAR_TOPO_MAPプロシージャをコールすることはできません。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のclearCache
メソッドを使用する場合と同じです。
例
次の例では、CITY_DATA
という名前のトポロジに関連するCITY_DATA_TOPOMAP
という名前のTopoMapオブジェクトに関連付けられたキャッシュをクリアします。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.CLEAR_TOPO_MAP('CITY_DATA_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プロシージャを使用します。
メモリー内キャッシュを使用して位相要素を編集する方法の詳細は、2.1項を参照してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のcommitDB
メソッドを使用する場合と同じです。
使用上の注意
メモリー内Rツリー索引が、指定したTopoMapオブジェクトのエッジおよびフェイスに作成されるようにSpatialを設定できます。これらの索引では、メモリー・リソースがいくらか消費され、索引の作成に時間がかかりますが、セッションで多くの位相要素を編集する場合は、これらの索引によってパフォーマンスが大幅に向上します。また、読取り専用のTopoMapオブジェクトを使用する問合せのパフォーマンスも向上します。TopoMapオブジェクトが更新可能であり、多くの編集操作を実行している場合は、索引を定期的に再作成することをお薦めします。ただし、TopoMapオブジェクトが更新されない場合は、読取り専用のTopoMapオブジェクトのロード時またはロード後、あるいはSDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャのコール後に、索引を作成してください。
TopoMapオブジェクトに関連付けられたキャッシュ内で、フェイスの内部Rツリー索引を作成する(すでに存在する場合は、再作成する)SDO_TOPO_MAP.CREATE_FACE_INDEXプロシージャと比較してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のcreateEdgeIndex
メソッドを使用する場合と同じです。
例
次の例では、CITY_DATA
という名前のトポロジに関連するCITY_DATA_TOPOMAP
という名前のTopoMapオブジェクトに関連付けられたキャッシュ内で、エッジの内部Rツリー索引を作成します(すでに存在する場合は、再作成します)。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.CREATE_EDGE_INDEX('CITY_DATA_TOPOMAP');
使用上の注意
メモリー内Rツリー索引が、指定したTopoMapオブジェクトのエッジおよびフェイスに作成されるようにSpatialを設定できます。これらの索引では、メモリー・リソースがいくらか消費され、索引の作成に時間がかかりますが、セッションで多くの位相要素を編集する場合は、これらの索引によってパフォーマンスが大幅に向上します。また、読取り専用のTopoMapオブジェクトを使用する問合せのパフォーマンスも向上します。TopoMapオブジェクトが更新可能であり、多くの編集操作を実行している場合は、索引を定期的に再作成することをお薦めします。ただし、TopoMapオブジェクトが更新されない場合は、読取り専用のTopoMapオブジェクトのロード時またはロード後、あるいはSDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャのコール後に、索引を作成してください。
TopoMapオブジェクトに関連付けられたキャッシュ内で、エッジの内部Rツリー索引を作成する(すでに存在する場合は、再作成する)SDO_TOPO_MAP.CREATE_EDGE_INDEXプロシージャと比較してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のcreateFaceIndex
メソッドを使用する場合と同じです。
例
次の例では、CITY_DATA
という名前のトポロジに関連するCITY_DATA_TOPOMAP
という名前のTopoMapオブジェクトに関連付けられたキャッシュ内で、フェイスの内部Rツリー索引を作成します(すでに存在する場合は、再作成します)。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.CREATE_FACE_INDEX('CITY_DATA_TOPOMAP');
構文(トポロジ・ジオメトリ・レイヤー階層を使用しない場合または階層の最下位レベルを使用する場合)
SDO_TOPO_MAP.CREATE_FEATURE(
topology IN VARCHAR2,
table_name IN VARCHAR2,
column_name IN VARCHAR2,
geom IN SDO_GEOMETRY
) 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のジオメトリからフィーチャを作成します。(このファンクションは、フィーチャ表に行を挿入するために使用します。)
(geom
パラメータを使用し、dml_condition
パラメータを使用しない)最初の構文は、トポロジ・ジオメトリ・レイヤー階層を使用せずにトポロジ内にフィーチャを作成するか、またはトポロジ・ジオメトリ・レイヤー階層を使用してトポロジの最下位レベルにフィーチャを作成します。
(dml_condition
パラメータを使用し、geom
パラメータを使用しない)2番目の構文は、トポロジ・ジオメトリ・レイヤー階層を使用して、トポロジの親レベルにフィーチャを作成します。
パラメータ
関連付けの行われている指定したフィーチャ表およびフィーチャ列を含むトポロジを指定します。
column_name
で指定したフィーチャ列を含むフィーチャ表の名前を指定します。
トポロジ・ジオメトリを含む(SDO_TOPO_GEOMETRY型の)フィーチャ列の名前を指定します。
ジオメトリ・オブジェクトを指定します。
トポロジ・ジオメトリ・レイヤー階層を使用するトポロジ(1.4項を参照)の場合は、子レイヤーから親レイヤーに挿入する行を選択するためのDML条件を指定します。引用符付き文字列で条件を指定します。ただし、WHEREという単語は使用しません。たとえば、STATE_ABBR列値がMA
の行のみを選択するには、'state_abbr=''MA'''
と指定します。
使用上の注意
このファンクションは、空間表に格納されている既存のジオメトリからフィーチャを作成するために使用します。既存のジオメトリからのフィーチャの作成は、トポロジのフィーチャを作成する方法の1つです。他に、ノード情報表、エッジ情報表およびフェイス情報表にトポロジ・データをロードする方法もあります。どちらの方法についても、次の項を含む1.1項を参照してください。
1.1.2項「空間ジオメトリから作成したトポロジの使用」(CREATE_FEATUREファンクションを使用する方法)
このファンクションの最初の構文を使用する場合は、最初に更新可能なTopoMapオブジェクトを作成してロードする必要があります。トポロジのフィーチャまたは関連付けられた位相要素を作成するために、このファンクションは、ジオメトリ・オブジェクトのSDO_GTYPE値に応じて、更新可能なTopoMapオブジェクトのaddPointGeometry
メソッド、addLinearGeometry
メソッドまたはaddPolygonGeometry
メソッドを内部的にコールし、次に更新可能なTopoMapオブジェクトのupdateTopology
メソッドをコールして位相要素をデータベースに書き込みます。このファンクションがINSERT文またはUPDATE文でコールされると、フィーチャ表内でフィーチャの作成または更新が行われます。ファンクションが完了すると、トポロジにジオメトリのオーバーレイが行われます。(つまり、Spatialは暗黙的に作成されたTopoMapオブジェクトを使用して、このファンクションへの各コールに対して新しいTopoMapオブジェクトを作成します。)
このファンクションの2番目の構文を使用する場合は、更新可能なTopoMapオブジェクトを作成する必要がありません。このファンクションは、dml_condition
パラメータ値に基づいて子レベルのフィーチャのTG_ID値を内部的に収集し、SDO_TGL_OBJECT_ARRAYオブジェクトを組み合せてSDO_GEOMETRYオブジェクトを作成します。
このファンクションがすべてのジオメトリで正常に実行されるようにするには、各ジオメトリに対してループを使用してファンクションをコールします。このファンクションは、INSERT文またはUPDATE文の副問合せで使用しないでください。副問合せで使用すると、トポロジで不整合が発生し、さらにその不整合に関するエラー・メッセージや警告メッセージを受け取れない場合があります。
次の状態が1つ以上存在する場合は、例外が発生します。
topology
、table_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オブジェクトが作成され、ロードされていると想定しています。(この例では、1.12.2項の定義およびデータを参照しています。)
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;
構文
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);
パラメータ
トポロジの名前を指定します。名前は20文字以下である必要があります。
TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
任意の時点でTopoMapオブジェクトに存在すると想定されるエッジの最大数を指定します。このパラメータを指定しない場合、デフォルト値の100が使用されます。
任意の時点でTopoMapオブジェクトに存在すると想定されるノードの最大数を指定します。このパラメータを指定しない場合、デフォルト値の80が使用されます。
任意の時点でTopoMapオブジェクトに存在すると想定されるフェイスの最大数を指定します。このパラメータを指定しない場合、デフォルト値の30が使用されます。
使用上の注意
指定したTopoMapオブジェクトに関連付けられたキャッシュ内に格納されるエッジ、ノードまたはフェイス(あるいはこれらの組合せ)のおおまかな数を適切に判断できる場合、number_of_edges
、number_of_nodes
およびnumber_of_faces
パラメータを使用すると、プロシージャのパフォーマンスが向上し、メモリー使用量を低減できます。Spatialは、まず、各タイプの指定された数またはデフォルトの数のオブジェクトにメモリー・キャッシュを割り当て、より多くのオブジェクトを格納する必要がある場合は、後で割当てを段階的に増やします。
1回のユーザー・セッションに複数のTopoMapオブジェクトを作成できますが、1回のユーザー・セッションに存在できる更新可能なTopoMapオブジェクトは常に1つのみです。
メモリー内キャッシュを使用して位相要素を編集する方法の詳細は、2.1項を参照してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のコンストラクタをコールする場合と同じです。
例
次の例では、CITY_DATA_TOPOMAP
という名前のTopoMapオブジェクトおよびそれに関連付けられたキャッシュを作成して、そのTopoMapオブジェクトをCITY_DATA
という名前のトポロジに関連付けます。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.CREATE_TOPO_MAP('CITY_DATA', 'CITY_DATA_TOPOMAP');
使用上の注意
このプロシージャは、TopoMapオブジェクトが更新可能な場合、コミットされていない変更をロールバックします(SDO_TOPO_MAP.ROLLBACK_TOPO_MAP操作と同じ処理を実行します)。また、TopoMapオブジェクトに関連付けられたキャッシュをクリアして、セッションからTopoMapオブジェクトを削除します。
メモリー内キャッシュを使用して位相要素を編集する方法の詳細は、2.1項を参照してください。
このプロシージャの動作は、クライアント側のJavaアプリケーションで、TopoMapオブジェクトの変数をNULL値に設定した場合と同じです。(クライアント側のJava APIについては、1.8.2項を参照してください。)
例
次の例では、CITY_DATA_TOPOMAP
という名前のTopoMapオブジェクトを削除します。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.DROP_TOPO_MAP('CITY_DATA_TOPOMAP');
構文
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;
使用上の注意
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
このファンクションは、指定されたTopoMapオブジェクトのフェイス(孤立フェイスを含む)のうち、孤立要素を除外したオープン・セットに、指定された点が含まれるフェイスを判断します(存在する場合)。(孤立要素を除外したフェイスのオープン・セットは、フェイス内のすべての点で構成されますが、境界上の点は含みません。)点がフェイスの境界上にある場合、ファンクションは値0 (ゼロ)を戻します。
トポロジ全体がTopoMapオブジェクトにロードされており、点がキャッシュの有限フェイス内に存在しない場合、このファンクションは値-1(ユニバース・フェイス)を戻します。トポロジのウィンドウがTopoMapオブジェクトにロードされており、点がキャッシュの有限フェイス内に存在しない場合、このファンクションは、点がウィンドウ内に存在する場合は値-1(ユニバース・フェイス)を戻し、点がウィンドウの外部に存在する場合は値0(ゼロ)を戻します。トポロジ全体もウィンドウもロードされていない場合、このファンクションは0(ゼロ)を戻します。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetContainingFace
メソッドを使用する場合と同じです。
例
次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAP
の(22, 37)に存在する点を含むフェイスのフェイスID番号を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetEdgeAdditions
メソッドを使用する場合と同じです。
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetEdgeChanges
メソッドを使用する場合と同じです。
構文
SDO_TOPO_MAP.GET_EDGE_COORDS(
topology IN VARCHAR2,
topo_map IN VARCHAR2,
edge_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;
使用上の注意
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetEdgeCoords
メソッドを使用する場合と同じです。
例
次の例では、エッジID値が1のエッジの開始ノード、形状点および終了ノードの座標を戻します。戻される配列には、6つの点の座標が含まれます。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetEdgeDeletions
メソッドを使用する場合と同じです。
構文
SDO_TOPO_MAP.GET_EDGE_NODES(
topology IN VARCHAR2,
topo_map IN VARCHAR2,
edge_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;
使用上の注意
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
エッジが1つのノードで開始および終了する場合、そのノードのID番号が、配列の最初と最後の番号になります。
このファンクションと同等のメソッドは、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)には存在しません。getEdge
メソッドは、oracle.spatial.topo.Edge
クラスのJavaエッジ・オブジェクトを戻します。
例
次の例では、エッジID値が1のエッジ上に存在するノードのID番号を戻します。戻される配列には、2つのノードID番号が含まれます。指定したエッジはノードIDが1のノードで開始および終了するループ・エッジであるため、(同じノードに対する) 2つのノードID番号はいずれも1です。(この例では、1.12.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)
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetFaceAdditions
メソッドを使用する場合と同じです。
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetFaceChanges
メソッドを使用する場合と同じです。
構文
SDO_TOPO_MAP.GET_FACE_BOUNDARY(
topology IN VARCHAR2,
topo_map IN VARCHAR2,
face_id IN NUMBER
option IN NUMBER
) RETURN SDO_NUMBER_ARRAY;
パラメータ
フェイスを含むトポロジの名前またはNULL値(2.1.3項を参照)を指定します。名前は20文字以下である必要があります。
TopoMapオブジェクトの名前またはNULL値(2.1.3項を参照)を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
フェイスのフェイスID値を指定します。
境界を計算するためのオプションを示す数値の1つを指定します。0はスパーを使用しない(つまり二重にトレースされるエッジを使用しない)外部境界リング、1はスパーを使用しない外部リングおよび内部リング、2はスパーを使用した外部リングおよび内部リングを示します。値が2の場合、縮重する可能性はありますが、完全な境界が戻されます。
使用上の注意
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetFaceBoundary
メソッドを使用する場合と同じです。
例
次の例では、フェイスID値が3のフェイスの、スパーを使用しない外部境界リング内のエッジを戻します。戻される配列には、4つのエッジID値が含まれます。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetFaceDeletions
メソッドを使用する場合と同じです。
構文
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;
使用上の注意
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
最も近いエッジは、空間索引を使用して、データベース内のトポロジの表現から判断されます。インスタンスでエッジが変更、追加または削除された場合、データベースが更新されてこれらの変更が反映されないと、このファンクションの結果にTopoMapオブジェクト・キャッシュの実際の状況が反映されない場合があります。
点に最も近いエッジが複数ある場合、いずれかのエッジID値が戻されます。トポロジ内にエッジが存在しない場合、このファンクションは0(ゼロ)を戻します。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetNearestEdge
メソッドを使用する場合と同じです。
例
次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAP
の(8, 8)に存在する点に最も近いエッジのエッジID番号を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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
構文
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オブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
点を示すジオメトリ・オブジェクトを指定します。
点のX軸値を指定します。
点のY軸値を指定します。
使用上の注意
点に最も近いエッジが複数ある場合、いずれかのエッジID値が戻されます。トポロジ・データがロードされていない場合またはキャッシュ内にエッジが存在しない場合、このファンクションは0(ゼロ)を戻します。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetNearestEdgeInCache
メソッドを使用する場合と同じです。
例
次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAP
の(8, 8)に存在する点に最も近いエッジのエッジID番号を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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
構文
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;
使用上の注意
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
最も近いノードは、空間索引を使用して、データベース内のトポロジの表現から判断されます。インスタンスでノードが変更、追加または削除された場合、データベースが更新されてこれらの変更が反映されないと、このファンクションの結果にTopoMapオブジェクト・キャッシュの実際の状況が反映されない場合があります。
点に最も近いノードが複数ある場合、いずれかのノードID値が戻されます。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetNearestNode
メソッドを使用する場合と同じです。
例
次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAP
の(8, 8)に存在する点に最も近いノードのノードID番号を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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
構文
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オブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
点を示すジオメトリ・オブジェクトを指定します。
点のX軸値を指定します。
点のY軸値を指定します。
使用上の注意
点に最も近いノードが複数ある場合、いずれかのノードID値が戻されます。トポロジ・データがロードされていない場合またはキャッシュ内にノードが存在しない場合、このファンクションは0(ゼロ)を戻します。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetNearestNodeInCache
メソッドを使用する場合と同じです。
例
次の例では、TopoMapオブジェクトCITY_DATA_TOPOMAP
の(8, 8)に存在する点に最も近いノードのノードID番号を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetNodeAdditions
メソッドを使用する場合と同じです。
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetNodeChanges
メソッドを使用する場合と同じです。
構文
SDO_TOPO_MAP.GET_NODE_COORD(
topology IN VARCHAR2,
topo_map IN VARCHAR2,
node_id IN NUMBER
) RETURN SDO_GEOMETRY;
使用上の注意
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetNodeCoord
メソッドを使用する場合と同じです。
例
次の例では、ノードID値が14のノードの座標を示すジオメトリ・オブジェクトを戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
使用上の注意
このファンクションは、現行の更新可能な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
クラス(1.8.2項を参照)のgetNodeDeletions
メソッドを使用する場合と同じです。
構文
SDO_TOPO_MAP.GET_NODE_FACE_STAR(
topology IN VARCHAR2,
topo_map IN VARCHAR2,
node_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;
使用上の注意
ノードのノード・フェイス・スターは、ノードに接続されているフェイスを指します。ノードに接続されているエッジごとに1つのフェイスが戻されます。孤立ノードの場合は、孤立ノードを含むフェイスが戻されます。フェイスはリスト内に複数回出現する場合があります。
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetNodeFaceStar
メソッドを使用する場合と同じです。
ノードのノード・スターを戻すには、SDO_TOPO_MAP.GET_NODE_STARファンクションを使用します。
例
次の例では、ノードID値が14のノードのノード・フェイス・スターを戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
構文
SDO_TOPO_MAP.GET_NODE_STAR(
topology IN VARCHAR2,
topo_map IN VARCHAR2,
node_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;
使用上の注意
ノードのノード・スターは、ノードに接続されているエッジを指します。正のエッジIDは、ノードが開始ノードであるエッジを表します。負のエッジIDは、ノードが終了ノードであるエッジを表します。ノードにループが接続されている場合は、エッジが反対の符号を使用してリストに2回出現することがあります。
topology
またはtopo_map
パラメータには、有効な名前を指定する必要があります(2.1.3項を参照)。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のgetNodeStar
メソッドを使用する場合と同じです。
ノードのノード・フェイス・スターを戻すには、SDO_TOPO_MAP.GET_NODE_FACE_STARファンクションを使用します。
例
次の例では、ノードID値が14のノードのノード・スターを戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
例
次の例では、CITY_DATA_TOPOMAP
という名前のTopoMapオブジェクトに関連付けられたトポロジの名前を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
SELECT SDO_TOPO_MAP.GET_TOPO_NAME('CITY_DATA_TOPOMAP') FROM DUAL; SDO_TOPO_MAP.GET_TOPO_NAME('CITY_DATA_TOPOMAP') -------------------------------------------------------------------------------- CITY_DATA
使用上の注意
カンマで区切られたリストの各エントリには、TopoMapオブジェクトの名前、TopoMapオブジェクトに関連付けられたトポロジの名前、およびupdatable
(TopoMapオブジェクトが更新(編集)可能な場合)またはread-only
(TopoMapオブジェクトが更新不可の場合)のいずれかの情報が含まれます。
TopoMapオブジェクトの詳細(更新可能および読取り専用状態を含む)は、2.1.1項を参照してください。
セッションからTopoMapオブジェクトを削除するには、SDO_TOPO_MAP.DROP_TOPO_MAPプロシージャを使用します。
例
次の例では、セッションで現在アクティブな各TopoMapオブジェクトに対して、Topomapオブジェクト名、トポロジ名、およびオブジェクトが更新可能か読取り専用かを示します。(この例では、1.12.1項の定義およびデータを参照しています。)
SELECT SDO_TOPO_MAP.LIST_TOPO_MAPS FROM DUAL; LIST_TOPO_MAPS -------------------------------------------------------------------------------- (CITY_DATA_TOPOMAP, CITY_DATA, updatable)
構文(ファンクション)
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
を戻します。
パラメータ
TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
ロードするウィンドウ(トポロジの矩形部分)の左下のX座標値を指定します。
ウィンドウの指定時にロードされる位相要素については、「使用上の注意」および図4-1を参照してください。
ロードするウィンドウ(トポロジの矩形部分)の左下のY座標値を指定します。
ロードするウィンドウ(トポロジの矩形部分)の右上のX座標値を指定します。
ロードするウィンドウ(トポロジの矩形部分)の右上のY座標値を指定します。
TopoMapオブジェクトを更新可能(TopoMapオブジェクトでのトポロジの編集操作、および変更内容のデータベースへの書込みを可能)にするにはTRUE
を指定します。データベースに関してTopoMapオブジェクトを読取り専用(TopoMapオブジェクトでのトポロジの編集操作は可能であるが、変更内容のデータベースへの書込みを禁止)にするには、FALSE
を指定します。
TopoMapオブジェクトを更新可能にすると、TopoMapオブジェクト内の位相要素がロックされます。つまり、これらの位相要素を、別のデータベース・ユーザーのセッションで更新可能なTopoMapオブジェクトに含めることはできません(1回のユーザー・セッションでアクティブにできる更新可能なTopoMapオブジェクトは常に1つのみです)。
エッジおよびフェイスのデータにメモリー内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プロシージャを使用)する必要があります。
メモリー内キャッシュを使用して位相要素を編集する方法の詳細は、2.1項を参照してください。
このファンクションまたはプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のloadTopology
メソッドまたはloadWindow
メソッドを使用する場合と同じです。
TopoMapオブジェクトが、トポロジ全体のTopoMapオブジェクトであるか、またはxmin
、ymin
、xmax
およびymax
パラメータを使用して指定されたウィンドウのTopoMapオブジェクトであるかにかかわらず、すべてのTopoMapオブジェクトには、それに関連付けられた領域があります。更新可能なTopoMapオブジェクトの場合は、この領域内でのみ更新が可能です。(この領域には、直接更新できない位相要素が含まれている場合もありますが、ユーザーの編集操作の結果として、Oracle Spatialが必要に応じて変更する場合があります。)
TopoMapオブジェクトがロードされると、そのTopoMapオブジェクトの領域と交差するすべてのノード、フェイスおよびエッジがロードされます。フェイスがロードされると、フェイスの境界上にあるすべてのエッジおよびノードがロードされます。エッジがロードされると、エッジの開始ノードおよび終了ノードがロードされます。図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ツリー索引を作成します。この例では、操作が正常に実行され、一部の位相要素がキャッシュにロードされたことを示す結果が戻されます。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.LOAD_TOPO_MAP('CITY_DATA_TOPOMAP', 'TRUE') INTO :res_varchar; Call completed. PRINT res_varchar; RES_VARCHAR -------------------------------------------------------------------------------- TRUE
構文
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);
パラメータ
エッジの移動先となるトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
移動するエッジのエッジIDを指定します。
エッジの移動先の開始点から終了点までの座標の配列を指定します。
移動の影響を受ける点(エッジの開始ノードまたは終了ノード)の移動前の位置を示す、ソース・ノードのノードIDを指定します。たとえば、エッジE19の終了点をノードN17からN16に移動する場合、s_node_id
値には、ノードN17のノードID番号を指定します。
移動の影響を受ける点の移動後の位置を示す、ターゲット・ノードのノードIDを指定します。たとえば、エッジE19の終了点をノードN17からN16に移動する場合、t_node_id
値には、ノードN16のノードID番号を指定します。
allow_iso_moves
パラメータ値がTRUE
の場合、Spatialによって、このプロシージャの結果として別のフェイスに移動された孤立ノードのノードID値が格納される出力パラメータです。allow_iso_moves
パラメータ値がFALSE
の場合、Spatialによって、実際には移動されなかったが、allow_iso_moves
パラメータ値がTRUE
だった場合は別のフェイスに移動されていたはずの孤立ノードのノードID値が格納されます。
allow_iso_moves
パラメータ値がTRUE
の場合、Spatialによって、このプロシージャの結果として別のフェイスに移動された孤立エッジのエッジID値が格納される出力パラメータです。allow_iso_moves
パラメータ値がFALSE
の場合、Spatialによって、実際には移動されなかったが、allow_iso_moves
パラメータ値がTRUE
だった場合は別のフェイスに移動されていたはずの孤立エッジのエッジID値が格納されます。
True
を指定すると、Spatialで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作を実行し、これらの孤立ノードおよび孤立エッジを含むフェイスの情報を調整できます。False
を指定すると、Spatialで、孤立ノードまたは孤立エッジを移動するエッジの移動操作を実行できません。
allow_iso_moves
パラメータを指定しない場合は、Spatialで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作を実行できます。また、これらの孤立ノードおよび孤立エッジを含むフェイスの情報が調整されます。
使用上の注意
エッジを移動する方法の詳細は、2.3.2項を参照してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のmoveEdge
メソッドを使用する場合と同じです。
例
次の例では、エッジID値が19のエッジを移動し、移動の前後のエッジ座標を表示します。エッジの移動操作によって、エッジの終了点をノードID値が17のノードから16のノードに移動します。(移動するエッジは1.2項の図1-2に示すE19で、このエッジはノードN17までの垂直線の状態から、ノードN16までの左上を向く対角線に変更されます。この例では、1.12.1項の定義およびデータを参照しています。)
-- 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)
構文
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);
パラメータ
ノードの移動先となるトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
移動するノードのノードIDを指定します。
孤立ノードの移動先を表すSDO_GEOMETRYオブジェクト(点ジオメトリ)を指定します。
孤立ノードの移動先を表す点のX軸値を指定します。
孤立ノードの移動先を表す点のY軸値を指定します。
使用上の注意
ノードを移動する方法の詳細は、2.2.2項を参照してください。
ノードは、そのノードが現在配置されているフェイス内の場所に移動する必要があります。それ以外の場合は、ノードを削除して再作成する必要があります。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のmoveIsolatedNode
メソッドを使用する場合と同じです。
例
次の例では、孤立ノードを追加して移動します。(この例では、1.12.1項の定義およびデータを参照しています。)
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));
構文
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);
パラメータ
ノードの移動先となるトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
移動するノードのノードIDを指定します。
SDO_EDGE_ARRAY型(1.6.7項を参照)の配列で使用する配列を指定します。各内部配列は、ノードに接する各エッジの移動先の開始点から終了点までの座標で構成されます。外部配列は、ノードに接するすべてのエッジの配列で構成され、その配列の順序は、移動するノードの開始エッジから時計回りの順(SDO_TOPO_MAP.GET_NODE_STARファンクションのコールで取得される順序)です。
各エッジの配列には、開始点および終了点を含める必要があります。移動されたノードに2回接続されているループは、配列で2回指定する必要があります。
allow_iso_moves
パラメータ値がTRUE
の場合、Spatialによって、このプロシージャの結果として別のフェイスに移動された孤立ノードのノードID値が格納される出力パラメータです。allow_iso_moves
パラメータ値がFALSE
の場合、Spatialによって、実際には移動されなかったが、allow_iso_moves
パラメータ値がTRUE
だった場合は別のフェイスに移動されていたはずの孤立ノードのノードID値が格納されます。
allow_iso_moves
パラメータ値がTRUE
の場合、Spatialによって、このプロシージャの結果として別のフェイスに移動された孤立エッジのエッジID値が格納される出力パラメータです。allow_iso_moves
パラメータ値がFALSE
の場合、Spatialによって、実際には移動されなかったが、allow_iso_moves
パラメータ値がTRUE
だった場合は別のフェイスに移動されていたはずの孤立エッジのエッジID値が格納されます。
True
を指定すると、Spatialで、孤立ノードまたは孤立エッジを別のフェイスに移動するエッジの移動操作を実行し、これらの孤立ノードおよび孤立エッジを含むフェイスの情報を調整できます。False
を指定すると、Spatialで、孤立ノードまたは孤立エッジを移動するエッジの移動操作を実行できません。
allow_iso_moves
パラメータを指定しない場合は、Spatialで、孤立ノードまたは孤立エッジを別のフェイスに移動するノードの移動操作を実行できます。また、これらの孤立ノードおよび孤立エッジを含むフェイスの情報が調整されます。
使用上の注意
ノードを移動する方法の詳細は、2.2.2項を参照してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のmoveNode
メソッドを使用する場合と同じです。
例
次の例では、ノードN3を移動して、このノードに接する唯一のエッジの座標を調整します。(この例では、1.12.1項の定義およびデータを参照しています。)
-- 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)));
パラメータ
エッジを削除するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
削除するエッジのエッジIDを指定します。
使用上の注意
topology
がNULLではない場合、Spatialは自動的に<topology-name>_EDGE$表および<topology-name>_FACE$表の適切なエントリを更新します。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)
トポロジからエッジを削除する方法の詳細は、2.3.3項を参照してください。
パラメータ
ノードを削除するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
削除するノードのノードIDを指定します。
使用上の注意
topology
がNULLではない場合、Spatialは自動的に<topology-name>_NODE$表および<topology-name>_EDGE$表の適切なエントリを更新し、必要に応じて<topology-name>_FACE$表の適切なエントリも更新します。(topology
がNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこれらの表を更新できます。)
トポロジからノードを削除する方法の詳細は、2.2.3項を参照してください。
パラメータ
不要ノードを削除するトポロジの名前を指定します。更新可能なTopoMapオブジェクトを使用している場合は、NULLを指定します(2.1.2項を参照)。名前は20文字以下である必要があります。
説明
現行の更新可能なTopoMapオブジェクトを使用して行われた、データベースに対するすべての変更をロールバックします。また、オブジェクトでの変更を廃棄し、オブジェクトのキャッシュ構造を消去して、オブジェクトを読取り専用に設定します。
使用上の注意
このプロシージャは、トポロジの一連の編集が終了した後で、データベースに対するすべての変更およびキャッシュ内のすべての変更を廃棄する(コミットしない)場合に使用します。ロールバック操作の完了後に、TopoMapオブジェクトを編集することはできません。完了後にトポロジを編集するには、SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャを使用して更新用に同じTopoMapオブジェクトにトポロジをロードするか、またはSDO_TOPO_MAP.CREATE_TOPO_MAPプロシージャを使用して新しいTopoMapオブジェクトを作成し、更新用にそのTopoMapオブジェクトにトポロジをロードします。
TopoMapオブジェクトのすべての変更をコミットするには、SDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャを使用します。
メモリー内キャッシュを使用して位相要素を編集する方法の詳細は、2.1項を参照してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のrollbackDB
メソッドを使用する場合と同じです。
構文
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;
パラメータ
TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
問合せウィンドウの左下のX座標値を指定します。
問合せウィンドウの左下のY座標値を指定します。
問合せウィンドウの右上のX座標値を指定します。
問合せウィンドウの右上のY座標値を指定します。
戻すエッジID値の最大数を指定します。0(ゼロ)または負の数値を指定すると、100が使用されます。
例
次の例では、左下の角が(5,5)で右上の角が(30,40)の問合せウィンドウと相互作用するエッジのエッジID番号(最大200)を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
構文
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;
パラメータ
TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
問合せウィンドウの左下のX座標値を指定します。
問合せウィンドウの左下のY座標値を指定します。
問合せウィンドウの右上のX座標値を指定します。
問合せウィンドウの右上のY座標値を指定します。
戻すフェイスID値の最大数を指定します。0(ゼロ)または負の数値を指定すると、100が使用されます。
例
次の例では、左下の角が(5,5)で右上の角が(30,40)の問合せウィンドウと相互作用するフェイスのフェイスID番号(最大200)を戻します。(この例では、1.12.1項の定義およびデータを参照しています。)
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)
使用上の注意
このプロシージャは、編集セッション中、定期的にトポロジを更新する場合に使用します(2.1.4項を参照)。エッジ情報表、フェイス情報表およびノード情報表への更新は必要に応じて行われます(1.5項を参照)。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プロシージャを使用します。
メモリー内キャッシュを使用して位相要素を編集する方法の詳細は、2.1項を参照してください。
このプロシージャの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のupdateTopology
メソッドを使用する場合と同じです。
構文
SDO_TOPO_MAP.VALIDATE_TOPO_MAP(
topo_map IN VARCHAR2,
level IN NUMBER DEFAULT 1
) RETURN VARCHAR2;
説明
TopoMapオブジェクトの1次検証を実行し、オプション(デフォルト)で計算ジオメトリも確認します。TopoMapオブジェクトの位相要素の構造に一貫性がある場合は文字列TRUE
を戻し、一貫性がない場合は例外が発生します。
パラメータ
TopoMapオブジェクトの名前を指定します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
1次検証の一環として、次の事項を確認するには0(ゼロ)を指定します。
すべてのフェイスが閉じられており、無限ループが存在しない。
前後のすべてのエッジ・ポインタに一貫性がある。
すべてのエッジがノードに接続されている。
各孤立ノードがフェイスに関連付けられている。
フェイスの境界上のすべてのエッジが、フェイスに関連付けられている。
0を指定した場合のすべての事項と、計算ジオメトリに関連する次の事項を確認するには1(デフォルト)を指定します。
各孤立要素が、関連付けられたフェイスの境界内に存在する。
エッジが、それ自体または別のエッジと交差していない。
エッジの開始座標および終了座標が、ノードの座標と一致している。
ノード・スターが幾何学的に適切に順序付けされている。
使用上の注意
このファンクションは、エッジ、ノードおよびフェイス間のすべてのポインタの関係について一貫性を確認します。このファンクションを使用して、(SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャを使用して)トポロジを更新する前に更新可能なTopoMapオブジェクトを検証したり、問合せを発行する前に読取り専用のTopoMapオブジェクトを検証することができます。
このファンクションは、内部計算に許容差10E-15を使用します(1.2.1項を参照)。
このファンクションの動作は、クライアント側のJava APIに含まれるTopoMap
クラス(1.8.2項を参照)のvalidateCache
メソッドを使用する場合と同じです。
例
次の例では、CITY_DATA_TOPOMAP
という名前のTopoMapオブジェクトのトポロジを検証します。この例では、トポロジが有効であることを示す結果が戻されます。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.VALIDATE_TOPO_MAP('CITY_DATA_TOPOMAP') INTO :res_varchar; Call completed. PRINT res_varchar; RES_VARCHAR -------------------------------------------------------------------------------- TRUE
構文
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,
prevent_updates IN VARCHAR2,
level IN NUMBER DEFAULT 1
) RETURN VARCHAR2;
パラメータ
検証するトポロジの名前を指定します。名前は20文字以下である必要があります。
検証するウィンドウ(トポロジの矩形部分)の左下のX座標値を指定します。
検証するウィンドウ(トポロジの矩形部分)の左下のY座標値を指定します。
検証するウィンドウ(トポロジの矩形部分)の右上のX座標値を指定します。
検証するウィンドウ(トポロジの矩形部分)の右上のY座標値を指定します。
検証の実行中に、他のユーザーがトポロジを更新できないようにするにはTRUE
を指定します。検証の実行中に、他のユーザーがトポロジを更新できるようにするにはFALSE
を指定します。FALSE
を指定した場合、他のユーザーによって検証の実行中に行われたトポロジの変更は、このファンクションでは考慮されず、結果にも影響しません。
次の事項を確認するには0(ゼロ)を指定します。
すべてのフェイスが閉じられており、無限ループが存在しない。
前後のすべてのエッジ・ポインタに一貫性がある。
すべてのエッジがノードに接続されている。
各孤立ノードがフェイスに関連付けられている。
フェイスの境界上のすべてのエッジが、フェイスに関連付けられている。
0を指定した場合のすべての事項と、計算ジオメトリに関連する次の事項を確認するには1(デフォルト)を指定します。
各孤立要素が、関連付けられたフェイスの境界内に存在する。
エッジが、それ自体または別のエッジと交差していない。
エッジの開始座標および終了座標が、ノードの座標と一致している。
ノード・スターが幾何学的に適切に順序付けされている。
使用上の注意
このファンクションは、TopoMapオブジェクトを暗黙的に作成し、検証の完了後、削除します。(TopoMapオブジェクトの詳細は、2.1.1項を参照してください。)
このファンクションは、内部計算に許容差10E-15を使用します(1.2.1項を参照)。
例
次の例では、CITY_DATA
という名前のトポロジを検証します。この例では、トポロジが有効であることを示す結果が戻されます。(この例では、1.12.1項の定義およびデータを参照しています。)
CALL SDO_TOPO_MAP.VALIDATE_TOPOLOGY('CITY_DATA') INTO :res_varchar; Call completed. PRINT res_varchar; RES_VARCHAR -------------------------------------------------------------------------------- TRUE