2.3 エッジでの操作の実行

このトピックでは、エッジの追加、移動、削除および更新の影響と、PL/SQL APIを使用してこれらの操作を実行する方法について説明します。

2.3.1 エッジの追加

連結エッジを追加すると、フェイスにエッジが追加されます。また、元のフェイスが2つのフェイスに分割されます。Spatialによって元のフェイスの定義が自動的に調整され、新しいフェイスが作成されます(新しいエッジに、トポロジ内のフェイスで一意のID値が割り当てられます)。

エッジを追加するには、SDO_TOPO_MAP.ADD_EDGEプロシージャを使用します。既存のノードを、追加したエッジの開始ノードおよび終了ノードに指定する必要があります。

図2-11に、フェイスF3のノードN3とN5の間へのエッジ(E7)の追加を示します。

図2-11 連結エッジの追加

図2-11の説明が続きます
図2-11「連結エッジの追加」の説明

図2-11に示す操作の結果として、フェイスF3が再定義され、F1およびF3の2つのフェイスになります。(Spatialは、複雑な規則(このマニュアルでは説明していません)を適用して、結果として生成されるフェイスのID値を決定します。)

元のフェイスに定義されていたポリゴン・フィーチャは、結果として生成された両方のフェイスに自動的に再定義されます。たとえば、図2-11の元のフェイスF3にウォールデン州立公園という名前の公園が定義されていた場合、エッジE7の追加後にウォールデン州立公園がフェイスF1とF3の両方に定義されます。

2.3.2 エッジの移動

連結エッジを移動すると、エッジの開始点または終了点の一方は同じ位置に保持され、これらの2つの点のもう一方が、既存の別のノードの位置に移動されます。ソース・ノード(移動するノードの移動前の位置)、ターゲット・ノード(移動するノードの移動後の位置)および移動後のエッジの頂点を指定する必要があります。

エッジを移動するには、SDO_TOPO_MAP.MOVE_EDGEプロシージャを使用します。

図2-12に、元はノードN3とN5の間に存在したエッジE7の、ノードN2とN5の間への移動を示します。

図2-12 連結エッジの移動

図2-12の説明が続きます
図2-12「連結エッジの移動」の説明

図2-12に示す操作の結果として、フェイスF1およびF3が再定義され、それらのエッジの座標がエッジE7の新しい座標を含むように反映されます。

連結エッジの移動操作の結果、孤立ノードおよび孤立エッジは同じフェイス内に残るか、別のフェイスに移動します。SDO_TOPO_MAP.MOVE_EDGEプロシージャには、moved_iso_nodesおよびmoved_iso_edgesの2つの出力パラメータがあります。これらのパラメータには、操作の結果として別のフェイスに移動した孤立ノードおよび孤立エッジのID番号が格納されます。

移動の結果として次のことが発生する場合、エッジを移動できません。

  • 移動したエッジがその他のエッジと交差する。たとえば、図2-12に示す移動前のトポロジが、ノードN3とN4の間の別のエッジ(E10)を含むとします。この場合、エッジE7を移動するとエッジE10と交差するため、その移動操作は実行されません。

  • 現在エッジに隣接していないフェイスにノードが移動される。たとえば、エッジE7を移動すると、図2-12に示すフェイス(F1およびF3)の外側のノードにエッジE7の終了点が移動される場合、移動操作は実行されません。

2.3.3 エッジの削除

連結エッジを削除すると、そのエッジが削除され、エッジに隣接していたフェイスがマージされます。(Spatialは、複雑な規則(このマニュアルでは説明していません)を適用して、結果として生成されるフェイスのID値を決定します。)

エッジを削除するには、SDO_TOPO_MAP.REMOVE_EDGEプロシージャを使用します。

図2-13に、フェイスF1およびF3と隣接するエッジ(E7)の削除を示します。

図2-13 連結エッジの削除

図2-13の説明が続きます
図2-13「連結エッジの削除」の説明

図2-13に示す操作の結果は、次のとおりです。

  • フェイスF1が、元のフェイスF1およびF3の領域で構成されるように再定義されます。

  • フェイスF3が削除されます。

  • 削除されたエッジの開始ノードおよび終了ノード(ノードN3およびN5)は削除されません。

元のフェイスに定義されていたポリゴン・フィーチャは、結果として生成されたフェイスに自動的に再定義されます。たとえば、図2-13の元のフェイスF1およびF3にアダムス公園という名前の公園が定義されていた場合、エッジE7の削除後にアダムス公園がフェイスF1に定義されます。

次の1つ以上の条件に該当する場合、連結エッジは削除できません。

  • 線形フィーチャがエッジに定義されている。たとえば、大通りという名前の線形フィーチャが、図2-13のエッジE7に定義されていた場合、エッジE7は削除できません。この場合、エッジを削除する前に、エッジ上の線形フィーチャの定義を削除する必要があります。

  • 元のフェイスのいずれかに定義されているポリゴン・フィーチャが、両方のフェイスに定義されていない。たとえば、アダムス公園という名前の線形フィーチャが、図2-13のフェイスF1には定義されていたがフェイスF3には定義されていなかった場合、エッジE7は削除できません。

2.3.4 エッジの更新

孤立エッジを更新すると、エッジの1つ以上の座標が変更されますが、開始点および終了点は変更されません。

エッジを更新するには、SDO_TOPO_MAP.CHANGE_EDGE_COORDSプロシージャを使用します。

連結エッジの更新操作の結果、孤立ノードおよび孤立エッジは同じフェイス内に残るか、別のフェイスに移動します。SDO_TOPO_MAP.CHANGE_EDGE_COORDSプロシージャには、moved_iso_nodesおよびmoved_iso_edgesの2つの出力パラメータがあります。これらのパラメータには、操作の結果として別のフェイスに移動した孤立ノードおよび孤立エッジのID番号が格納されます。

操作の結果としてエッジがその他のエッジと交差する場合、エッジは更新できません。エッジの更新の詳細は、SDO_TOPO_MAP.CHANGE_EDGE_COORDSプロシージャの「使用上のノート」を参照してください。