5 ネットワーク・データ・モデル・グラフの概要

この章では、グラフ内のノードおよびリンク(頂点およびエッジ)としてモデル化される機能またはオブジェクトを表すネットワーク・データ・モデルに関連する概念および操作について説明します。

このモデルは、Oracle Spatial and Graphネットワーク・データ・モデル・グラフ機能(または単にネットワーク・データ・モデル・グラフ)と呼ばれます。この章では、ユーザーが『Oracle Spatial and Graph開発者ガイド』に記載されているOracle Spatial and Graphの主な概念、データ型および操作を理解していると想定しています。

この章では、Oracle Spatial and Graphに関連するいくつかのネットワーク関連の用語について説明しますが、ユーザーがネットワーク・データ・モデリングの基本的な概念を十分に理解していると想定しています。

トピック:

5.1 ネットワーク・モデリングの概要

多くのアプリケーションで、機能またはオブジェクトは、ネットワークのノードおよびリンクとしてモデル化されます。ネットワーク・モデルには、ノード間およびリンク間の接続性の関係、リンクの方向、ノードおよびリンクのコストなどの論理情報が含まれます。

論理ネットワーク情報を使用して、ネットワークを分析し、質問(多くはパスの計算および追跡に関連する質問)に対する回答を得ることができます。たとえば、生化学パスウェイの場合、2つの化合物間で可能なすべての反応パスウェイを検出できます。または、道路ネットワークの場合、次の情報を検出できます。

  • 2つの都市間の最短(距離)パスまたは最速(移動時間)パス

  • 特定の空港に最も近いホテルおよびそのホテルへのアクセス方法

論理ネットワーク情報の他に、ノードの位置やリンクのジオメトリなどの空間情報をネットワークに関連付けることができます。この情報を使用すると、論理情報をモデル化できます(たとえば、ルートの物理的な長さを空間表現から直接計算できるため、このルートのコストなどの論理情報をモデル化できます)。

Spatial and Graphネットワーク・データ・モデル・グラフ機能は、大規模で複雑なネットワークに対して使用できます。たとえば、図5-1は、ネットワーク分析用のデモのWebベース・アプリケーションに表示された、ネットワーク・データ・モデル・グラフ機能を使用して定義したサンフランシスコ市とリンクを示しています。(このデモは、「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」で説明するNDMのチュートリアルを使用してインストールできます。)

図5-1 サンフランシスコ市のノードとリンク

図5-1の説明が続きます
図5-1「サンフランシスコ市のノードとリンク」

一般的なデータ・モデルおよびネットワーク分析機能を使用すると、従来の地理情報システム(GIS)の他に、多くの種類のネットワーク・アプリケーションをモデル化および分析できます。たとえば、生化学の分野では、アプリケーションで、生物の反応パスウェイ・ネットワークをモデル化する必要がある場合があります。製薬産業では、新薬発見プロセスをモデル化するアプリケーションで、蛋白質間の相互作用をモデル化する必要がある場合があります。

Spatial and Graphのネットワーク・モデリング機能には、スキーマ・オブジェクトおよびApplication Program Interface (API)が含まれます。スキーマ・オブジェクトには、メタデータおよびネットワーク表が含まれます。APIには、データベースでネットワークを作成および管理するためのサーバー側PL/SQL API (SDO_NETパッケージ)、およびネットワークの編集と分析のための中間層(クライアント側) Java APIが含まれます。

5.2 ネットワーク・データ・モデル・グラフを使用するための主な手順

このトピックでは、Oracle Spatial and Graphでネットワーク・データ・モデル・グラフ機能を使用するための主な手順の概要を示します。

また、重要な概念、構造および操作を示します(詳細は他の項を参照してください)。

ネットワークを作成するには2つの基本的な方法があります。

  • CREATE_<network-type>_NETWORKという形式の名前を持つプロシージャを使用して、大部分の操作をSpatial and Graphによって実行します。

  • 自分自身で操作を実行します。必要なネットワーク表を作成し、ネットワーク・メタデータを更新します。

どちらの方法を使用した場合も、ネットワーク・データをネットワーク表に挿入する必要があります。その後、ネットワーク・データ・モデル・グラフのPL/SQL Application Program Interface (API)およびJava APIを使用してネットワークを更新し、その他の操作を実行できます。(PL/SQL APIおよびJava APIについては、「ネットワーク・データ・モデル・グラフのApplication Program Interface」を参照してください。)

トピック:

5.2.1 Spatialによる操作の実行

必要な操作の大部分をSpatial and Graphによって実行してネットワークを作成するには、次の手順を実行します。

  1. CREATE_<network-type>_NETWORKという形式の名前を持つプロシージャを使用してネットワークを作成します。<network-type>は、作成する必要があるネットワークのタイプです。

    これらの各プロシージャは、必要なネットワーク・データ・モデル・グラフ表(「ネットワーク・データ・モデル・グラフ表」を参照)を作成し、適切なネットワーク・メタデータ情報が含まれる行をxxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に挿入します。

    各プロシージャには、2つの形式があります(一方の形式は、表および特定の列にデフォルトの名前を使用して、すべてのネットワーク・データ・モデル・グラフ表を作成し、もう一方の形式を使用すると、表および特定の列に名前を指定できます)。ネットワーク・データ・モデル・グラフ表のデフォルトの名前は、<network-name>_NODE$、<network-name>_LINK$、<network-name>_PATH$および<network-name>_PLINK$です。ネットワーク・データ・モデル・グラフ表のコスト列のデフォルトの名前はCOSTで、ジオメトリ列のデフォルトの名前はGEOMETRYです。

  2. ノード表とリンク表、および必要に応じてパス表とパスリンク表にデータを挿入します。(ノード表、リンク表、パス表およびパスリンク表については、「ネットワーク・データ・モデル・グラフ表」を参照してください。)
  3. SDO_NET.VALIDATE_NETWORKファンクションを使用して、ネットワークを検証します。
  4. 空間(SDOまたはLRS)ネットワークの場合、適切な情報をUSER_SDO_GEOM_METADATAビューに挿入し、ジオメトリ列に空間索引を作成します。

    ビューをノード表、リンク表またはパス表として使用する場合は、ノード表、リンク表またはパス表に関する情報をUSER_SDO_GEOM_METADATAビューに挿入する際に、TABLE_NAME列の値にビュー名を指定する必要があります。

5.2.2 自分自身での操作の実行

必要な操作を自分で実行してネットワークを作成するには、次の手順を実行します。

  1. SDO_NET.CREATE_NODE_TABLEプロシージャを使用して、ノード表を作成します。
  2. ノード表にデータを挿入します。
  3. SDO_NET.CREATE_LINK_TABLEプロシージャを使用して、リンク表を作成します。
  4. リンク表にデータを挿入します。
  5. オプションで、SDO_NET.CREATE_PATH_TABLEプロシージャを使用して、パス表を作成します。
  6. パス表を作成した場合は、SDO_NET.CREATE_PATH_LINK_TABLEプロシージャを使用して、パスリンク表を作成します。
  7. パス表を作成した場合に、パスを作成する必要がある場合は、パス表にデータを挿入します。
  8. パス表にデータを挿入した場合、パスリンク表に適切な行を挿入します。
  9. ネットワークに関する情報が含まれる行をUSER_SDO_NETWORK_METADATAビューに挿入します。(USER_SDO_NETWORK_METADATAビューについては、「xxx_SDO_NETWORK_METADATAビュー」を参照してください。)

    ビューをノード表、リンク表、パス表またはパスリンク表として使用する場合は、ネットワークに関する情報をUSER_SDO_NETWORK_METADATAビューに挿入する際に、関連する列にビュー名を指定する必要があります。

  10. 空間(SDOまたはLRS)ネットワークの場合、適切な情報をUSER_SDO_GEOM_METADATAビューに挿入し、ジオメトリ列に空間索引を作成します。

    ビューをノード表、リンク表またはパス表として使用する場合は、ノード表、リンク表またはパス表に関する情報をUSER_SDO_GEOM_METADATAビューに挿入する際に、TABLE_NAME列の値にビュー名を指定する必要があります。

  11. SDO_NET.VALIDATE_NETWORKファンクションを使用して、ネットワークを検証します。

これらの手順では、順序の一部を変更できます。たとえば、まずノード表とリンク表の両方を作成し、次にそれぞれの表にデータを挿入できます。また、ノード表およびリンク表を作成する前に、USER_SDO_NETWORK_METADATAビューに行を挿入できます。

5.3 ネットワーク・データ・モデル・グラフの概念

ネットワークは、接続性を使用してオブジェクト間の関係を表す数学的なグラフです。

接続性は、空間の近接性に基づく場合と、基づかない場合があります。たとえば、2つの町が湖の対岸に位置するとき、1つの町からもう1つの町まで車で移動する場合には、空間の近接性に基づく最短パス(湖の中心を通る直線)は適切ではありません。かわりに、最短の運転距離を検出するには、道路と交差点、および個別のリンクのコストに関する接続性情報が必要です。

ネットワークは一連のノードおよびリンクで構成されています。各リンク(エッジまたはセグメントともいう)は、2つのノードを指定します。

ネットワークは、有向(デフォルトでは、リンクの方向は開始ノードと終了ノードによって決まる)または無向(リンクのどちらの方向にも進むことができる)にすることができます。

ネットワーク・データ・モデル・グラフ機能に関連するいくつかの重要な用語を次に示します。

  • ノード(頂点とも呼ばれます)は、リンクを相互に結合できる点です。孤立ノードとは、どのリンクにも含まれていないノードのことです。(連結ノードは、そのノードを含むすべてのリンクが削除されると、孤立ノードになります。)

  • リンクは、2つのノード間の関係を表します。有向ネットワーク内のリンクは、無向(開始ノードから終了ノード、終了ノードから開始ノードのどちらの向きにも進むことが可能)または有向(開始ノードから終了ノードの向きにのみ進むことが可能)に設定できます。無向ネットワーク内のリンクは、すべて無向です。

  • ネットワーク要素は、ノードまたはリンクです。

  • パスは、ノードおよびリンクを交互につなげたもので、ノードで開始および終了します。通常、同じノードおよびリンクが複数回現れることはありません。(1つのパス内でノードおよびリンクを繰返し使用することもできますが、ほとんどのネットワーク・アプリケーションでは、通常、同じノードおよびリンクが繰返し使用されることはありません。)

  • サブパスは、パスに沿った部分的なパスであり、ネットワーク分析操作の結果として作成されたり、ユーザーによって明示的に作成されます。サブパスについては、「サブパス」を参照してください。

  • 論理ネットワークには接続性情報が含まれますが、ジオメトリ情報は含まれません。これは、ネットワーク分析に使用されるモデルです。論理ネットワークは、アプリケーションに応じて、有向グラフまたは無向グラフとして処理できます。

  • 空間ネットワークには、接続性情報とジオメトリ情報の両方が含まれます。空間ネットワークでは、ノードおよびリンクは、LRS情報が含まれないSDO_GEOMETRYジオメトリ・オブジェクト(SDOネットワーク)、LRS情報が含まれるSDO_GEOMETRYジオメトリ・オブジェクト(LRSネットワーク)、またはSDO_TOPO_GEOMETRYオブジェクト(トポロジ・ジオメトリ・ネットワーク)になります。

    LRSネットワークでは、各ノードにジオメトリID値およびメジャー値が含まれ、各リンクにジオメトリID値および開始メジャー値と終了メジャー値が含まれます。いずれの場合にも、ジオメトリID値は、LRS情報が含まれるSDO_GEOMETRYオブジェクトを参照します。空間ネットワークは、アプリケーションに応じて、有向または無向にすることができます。

  • フィーチャは、ノードまたはリンクに関連付けられた、ネットワーク・アプリケーションの対象オブジェクトです。フィーチャおよびフィーチャ・レイヤー・タイプについては、「フィーチャおよびフィーチャ・レイヤー」を参照してください

  • コストは、最低コスト・パスを計算するための、リンクまたはノードに関連付け可能な負でない数値の属性です。最低コスト・パスとは、開始ノードから終了ノードまでの合計コストが最低になるパスです。ネットワーク・メタデータで、リンクの運転時間や運転距離など、単一のコスト因子を指定し、コストを調べるネットワーク分析ファンクションで使用できます。

  • 継続時間は、リンクまたはノードに関連付ける負でない数値の属性で、リンクまたはノードの継続時間の値を指定できます。継続時間の値は、時間(分)や他のユーザー定義項目を示すことができます。ネットワーク・メタデータで、リンクの運転時間など、単一の継続時間因子を指定できます。ただし、コストのかわりに継続時間を使用して経過時間を示す場合、指定した継続時間は、コストを調査するネットワーク分析ファンクションの検討対象になりません。

  • 状態は、リンクまたはノードに関連付けるACTIVEまたはINACTIVEの文字列属性で、リンクまたはノードをネットワーク分析ファンクションの検討対象にするかどうかを指定します。たとえば、ノードの状態がINACTIVEの場合、そのノードが起点または終点のリンクは、2ノード間の最短パスの計算時に無視されます。リンクやノードを作成した時点では、状態はデフォルトでACTIVEですが、INACTIVEに設定できます。

  • タイプは、リンクまたはノードに関連付けることのできる文字列属性で、リンクまたはノードのタイプに対するユーザー定義値を指定します。

  • 一時的なリンク、ノードおよびパスは、ネットワーク・メモリー・オブジェクト内にのみ存在し、ネットワーク・メモリー・オブジェクトをデータベースに書き込むときもデータベースには書き込まれません。たとえば、ネットワークの分析時や編集セッション時には、一時ノードを作成して住所を表し、最短パスの計算で使用することがありますが、編集操作の結果を保存するときは、これらの一時ノードは保存されません。

  • 到達可能ノードは、任意のノードから到達可能なすべてのノードです。到達ノードは、任意のノードに到達可能なすべてのノードです。

  • ノードの度数は、そのノードへのリンク(ノードに対するインシデント)の数です。イン度数はインバウンド・リンクの数で、アウト度数はアウトバウンド・リンクの数です。

  • 接続されているコンポーネントとは、直接または間接的に接続されたネットワーク・ノードのグループのことです。ノードAがノードBに到達可能な場合、これらのノードは同じ接続されているコンポーネントに属している必要があります。2つのノードが接続されていない場合、これらのノード間で使用可能なパスがないということがわかります。この情報は、不要なパスの計算を避けるためのフィルタとして使用されます。

  • 接続されたグラフのスパニング・ツリーとは、グラフのすべてのノードを接続するツリー(サイクルが含まれないグラフ)です。(スパニング・ツリーでは、リンクの方向は無視されます。)最低コスト・スパニング・ツリーは、すべてのノードを接続し、合計コストが最低になるスパニング・ツリーです。

  • パーティション化されたネットワークとは、複数のパーティションを含むネットワークのことです。大規模なネットワークをパーティション化すると、必要なパーティションのみをオンデマンドでメモリーにロードできるため、全体的なパフォーマンスが向上します。

    ネットワーク・パーティションとは、サブネットワークのことです。各パーティションには、ネットワーク全体のノードとリンクのサブセットが含まれます。ネットワーク・パーティションは、ロード・オンデマンド分析を行うための基本的な処理単位です。ネットワーク・パーティションを作成するには、ネットワーク内のすべてのノードを1つのパーティションIDのみに割り当てます。ネットワーク・パーティションの情報は、パーティション表に格納されます。

  • ロード・オンデマンド(ロード・オンデマンド分析)は、大規模なネットワークを管理可能なパーティションに分割し、分析中に必要なパーティションのみをロードすることによって、考慮事項となっているメモリー制限を排除し、全体的なパフォーマンスを向上させる方法です。

  • パーティションBLOBは、ネットワーク・パーティションをバイナリで表現したものです。これを使用すると、パーティションのロード時間を短縮できます。パーティションBLOBは、パーティションBLOB表に格納されます。

  • ロード・オンデマンドのパーティション・キャッシュは、ネットワーク分析中にメモリーにロードされるネットワーク・パーティションに対するインメモリー・プレースホルダです。パーティション・キャッシュは、構成することができます。

  • ユーザー定義データは、ユーザーがネットワーク表現に関連付ける(接続性とは関係のない)情報です。ユーザー定義データは、ノード、リンク、パスおよびサブパスの各レベルで定義することができ、ノード表、リンク表、パス表およびサブパス表の列に格納されます。

トピック:

5.3.1 サブパス

サブパスは、パスに沿った部分的なパスであり、ネットワーク分析操作の結果として作成されたり、ユーザーによって明示的に作成されます。サブパスの開始点および終了点は、図5-2に示すように、リンクの索引と、パスにおける1つ前のノードからの距離の割合として定義されます。

図5-2 パスおよびサブパス

図5-2の説明が続きます
図5-2「パスおよびサブパス」の説明

サブパスは、次のパラメータを使用して、既存のパス(参照パス)を参照します。

  • 参照パスID: 参照パスのパスID。

  • 開始リンクの索引: 参照パス上の開始リンクの索引。(リンク索引0は、パス上の最初のノードと2番目のノード間のリンクを示します。)図5-2ではリンク索引0が開始リンクの索引です。

  • 開始の割合: サブパスの開始ノードに対する、開始リンクに沿った距離の割合。図5-2では、サブパスは、リンク索引0の開始から終了までの距離の65%の位置で開始しています。

  • 終了リンクの索引: 参照パス上の終了リンクの索引。図5-2ではリンク索引6が終了リンクの索引です。

  • 終了の割合: サブパスの終了ノードに対する、終了リンクに沿った距離の割合。図5-2では、サブパスは、リンク索引6の開始から終了までの距離の50%の位置で終了しています。

5.3.2 フィーチャおよびフィーチャ・レイヤー

フィーチャは、ノードまたはリンクに関連付けられた、ネットワーク・アプリケーションの対象オブジェクトです。たとえば、輸送ネットワークでは、(ノードにマップされた)出口と交差点、および(リンクにマップされた)高速道路と通りがフィーチャになります。

フィーチャは1つ以上のフィーチャ要素で構成されます。フィーチャ要素は、ネットワークに沿った点または線です。フィーチャ要素が点である場合、要素はノード上または線に沿って存在し、フィーチャ要素が線である場合、要素は完全リンクまたは部分リンクとなります。

フィーチャのフィーチャ要素のタイプに応じて、フィーチャのフィーチャ・タイプは、表5-1に示すタイプのいずれかになります。

表5-1 フィーチャ・タイプ

タイプ番号 タイプ名 フィーチャ要素の構成

1

SDO_NET.FEAT_TYPE_PON

ノード上の単一の点

2

SDO_NET.FEAT_TYPE_POL

リンク上の単一の点

3

SDO_NET.FEAT_TYPE_POINT

単一の点(ただし、点がノード上またはリンク上のいずれにあるのかは不明です)

4

SDO_NET.FEAT_TYPE_LINE

単一の線

5

SDO_NET.FEAT_TYPE_MPON

1つ以上のノード上にある1つ以上の点

6

SDO_NET.FEAT_TYPE_MPOL

1つ以上のリンク上にある1つ以上の点

7

SDO_NET.FEAT_TYPE_MPOINT

1つ以上の点(ただし、点はノード上またはリンク上あるいは両方の組合せ上にあります)

8

SDO_NET.FEAT_TYPE_MLINE

1つ以上の線

9

SDO_NET.FEAT_TYPE_COLL

点と線両方の集合、またはフィーチャ要素のタイプが不明

フィーチャ・レイヤーは、同じ属性セットを持つフィーチャを含む表に対応します。たとえば、道路ネットワークでは、レストランとホテルに対して異なるフィーチャ・レイヤー(および旅行者が興味を示すその他の対象のフィーチャ・レイヤー)が存在する可能性があります。

フィーチャ・レイヤー内にあるフィーチャのタイプに応じて、フィーチャ・レイヤーのフィーチャ・レイヤー・タイプは、表5-2に示すタイプのいずれかになります(表5-2では、各フィーチャ・レイヤー・タイプを、表5-1の関連するフィーチャ・タイプにマップしています)。

表5-2 フィーチャ・レイヤー・タイプ

レイヤー・タイプ番号 レイヤー内のフィーチャのタイプ

1

タイプ1 (SDO_NET.FEAT_TYPE_PON)

2

タイプ2 (SDO_NET.FEAT_TYPE_POL)

3

タイプ3 (SDO_NET.FEAT_TYPE_POINT)

4

タイプ4 (SDO_NET.FEAT_TYPE_LINE)

5

タイプ5 (SDO_NET.FEAT_TYPE_MPON)または1 (SDO_NET.FEAT_TYPE_PON)

6

タイプ6 (SDO_NET.FEAT_TYPE_MPOL)または2 (SDO_NET.FEAT_TYPE_POL)

7

タイプ1、2、3、5、6または7

8

タイプ8 (SDO_NET.FEAT_TYPE_MLINE)または4 (SDO_NET.FEAT_TYPE_LINE)

9

任意の数のフィーチャ・タイプが混在する可能性あり

親フィーチャは、1つ以上のフィーチャ・レイヤーのフィーチャで構成されます。たとえば、電気ネットワークでは、サブステーションは、その関連部分(接合部スイッチケーブルなど)すべてのフィーチャ・レイヤーに対する親フィーチャです。

フィーチャおよびフィーチャ・レイヤーは、NFE APIを使用して編集および表示できます。このAPIにより、特定のタイプのネットワーク(電気、ガス、水道など)のモデル化が容易になります。

5.4 ネットワーク・アプリケーション

ネットワークは、アプリケーションで、異なるオブジェクトが相互に接続されている方法を確認するために使用されます。

接続性は、通常、近接性およびパスの関係で表現されます。2つのノードが1つのリンクで接続されている場合、これらのノードは近接しています。多くの場合、任意の2つのノード間には複数のパスが存在し、コストが最低になるパスを検出する必要がある場合があります。

このトピックでは、いくつかの種類のネットワーク・アプリケーションでの一般的な例について説明します。

トピック:

5.4.1 道路ネットワークの例

通常の道路ネットワークでは、道路の交差点がノードになり、2つの交差点間の道路セグメントがリンクになります。道路の空間表現は、ネットワークのノードおよびリンクとは本質的に無関係です。たとえば、(道路の急カーブを反映する)道路の空間表現の形状点は、この形状点が交差点に関連付けられていない場合、ネットワークのノードにはなりません。また、単一の空間オブジェクトが、ネットワークの複数のリンクを構成する場合があります(横断する3つの道路によって交差点が形成された直線セグメントなど)。道路ネットワークに関する重要な操作は、移動時間または移動距離が最短になる、開始点から終了点までのパスを検索することです。パスの計算には、特定のランドマークの通過や特定の交差点の回避など、追加の制約が課せられる場合があります。

5.4.2 地下鉄(鉄道)ネットワークの例

大都市の地下鉄ネットワークは、停車駅および線路の正確な空間表現が重要でないと想定すると、最適なモデル化が行われた論理ネットワークであるといえます。このネットワークでは、地下鉄のすべての停車駅がネットワークのノードを構成し、列車が2つの停車駅間を直接移動する場合、これらの2つの停車駅間の接続がリンクになります。鉄道ネットワークに関する重要な操作には、指定された駅から到達可能なすべての駅の検索、指定された2つの駅間の停車駅の数の検索、および2つの駅間の移動時間の検索が含まれます。

5.4.3 マルチモーダル・ネットワークと時間の例

マルチモーダル・ネットワークは、複数のモードで構成されるネットワーク(運転ルートと歩行ルートで構成されるネットワークなど)です。マルチモーダル・ネットワークは、通常、(特定のモードの)個別のネットワークとしてモデル化され、集約ネットワークとして処理されるため、単一モードと複数モードのルートを表現して計算することが可能です。一般的に、マルチモーダル・ネットワークは異なるモードのスケジュールによって接続されますが、このような場合、マルチモーダル・ネットワークは時間ネットワークにもなります。例としては、最も近いバス停まで歩き、最速のバス・ルートを選択し、目的地に最も近いバス停で下車し、目的地まで歩く場合の移動工程の計算が挙げられます。また、運転や飛行などのモードの追加を考慮することもできます。

時間のモデリングと分析は、ネットワークのモデリングと分析に時間次元を追加します。時間係数は、静的な(時間以外の)ネットワーク上にコストまたは制約(あるいはその両方)を提供します。例としては、静的な移動時間コストのかわりに、トラフィック・パターン(時間に依存した移動時間コスト)を考慮する場合が挙げられます。

多くの大都市の輸送ネットワークは、バス、地下鉄、通勤路線などの複数のモードで構成され、モード間での乗換え(バスから地下鉄など)が可能です。各輸送モードが、大きな輸送ネットワーク内でのコンポーネント・ネットワークを持ちます。コンポーネント・ネットワークは、ノードとリンクを使用してモデル化することができ、ノード間の乗換えは、乗換え可能な停車駅を接続するリンクとしてモデル化できます。

このようなマルチモーダル輸送ネットワークで重要な機能は、スケジュールベースの操作です。一般的なネットワーク操作(開始点から終了点までの最速ルートの計算など)を実行する場合、スケジュール情報とモード間で可能な乗換えを考慮する必要があります。停車駅のスケジュール情報は、これらの停車駅を表すノードでユーザー定義データとして表現できます。マルチモーダル・ネットワークでスケジュール情報を使用する操作の例としては、(A)指定された開始時間で開始点から終了点までの最速ルートを検出する場合、(B)指定された到着時刻までに終了点に到達できる、開始点での最も遅い出発時刻を検出する場合などが挙げられます。

5.4.4 ライフライン・ネットワークの例

送電線ネットワークやケーブル・ネットワークなどのライフライン・ネットワークは、多くの場合、コストが最低になるように構成する必要があります。ライフライン・ネットワークに関する重要な操作は、最低コスト・スパニング・ツリー・アルゴリズムを使用してノード間の接続を決定し、必要な品質のサービスを最低コストで提供することです。もう1つの重要な操作は、到達可能性の分析です。たとえば、水道ネットワークの給水拠点が停止した場合、影響を受けるエリアがわかります。

5.4.5 生化学ネットワークの例

生化学プロセスは、生体内の反応および調節を表す生化学ネットワークとしてモデル化できます。たとえば、代謝パスウェイは酵素反応に関連するネットワークで、調節パスウェイは蛋白質間の相互作用を表します。この例では、パスウェイがネットワークで、遺伝子、蛋白質および化合物がノードです。また、ノード間の反応がリンクになります。生化学ネットワークに関する重要な操作には、パスおよびノードの度数の計算が含まれます。

5.5 ネットワーク階層

一部のネットワーク・アプリケーションでは、異なる抽象化レベルでの表現が必要です。たとえば、2つの主なプロセスがリンクで接続された最も高い抽象化レベルのノードとして表され、それぞれの主なプロセスがノードおよびリンクで表現された1段階低いレベルの複数の下位プロセスを持つ場合があります。

ネットワーク階層を使用すると、各ノードに階層レベルを割り当てることによって、ネットワークを複数の抽象化レベルで表現できます。(リンクには階層レベルは割り当てられません。リンクは、同じ階層レベルまたは異なる階層レベルのノード間に設定できます。)階層内で最も低い(最も詳細な)レベルはレベル1で、これより高いレベルは順にレベル2、レベル3のように番号が付けられます。

ネットワーク階層で隣接するレベルのノードには、親子関係があります。上位レベルの各ノードは、下位レベルの1つ以上のノードに対する親ノードになります。下位レベルの各ノードは、上位レベルの1つのノードの子ノードになります。同じ親ノードを持つノードは、兄弟ノードになります。

リンクにも、親子関係がある場合があります。ただし、リンクには階層レベルが割り当てられないため、リンクの親子関係とネットワーク階層レベルには関連性がない場合もあります。同じ親リンクを持つリンクは、兄弟リンクになります。

図5-3に、2つのレベルが存在する単純な階層ネットワークを示します。

図5-3 ネットワークの階層

図5-3の説明が続きます
図5-3「ネットワークの階層」の説明

次に、図5-3について説明します。

  • 上位レベル(レベル2)には、2つのノードが含まれます。各ノードは、下位レベルの複数のノードに対する親ノードです。上位レベルのノード間のリンクは、下位レベルのノード間の2つのリンクに対する親リンクです。

  • 下位レベル(レベル1)は、上位レベルの各ノードを構成するノードを示します。また、上位レベルの各親ノードの子ノードであるノード間のリンク、および異なる親ノードを持つノード間のリンクを示します。

  • 異なる親ノードを持つ下位レベルのノード間のリンクは、太い接続線で示されています。これらのリンクは、階層の上位レベルのノード間の単一のリンクの子リンクです。(ただし、下位レベルでのこれらの2つのリンクを、上位レベルのノード間の親リンクの子リンクとして定義しない場合もあります。)

  • それぞれの親ノードと親リンク、およびその子ノードと子リンクとの間の親子関係は、両端に矢印がある破線で示されています。

図5-3には示しませんが、異なる階層レベル間にリンクを設定できます。たとえば、上位レベルのノードと下位レベルの任意のノードとの間にリンクを定義できます。この場合、リンク間には親子関係がありません。

ネットワーク内の特定のノード・グループについて、親ネットワークを定義できます。子ネットワーク内のグループIDは、親ネットワーク内のノードIDとして使用されます。子ネットワーク内のグループ間の集約リンクは、親ネットワーク内のリンクを表し、任意のリンクIDが割り当てられます。

ネットワークでは、ノードをグループ化する方法を様々な基準に応じて複数使用することができるため、複数の親ネットワークを持つことができます。また、親ネットワーク内のノードをさらにグループ化して、上位レベルの親ネットワークを形成することもできます。たとえば、ソーシャル・ネットワークでは、メンバーを市、職業、所得などの基準でグループ化できます。たとえば、市でグループ化されたメンバーを、上位レベルの郡、州または国のネットワークにさらにグループ化できます。

ネットワークの親子関係は、ネットワーク・メタデータのCHILD_NETWORK列およびHIERARCHY_TABLE_NAME列を使用して定義されます。

注意:

階層ネットワークを、複数のリンク・レベルを持つネットワークであるマルチレベル・ネットワークと混同しないでください。マルチレベル・ネットワークは、ノード間で親子関係を持つ必要はないため、階層ネットワークになる場合と階層ネットワークにならない場合があります。マルチレベル・ネットワークでは、上位レベルのネットワーク(レベル2など)は、下位レベルのネットワーク(レベル1など)のサブネットワークにすぎず、下位ネットワークは、上位レベルのリンク以上のリンク・レベルを持ちます。

5.6 ネットワーク・ユーザー・データ

xxx_SDO_NETWORK_USER_DATAビューを介して定義されたユーザー・データについては、ネットワーク分析中にユーザー・データにアクセスする場合、デフォルトのユーザー・データI/O実装(LODUserDataIOSDO)が使用されます。ただし、一部のユーザー・データは、ノード表またはリンク表に含まれていないため、xxx_SDO_NETWORK_USER_DATAビューを介して登録できません。

このようなユーザー・データについては、ユーザーが、ユーザー・データI/Oインタフェースの独自のカスタム実装を提供する必要があります。カスタムのデータI/Oインタフェースを実装する一般的な方法は、ノードおよびリンクのユーザー・データに対応したBLOB (各パーティションごとに1つのBLOB)を生成してから、ネットワーク分析中にBLOBからユーザー・データ情報を取得することです。

ネットワーク・データ・モデル・グラフを使用すると、複数のカテゴリのユーザー定義データ(カテゴリ分けされたユーザー・データ)を単一のネットワークに関連付けることもできます。たとえば、マルチモーダル・ネットワークでは、リンクのマルチモーダル属性の他に、運転に関連する属性(制限速度など)をリンクに関連付ける必要がある場合、ユーザー定義データを2つのカテゴリ(1つは運転に関連する属性用で、もう1つはマルチモーダル属性用)に整理できます。

このようなユーザー定義データの例は、次を参照してください。

トピック:

5.6.1 ユーザー定義データの例(PL/SQLおよびJava)

この項では、ネットワークのユーザー定義データの使用例を示します。ユーザー定義データとは、ユーザーがネットワーク表現と関連付ける(接続性とは関係のない)情報です。USER_SDO_NETWORK_USER_DATAメタデータ・ビューとALL_SDO_NETWORK_USER_DATAメタデータ・ビュー(「xxx_SDO_NETWORK_USER_DATAビュー」を参照)のどちらにも、ユーザー定義データに関する情報が含まれます。

ユーザー定義データを使用するには、適切なxxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)のUSER_DEFINED_DATA列値をYに設定する必要があります。

例5-1では、リンク関連のユーザー定義データをネットワーク・メタデータに挿入します。

例5-1 ユーザー定義データのネットワーク・メタデータへの挿入

-- Insert link user data named 'interaction' of
-- type varchar2 (50) in network 'bi_test'.
--'interaction' is a column of type varchar2(50) in the link table of network 'bi_
test'.
insert into user_sdo_network_user_data (network, table_type, data_name, data_type, data_length, category_id) 
                  values ('bi_test', 'LINK', 'interaction', 'VARCHAR2', 50, 0) ;
-- insert link user data named 'PROB' of type Number.
--'PROB' is a column of type NUMBER in the link table of network 'bi_test'.
insert into user_sdo_network_user_data (network, table_type, data_name, data_type, category_id)
                  values ('bi_test','LINK','PROB','NUMBER', 0) ;
 
After a network or network partition is loaded, user-defined data is available in Java representations. You can access user-defined data through the getCategorizedUserData and setCategorizedUserData methods for the Node, Link, Path, and SubPath interfaces. For example:
 
//The user data index is the sequence number of a user data within a category sorted by data name.
 
int interactionUserDataIndex = 0;
int probUserDataIndex = 1;
 
String interaction = (String)link.getCategorizedUserData().getUserData(0).
                                get(interactionUseDataIndex);
 
double prob = ((Double)link.getCategorizedUserData().getUserData(0).
                       get(probUserdataIndex)).doubleValue();

5.6.2 ユーザー定義データの例(カスタムのユーザー・データI/O実装)

この項では、LODUserDataIOインタフェースのカスタムのユーザー・データI/O実装(デフォルト以外の実装)の例を示します。例5-2では、リンクに関連付けられたユーザー・データがBLOB (各パーティションごとに1つのBLOB)に書き込まれ、分析中にBLOBから読み込まれます。この例では、各パーティションのマルチモーダル・データに対するユーザー定義データのBLOBには、パーティションIDとパーティションに関連付けられたリンクの数が含まれ、その後に各リンクの<Link ID, link route ID>が含まれていることを前提としています。

例5-2 LODUserDataIOのwriteUserDataメソッドの実装

//Method getLinksInPartition(partitionId) computes a vector that
// consists of  the ID and the route ID of each link associated with a partition
// with ID = partitionId
LinkVector = getLinksInPartition(partitionId);

ObjectOutputStream dout = null;

//Insert an empty blob for the partition with ID = partition_id
String insertStr = "INSERT INTO " + MULTIMODAL_USER_DATA +
                             " (partition_id, blob) " + " VALUES " + " (?, EMPTY_LOB())" ;

PreparedStatement stmt = conn.prepareStatement(insertStr);
stmt.setInt(1,partitionId);
int n = stmt.executeUpdate();
stmt.close();

//lock the row for blob update
 String lockRowStr = "SELECT blob FROM " + MULTIMODAL_USER_DATA +
                                  " WHERE partition_id = ? " + " FOR UPDATE";
 stmt = conn.prepareStatement(lockRowStr);
 stmt.setInt(1,partitionId);
 ResultSet rs = stmt.executeQuery();

 rs.next();
oracle.sql.BLOB userDataBlob = (oracle.sql.BLOB) rs.getBlob(1);
stmt.close();

 OutputStream blobOut = ((oracle.sql.BLOB) userDataBlob).setBinaryStream(1);
 dout = new ObjectOutputStream(blobOut);

 //write partition ID
 dout.writeInt(partitionId);
 int numLinks = linkVector.size()

  for (int i=0; i<linkVector.size(); i++) {
        //MultimodalLink is a class with variables link ID and route ID
        MultimodalLink link = (MultimodalLink) linkVector.elementAt(i);
         //write link ID 
        dout.writeLong(link.getLinkId());

        // write route ID into file
        dout.writeInt(link.getRouteId());
   }
   dout.close();
    blobOut.close();
    rs.close();

後に続く項では、LODUserDataIOインタフェースのwriteUserDataメソッドとreadUserDataメソッドの実装について説明します。

トピック:

5.6.2.1 LODUserDataIOのwriteUserDataメソッドの実装

LODUserDataIOのwriteUserDataメソッドの実装では、ユーザー定義データのBLOB表の名前がMULTIMODAL_USER_DATAであると想定されています。

//Method getLinksInPartition(partitionId) computes a vector that
// consists of  the ID and the route ID of each link associated with a partition
// with ID = partitionId
LinkVector = getLinksInPartition(partitionId);

ObjectOutputStream dout = null;

//Insert an empty blob for the partition with ID = partition_id
String insertStr = "INSERT INTO " + MULTIMODAL_USER_DATA +
                      " (partition_id, blob) " + " VALUES " + " (?, EMPTY_BLOB())" ;

PreparedStatement stmt = conn.prepareStatement(insertStr);
stmt.setInt(1,partitionId);
int n = stmt.executeUpdate();
stmt.close();

//lock the row for blob update
 String lockRowStr = "SELECT blob FROM " + MULTIMODAL_USER_DATA +
                                  " WHERE partition_id = ? " + " FOR UPDATE";
 stmt = conn.prepareStatement(lockRowStr);
 stmt.setInt(1,partitionId);
 ResultSet rs = stmt.executeQuery();

 rs.next();
oracle.sql.BLOB userDataBlob = (oracle.sql.BLOB) rs.getBlob(1);
stmt.close();

 OutputStream blobOut = ((oracle.sql.BLOB) userDataBlob).setBinaryStream(1);
 dout = new ObjectOutputStream(blobOut);

 //write partition ID
 dout.writeInt(partitionId);
 int numLinks = linkVector.size()

  for (int i=0; i<linkVector.size(); i++) {
        //MultimodalLink is a class with variables link ID and route ID
        MultimodalLink link = (MultimodalLink) linkVector.elementAt(i);
         //write link ID 
        dout.writeLong(link.getLinkId());

        // write route ID into file
        dout.writeInt(link.getRouteId());
   }
   dout.close();
    blobOut.close();
    rs.close();
5.6.2.2 LODUserDataIOのreadUserDataメソッドの実装

ユーザー定義データにアクセスするには、NodeLinkPathおよびSubPathインタフェースのgetCategorizedUserDataメソッドおよびsetCategorizedUserDataメソッド、およびCategorizedUserDataインタフェースのgetUserDataメソッドおよびsetUserDataメソッドを使用します。

//Read the blob for the required partition from the user data blob table
// In this example,
// MULTIMODAL_USER_DATA  is the name of user –defined data blob table
BLOB multimodalBlob = null;
String queryStr = "SELECT blob FROM " + MULTIMODAL_USER_DATA                                
                             " WHERE partition_id = ?";
PreparedStatement stmt = conn.prepareStatement(queryStr);
stmt.setInt(1,partitionId);
ResultSet rs = stmt.executeQuery();
if (rs.next())   {
     multimodalBlob = (oracle.sql.BLOB)rs.getBlob(1);
}
 
// Materialize the blob value as an input stream        
InputStream is = multimodalBlob.getBinaryStream();
 
//Create an ObjectInputStream that reads from the InputStream is
ObjectInputStream ois = new ObjectInputStream(is);
 
//Read the values of partition ID and number of links from the blob
int partitionId = ois.readInt();
int numLinks = ois.readInt();
 
for (int i=0; i<numLinks; i++)  {
 
    //Read link ID and route ID for each link
     long linkId = ois.readLong();
     int routeId = ois.readInt();
 
     //MultimodalLinkUserData is an implementation of NDM LOD UserData interface
     //Implementation is provided at the end of the example 
     linkUserData = new MultimodalLinkUserData(routeId);
 
     //Get the link object corresponding to the link ID
     LogicalNetLink link = partition.getLink(linkId);
 
     //Get the (categorized) user data associated with the link. 
     CategorizedUserData cud = link.getCategorizedUserData();
    
     // If the link does not have categorized user data associated with it,
     // initialize it to linkUserData
     // Else, set the user data for category USER_DATA_MULTIMODAL 
     // to linkUserData 
     if (cud == null) {
            UserData [] userDataArray = {linkUserData};
            cud = new CategorizedUserDataImpl(userDataArray);
             link.setCategorizedUserData(cud);
     }
     else {                   
            cud.setUserData(USER_DATA_MULTIMODAL,linkUserData);
     }
}

次のセグメントでは、分析中にユーザー定義データ(具体的にはリンクに関連付けられたルートID)を読み取る方法を示します。

//info is an instance of LODAnalysisInfo 
LogicalLink currentLink = info.getCurrentLink();
 
//Read the user-defined data (in this case, route ID) 
int linkRouteId   = (Integer)currentLink.getCategorizedUserData().
                           getUserData(USER_DATA_MULTIMODAL).                                      
                           get(INDEX_LINK_ROUTEID);
        
 
Implementation of MultimodalLinkUserData :
 
class MultimodalLinkUserData implements UserData
{
    private int routeId;
 
    protected MultimodalLinkUserData(int routeId)
   {
        this.routeId = routeId;
   }
 
  public Object get(int index)
  {
    switch(index)
    {
         case INDEX_LINK_ROUTEID:
              return routeId;
    }
    return null;
  }
 
  public void set(int index, Object userData)
  {
    switch(index)
    {
         case INDEX_LINK_ROUTEID:
            this.routeId = (Integer) userData;
    }
  }
 
  public int getNumberOfUserData()
  {
       return 1;
  }
 
  public Object clone()
{
    return new MultimodalLinkUserData(routeId);
  }
}

5.7 フィーチャ・モデリング

ネットワーク上の対象オブジェクトをフィーチャとしてモデル化できます。

フィーチャは1つまたは複数のフィーチャ要素で構成されます。フィーチャ要素は、ネットワークに沿った点、リンクまたは部分リンクです。フィーチャ・レイヤーはネットワークの上に定義できます。たとえば、レストランとホテルをそれぞれ道路ネットワーク上のフィーチャ・レイヤーとして定義したり、スイッチを電気ネットワーク上のフィーチャ・レイヤーとして定義できます。

フィーチャ・モデリングを使用する一般的な手順は次のとおりです。

  1. フィーチャ・レイヤーを作成します。

    たとえば、道路ネットワーク上の対象点(POI)をフィーチャとしてモデル化できます。POIの各タイプ(ホテル、レストラン、病院、学校など)は、1つのフィーチャ・レイヤーに対応します。次の例では、ホテルのフィーチャ・レイヤーを追加します。

    sdo_net.add_feature_layer(
       'US_ROAD_NETWORK', --network name
       'HOTEL',           --feature layer name
       2,                 --feature layer type: point on link
       'HOTEL_TAB',       --feature table or view name
       'HOTEL_NET_REL',   --relation table or view name
       null);             --hierarchy table or view name
    
  2. フィーチャ・ユーザー・データを登録します(アプリケーション固有のフィーチャ属性がフィーチャ分析で役立つ可能性がある場合)。

    フィーチャ・ユーザー・データを登録するには、TABLE_TYPE列をフィーチャ表の名前に設定することを除き、ネットワークのノードまたはリンクのユーザー・データを登録する場合と同じように、XXX_SDO_NETWORK_USER_DATAビューにエントリを追加します。次の例では、ホテル名をホテル・フィーチャのユーザー・データとして追加します。

    INSERT INTO USER_SDO_NETWORK_USER_DATA(
       network, table_type, data_name, data_type, category_id)
    VALUES(
       'US_ROAD_NETWORK',  --network name
       'HOTEL_TAB', 	       --feature table or view name
       'NAME',             --user data name, i.e., name of the user data column
       'VARCHAR2',         --user data type
       3);                 --user data category
    
  3. フィーチャ・レイヤーのフィーチャの追加、更新または削除を行います。

    フィーチャ表、フィーチャ要素関係表およびフィーチャ階層表(すべて「フィーチャ・レイヤー表」を参照)またはこれらの表の組合せの内容は、データ・プロバイダにより管理されますので、この手順は省略できます。省略しない場合は、SDO_NETパッケージに含まれるプロシージャ(ADD_FEATURE、UPDATE_FEATURE、DELETE_FEATURESなど)をコールして、フィーチャ・レイヤー内のフィーチャの追加、更新または削除を行います。(SDO_NETサブプログラムについては、「SDO_NETパッケージ・サブプログラム」を参照してください。)

  4. NetworkAnalystを使用してフィーチャ分析を実行します。フィーチャ分析ファンクションには、次のものがあります。

    • フィーチャ間の最短パス

    • 最も近い(到達)フィーチャ

    • コスト範囲内の(到達)フィーチャ

トピック:

5.7.1 フィーチャ・モデリングに使用するデータ型

この項では、フィーチャ・モデリングに関連する一部のSDO_NETパッケージ・サブプログラムのパラメータおよび戻り値に使用される、次のPL/SQLデータ型について説明します。

  • SDO_NET_FEAT_ELEM_ARRAY

  • SDO_NET_FEAT_ELEM

  • SDO_NET_LAYER_FEAT_ARRAY

  • SDO_NET_LAYER_FEAT

  • SDO_NETWORK_NVP_TAB

  • SDO_NETWORK_NVP

SDO_NET_FEAT_ELEM_ARRAYは、VARRAY(1024) OF MDSYS.SDO_NET_FEAT_ELEMとして定義されます。

SDO_NET_FEAT_ELEMは次のとおり定義されます。

FEAT_ELEM_TYPE    NUMBER
NET_ELEM_ID       NUMBER
START_PERCENTAGE  NUMBER
END_PERCENTAGE    NUMBER

SDO_NET_LAYER_FEAT_ARRAYは、VARRAY(1024) OF MDSYS.SDO_NET_LAYER_FEATとして定義されます。

SDO_NET_LAYER_FEATは次のとおり定義されます。

FEATURE_LAYER_ID  NUMBER
FEATURE_ID        NUMBER

SDO_NETWORK_NVP_TABは、TABLE OF MDSYS.SDO_NETWORK_NVPとして定義されます。

SDO_NETWORK_NVPは次のとおり定義されます。

NAME   VARCHAR2(128)
VALUE  VARCHAR2(1024)

5.8 ネットワーク・フィーチャ編集(NFE)を使用したフィーチャ・モデリング

ネットワーク・フィーチャ編集(NFE)を使用すると、NFEモデルを作成および管理できます。NFEモデルにより、フィーチャ・モデリング機能が拡張され、Java SwingコンポーネントおよびPL/SQL APIを使用してフィーチャをビジュアル化し、操作できるようになります。

NFEを使用すると、既存のネットワークの上にフィーチャを定義できます。たとえば、レストランやホテルをフィーチャとして道路ネットワーク上に定義できます。また、フィーチャのみで構成され(ネットワーク要素はユーザーに非表示)、接続性をルールによって制限できるモデルを定義することもできます。このような接続性の制限は通常、ライフライン・ネットワーク(電気、水道、ガスのネットワークなど)で、ネットワーク装置をモデル化して接続性を制限するために使用します。接続性の制限の使用例の1つとして、電気ネットワークにおける高圧装置と低圧装置間の接続回避があります

NFEには、フィーチャ・クラスやルールといった概念が含まれており、これらはモデルに組み込むことができます。メタデータ表とメタデータ・ビューは、NFEモデルを作成して使用すると、自動的に作成および管理されます。

NFEフィーチャの使用に必要な最小権限は、CREATE TABLECREATE VIEWCREATE SEQUENCEおよびCREATE SESSIONです。これらの権限は、特にNFEに関連しない操作を実行するのに必要となる他の権限に付加されます。

トピック:

5.8.1 NFEモデルの作成モード

ネットワーク・フィーチャ編集(NFE)モデルは、"最初から"と"既存のネットワーク・モデルの上に"という2つのモードのいずれかで作成できます。

  • 最初から: このモードでは、NFEモデルの作成時にネットワークが自動的に生成され、それがモデルに割り当てられます。フィーチャのみを使用し、基礎となるネットワーク要素は表示されません。このモードでは、どの種類のフィーチャ(フィーチャ・クラス)が他の各種フィーチャと接続できるかを文が指定するルールがサポートされます。このモードの典型的な使用方法の1つは、ネットワーク内の特定のコンポーネント間で接続を制限する必要があるライフライン・ネットワーク(電気や水道のネットワークなど)のモデル化です。

  • 既存のネットワーク・モデルの上に: このモードでは、NFEモデルの作成時に既存のネットワークが使用されます。ネットワークはユーザーに表示され、ネットワーク要素にフィーチャを追加できます。このモードでは、ルールはサポートされません

フィーチャ・クラス関係表には、フィーチャとフィーチャ・クラス間の関係(どのフィーチャがどのフィーチャ・クラスに属するか)に関する情報が含まれます。

5.8.2 NFEフィーチャ・クラス

フィーチャ・クラスは、属性値、形状および形式に基づいたフィーチャのグループを表します。各フィーチャ・クラスは1つのフィーチャ・レイヤーにしか属さないため、フィーチャ・クラス内のフィーチャのグループも同じフィーチャ・レイヤーに属します。

たとえば、電気ネットワークに変圧器と導体という2つのフィーチャ・レイヤーがあるとします。これらのフィーチャ・レイヤーにはそれぞれ、次の2つのフィーチャ・クラスを含めることができます。

  • 変圧器フィーチャ・レイヤーには、HT変圧器(高圧変圧器)とLT変圧器(低圧変圧器)を含めることができ、各フィーチャ・タイプ内の変圧器は入力電圧、出力電圧および電圧タイプを指定しています。どちらのフィーチャ・タイプも点(形状)に関連付けられます。フィーチャ・タイプには、図で使用するためにそれぞれ異なるアイコンが関連付けられています。

  • 導体フィーチャ・レイヤーには、HT導体(高圧導体)とLT導体(低圧導体)を含めることができ、各フィーチャ・タイプ内の導体は属性値を指定しています。どちらのフィーチャ・タイプも線(形状)に関連付けられます。フィーチャ・タイプには、図で使用するためにそれぞれ異なるアイコンが関連付けられています。

次の表に、フィーチャ・クラスに関連付けることができる形状と、NFEモデルに使用する作成モードに応じた要件および制約を示します。

表5-3 NFEフィーチャ・クラスの形状

形状タイプ(番号) 形状名 最初から作成されるモデル 既存のネットワークの上に作成されるモデル
1 フィーチャが保持できるのは、1つのPointOnNodeフィーチャ要素のみです。 フィーチャは、1つ以上のPointOnNodeタイプおよびPointOnLineタイプのフィーチャ要素を保持できます。
2 フィーチャが保持できるのは、1つの線フィーチャ要素のみです。線では、開始点と終了点でのみ接続がサポートされます。 フィーチャには、1つ以上の線フィーチャ要素を含めることができます。線が隣接するかどうかは問題ではありません。
3 複雑な線 フィーチャは、複数の隣接する(接続された)線フィーチャ要素を保持できます。複雑な線では、中間点での接続がサポートされています。その場合、複雑な線は2つの線フィーチャ要素に分割されます。 (複雑な線は、この作成モードではサポートされません。)
4 パス パスを表すフィーチャです。このタイプのフィーチャ・クラスは通常、分析の実行時に使用します。 パスを表すフィーチャです。このタイプのフィーチャ・クラスは通常、分析の実行時に使用します。

5.8.3 NFEルール

NFEモデルでのルールとは、フィーチャ接続に関連する制約です。ルールが使用できるのは、最初から作成されるモデルに対してのみで、既存のネットワークの上に作成されるモデルには使用できません。ルールは、カスタマイズでき、あらゆる接続制約に対応できます。

ルールは通常、カーディナリティ・ルールと接続性ルールに分けられます。

  • カーディナリティ・ルールは、特定の特性を持つ(同じフィーチャ・クラスに属する)点フィーチャに対して、点フィーチャで受け入れられる入出力接続の最大数および最小数を指定するために使用します。

  • 接続性ルールは、2つのフィーチャが特定の特性(フィーチャ・レイヤー、フィーチャ・クラス、属性)をいくつか持ち、固有の相互作用がある場合に、それらを接続できるかどうかを示すのに使用します。接続性ルールは、関連するカーディナリティ・ルールによって決められたとおり、必要な対応する入出力接続のサポートに使用可能な空間が点フィーチャにあれば、点フィーチャとの接続を許可します。

    接続性ルールは、NFE内のフィーチャに接続するための唯一の方法であり、常に肯定(接続を許可)であり、否定はできません。要素間に接続性ルールが存在しない場合、その要素は接続できないことを意味します。

線-点接続性ルール

線-点接続性ルールは、線フィーチャと点フィーチャが一定の方法で相互作用するときは常に、接続できることを示します。

線-点接続性ルールは、カーディナリティ・ルールとともに、次のように表現できます: "フィーチャ・クラスC1が条件P1に合致するフィーチャ・レイヤーL1の線フィーチャはいずれも、フィーチャ・クラスC2が条件P2に合致するフィーチャ・レイヤーL2の点フィーチャに接続できます。点フィーチャのカーディナリティは、X入力接続の最大数とY出力接続の最大数が許可されることを示します。"

次の表に、線-点接続性ルールの例を示します。

表5-4 線-点接続性ルールの例

線の条件 点の条件 カーディナリティ 説明
導体レイヤーのHT導体クラス 変圧器レイヤーのHT変圧器クラス 制限なし 任意の数の高圧導体が1つの高圧変圧器に接続できます。
導体レイヤーのHT導体クラス 変圧器レイヤーのLT変圧器クラス 入力: 制限なし、出力: 0 任意の数の入力高圧導体が1つの低圧変圧器に接続できますが、出力高圧導体は低圧変圧器から接続できません。

低圧変圧器は、高圧導体から低圧導体に電圧を下げます。

導体レイヤーのLT導体クラス 変圧器レイヤーのLT変圧器クラス 制限なし 任意の数の低圧導体が1つの低圧変圧器に接続できます。

線-線接続性ルール

線-線接続性ルールは、2つの線フィーチャが一定の方法で相互作用するとき、特定の1つの点フィーチャを通して接続できることを示します。このルールは、線フィーチャ間で相互作用が発生したときに、接続点がまだ存在しない場合は自動的に作成するように指定することもできます。別の見方をすると、線-線ルールは同じ点フィーチャ制約を共通に持つ2つの線-点ルールであるため、そういう意味では、線-線ルールとは同じ点フィーチャ条件を持つ2つ線-点ルールのことを指します。

線-線接続性ルールの例を次のように表すことができます: "(フィーチャ・クラスC1が条件P1に合致するフィーチャ・レイヤーL1の線フィーチャ1)と(フィーチャ・クラスC2が条件P2に合致するフィーチャ・レイヤーL2の線フィーチャ2)の間で相互作用Iが真である場合、線は(点フィーチャP1)を使用して接続できます(オプション: 点フィーチャP1が存在しない場合は自動的に作成します)。"

線-線接続性ルールの左辺と右辺

線-線接続性ルールは、線フィーチャ1と線フィーチャ2という2つの線フィーチャ間の相互作用を指定します。これらの2つの線フィーチャはそれぞれ、ルールの左辺(LHS)ルールの右辺(RHS)と呼ばれます。線フィーチャ1のフィーチャはいずれもルールのLHSにあるとみなされ、線フィーチャ2のフィーチャはいずれもルールのRHSにあるとみなされます。

次の表に、ルールのLHSおよびRHSの線フィーチャ・グループを識別して、電気ネットワーク・モデルに適した線-線ルールの例を示します。表の各行は、1つの線-線ルールを表します。

表5-5 サンプルの線-線ルールのLHSとRHS

LHSの線フィーチャ・グループ 相互作用タイプ RHSの線フィーチャ・グループ 共通の点 説明
導体レイヤーのHT導体クラス 終了点に接触 導体レイヤーのHT導体クラス 変圧器レイヤーのHT変圧器クラス 高圧導体は、終了点に接触すると高圧変圧器によって自動的に相互接続されます。
導体レイヤーのLT導体クラス 終了点に接触 導体レイヤーのLT導体クラス 変圧器レイヤーのLT変圧器クラス 低圧導体は、終了点に接触すると低圧変圧器によって自動的に相互接続されます。
導体レイヤーのHT導体クラス 終了点に接触 導体レイヤーのLT導体クラス 変圧器レイヤーのLT変圧器クラス 高圧導体は、終了点に接触すると低圧変圧器によって自動的に低圧導体に接続されます。

ルール・デシジョン・ハンドラ

ルールはルール・デシジョン・ハンドラを使用してカスタマイズでき、ルール・デシジョン・ハンドラは線-点ルールと線-線ルールの両方に適用できます。デシジョン・ハンドラは、相互作用において接続する必要がある要素と接続方法をユーザーが決定できるメカニズムです。

ルールの実装では常にデシジョン・ハンドラを使用してフィーチャ間の接続を管理します。NFEには、線-点ルールおよび線-線ルール用にフィーチャを接続するためのデフォルト実装が用意されています。ルールを実行すると、デフォルトのデシジョン・ハンドラの実装は、ルールに合致する要素をできるだけ多く接続しようとしますが、デフォルトで提供されるルールよりも詳細に接続を制御する必要があるシナリオも考えられ、その場合、デフォルトのデシジョン・ハンドラの実装を変更する必要があります。

水道ネットワークの例を使用して、2つのバルブが空間点でパイプと相互作用できるとします。各バルブには、4つの排出口があります。(A) 4つすべてのパイプの端が1つのバルブの4つ排出口に接続できるか、または(B) 2つのパイプの端があるバルブの向かい合う2つの排出口に接続でき、残りの2つのパイプの端は別のバルブの向かい合う2つの排出口に接続できます。デフォルトのデシジョン・ハンドラの実装は、最初の(4つすべてのパイプの端を1つのバルブに接続する)方式を試みます。しかし、2つの使用可能なバルブで4つのパイプを分散する場合は、2番目の(2つのパイプの端を1つ目のバルブに接続し、残りの2つのパイプの端を2つ目のバルブに接続する)方式を採用するカスタム・デシジョン・ハンドラを実装できます。

ルール・インスタンス

特定のルールの適用によってフィーチャが接続される場合、接続されるフィーチャのグループはルール・インスタンス(接続を許可したルールのインスタンス)と呼ばれます。ルール・インスタンスは、ルール・インスタンス表に保持されます。

ルール定義は、依存するルール・インスタンスが存在しない(既存のルール・インスタンスに依存する接続がない)場合のみ削除または変更できます

ルール・インスタンスに含まれるフィーチャ要素を削除した場合、ルール・インスタンスは自動的に削除されるとはかぎりません。フィーチャ要素の削除によって要素の数がルール・インスタンスに対する最小数(ルールのタイプに応じて異なる)を下回った場合、ルール・インスタンスは削除されます。しかし、フィーチャ要素の削除によって要素の数がルール・インスタンスに対する最小数を下回らない場合、フィーチャ要素はルール・インスタンスから削除されますが、ルール・インスタンス自体は削除されません(ただし変更されます)。

5.8.4 NFE接続性ルールに使用するデータ型

この項では、ネットワーク・フィーチャ編集(NFE)に関連する一部のSDO_NFEパッケージ・サブプログラムのパラメータおよび戻り値に使用される、次のPL/SQLデータ型について説明します。

  • SDO_INTERACT_POINT_FEAT_ARRAY

  • SDO_INTERACT_POINT_FEAT

  • SDO_INTERACT_LINE_FEAT_ARRAY

  • SDO_INTERACT_LINE_FEAT

  • SDO_INTERACTION_ARRAY

  • SDO_INTERACTION

SDO_INTERACT_POINT_FEAT_ARRAYは、VARRAY(1024) OF MDSYS.SDO_INTERACT_POINT_FEATとして定義されます。

SDO_INTERACT_POINT_FEATは次のとおり定義されます。

FEATURE_LAYER_ID   	NUMBER 
FEATURE_ID         	NUMBER 
FEATURE_CLASS_ID   	NUMBER
NODE_ID            	NUMBER 
NODE_GEOM          	SDO_GEOMETRY
AVAILABLE_IN_CONN  	SDO_NUMBER_ARRAYSET
AVAILABLE_OUT_CONN	SDO_NUMBER_ARRAYSET
RUNTIME_CREATED 		CHAR(1)

SDO_INTERACT_LINE_FEAT_ARRAYは、VARRAY(1024) OF MDSYS.SDO_INTERACT_LINE_FEATとして定義されます。

SDO_NET_LAYER_FEATは次のとおり定義されます。

FEATURE_LAYER_ID  	NUMBER
FEATURE_ID        	NUMBER
FEATURE_CLASS_ID  	NUMBER
LINK_ID           	NUMBER
LINK_GEOM         	SDO_GEOMETRY
START_NODE        	SDO_INTERACT_POINT_FEAT
END_NODE          	SDO_INTERACT_POINT_FEAT
BIDIRECTED        	CHAR(1)
INTERSECTION_LOCATION 	NUMBER
RULE_SIDE         	CHAR(1)

SDO_INTERACTION_ARRAY は、VARRAY (1048576) OF MDSYS.SDO_INTERACTIONとして定義されます。

SDO_INTERACTIONは次のとおり定義されます。

LINES             SDO_INTERACT_LINE_FEAT_ARRAY
POINTS            SDO_INTERACT_POINT_FEAT_ARRAY
INTERSECT_PT_GEOM SDO_GEOMETRY

5.9 ネットワーク制約

ネットワーク制約は、ネットワーク分析の計算に対して定義される制限事項です。

たとえば、道路ネットワークでは、一方通行や「左折禁止」標識などによる右/左折禁止リストがネットワーク制約になります。この場合、それぞれの右/左折禁止は、リンクの組合せ(開始リンクと、その開始リンクから右/左折できない終了リンクの組合せ)で表現されます。また、運転ルートに有料道路や高速道路を含めないという制限もネットワーク制約になります。

ネットワーク制約を作成するには、制約を実装するJavaクラスを作成し、SDO_NET.REGISTER_CONSTRAINTプロシージャを使用して制約を登録する必要があります。ネットワーク分析の操作にネットワーク制約を適用するには、その制約を指定する必要があります。

ネットワーク制約を実装するJavaクラスの例が、ネットワーク・データ・モデル・グラフのデモ・ファイル(「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」を参照)で提供されています。たとえば、ProhibitedTurns.javaファイルは、一連の右/左折禁止を定義するネットワーク制約を作成してから、2ノード間の最短パスを戻します(最初に制約を適用しない場合の最短パス、続いて制約を適用した場合の最短パスが戻ります)。

5.10 ロード・オンデマンドを使用したネットワーク分析

ロード・オンデマンドとは、ネットワーク分析時に、調査がネットワーク・パーティションに到達するまでは、そのパーティションがメモリーにロードされないことです。

ロード・オンデマンドを使用すると、Oracle Spatial and Graphでは、ほとんどのパーティション化とロードの操作が自動的に実行され、これにより、通常は大規模なネットワークでのメモリーの使用効率を高めることができます。

ロード・オンデマンド分析には、次に説明する主要手順(ネットワークの作成、ネットワークのパーティション、パーティション・キャッシュの構成およびネットワーク分析)が含まれます。

  1. 「ネットワーク・データ・モデル・グラフを使用するための主な手順」で説明する方法のうち1つを使用してネットワークを作成します。

  2. SDO_NET.SPATIAL_PARTITIONプロシージャを使用してネットワークをパーティション化します(「ネットワークのパーティション化」を参照)。

  3. オプションで、パーティションBLOBを生成します(「パーティションBLOBの生成」を参照)。

  4. パーティション・キャッシュを含むロード・オンデマンド環境を構成します(「パーティション・キャッシュの構成」を参照)。

  5. ネットワークを分析します(「ネットワークの分析」を参照)。

注意:

また、ロード・オンデマンド分析は、ネットワーク全体を1つのパーティションとして扱うことによって、パーティション化されていないネットワークでも使用できます。小規模なネットワークでは、ネットワークをパーティション化してもメリットが得られない場合があるため、そのようなケースについてはパーティション化を省略してロード・オンデマンドAPIを使用することができます。

ロード・オンデマンドのネットワーク分析の実行とパーティション・キャッシュの構成の例については、「パーティション化とロード・オンデマンド分析の例(PL/SQL、XMLおよびJava)」を参照してください。

パーティション化とロード・オンデマンド分析のその他の例については、Oracle Database Examplesメディアに含まれています(『Oracle Database Examplesインストレーション・ガイド』を参照)。ネットワーク・データ・モデル・グラフの例とデモ・ファイルの詳細は、「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」を参照してください。

トピック:

5.10.1 ネットワークのパーティション化

ネットワークをパーティション化するには、SDO_NET.SPATIAL_PARTITIONプロシージャを使用して、各パーティション内のノードの最大数を指定します。パーティション結果は、自動的に生成されるパーティション表に格納され、パーティション・メタデータ情報がネットワーク・メタデータに挿入されます。(このプロシージャを使用するかわりに、パーティション表を作成および移入することによってネットワークをパーティション化することもできます。)他のSDO_NETサブプログラムを使用してパーティション・メタデータを問い合せることもできます。

パーティション化の方法としては、パーティション間のリンク数を最小限に抑える方法をお薦めします。この方法により、ロードする必要のあるパーティションの数および同じパーティションをリロードする必要がある推定回数を減らします。また、パーティションのサイズが小さすぎると、分析中のパーティションのロードおよびアンロードが多くなります。

メモリーを1GBと想定した場合に推奨されるパーティション当たりのノードの最大数は、5,000から10,000の間です。この数を調整して使用中のアプリケーションに最適な数であることを確認するには、使用可能なメモリー、分析のタイプおよびネットワークのサイズを考慮します。また、パーティション・キャッシュのサイズの構成も考慮する必要があります。

5.10.2 パーティションBLOBの生成

ネットワークのロードのパフォーマンスを向上させるために、オプションで、ネットワーク・パーティションBLOB表にBLOBとしてパーティションを格納できます。パーティションのロード時間の短縮というメリットを得るには、この情報をネットワーク・メタデータ・ビューに格納する必要があります。ネットワークまたはパーティションの情報が更新されると、パーティションBLOBも再生成する必要があることに注意してください。

パーティションBLOBは、ノード数、リンク数、各ノードのプロパティ、各リンクのプロパティなどのネットワーク・パーティション情報を含むデータのバイナリ・ストリームです。パーティションBLOBが存在する場合、Spatial and Graphでは、時間のかかるデータベース問合せを実行せずに、このBLOBを使用してロード操作中に情報を読み取ります。

パーティションBLOBを生成するには、SDO_NET.GENERATE_PARTITION_BLOBSプロシージャを使用します。パーティションBLOBとそのメタデータは、パーティションBLOB表に格納されます。

5.10.3 パーティション・キャッシュの構成

ネットワーク分析を実行する前に、XML構成ファイルを変更してデフォルトの構成をオーバーライドすることにより、パフォーマンスが最適化されるようにネットワーク・パーティション・キャッシュを構成できます。次のものを指定できます。

  • キャッシュ・サイズ: パーティション・キャッシュ内のノードの最大数。

  • パーティション・ソース: ネットワーク表またはパーティションBLOB。

  • 常駐パーティション: キャッシュからフラッシュされることなく、一度ロードされるとメモリー内に保持されるパーティションのID。

  • キャッシュのフラッシュ方針: CachingHandlerの実装のクラス名。

    デフォルトのキャッシュ方針はLeastRecentlyUsedです。この方針では、キャッシュが一杯になると、メモリーから最も古いパーティションがフラッシュされます。他のキャッシュ方針を指定するには、CachingHandlerインタフェースを実装します。

デフォルトのロード・オンデマンド構成ファイルのコピーは、「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」で説明する補足ドキュメントに含まれています。

5.10.4 ネットワークの分析

ネットワークの作成およびパーティション化を行い、オプションでパーティション・キャッシュを構成した後は、分析問合せを発行できます。分析結果は、JavaまたはXML APIのいずれを使用したかによって、Java表現またはXMLの応答で戻されます。詳細は、ロード・オンデマンド(LOD)のJavadocおよびXMLスキーマを参照してください(後者については「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」を参照)。

ロード・オンデマンドのJava APIを使用して分析結果をデータベースに書き込むこともできます。

5.10.5 リンク・レベルを使用した優先順位のモデリング

ロード・オンデマンド方式を使用すると、大規模なネットワークを分析する場合のメモリー制限の影響は小さくなりますが、分析操作の速度が非常に遅いままであることがあります。たとえば、ネットワーク全体を斜めに横切る2つのノードの最短パスの分析では、ネットワーク内のほとんどすべてのリンクを走査することになる可能性があります。そのため、ネットワークに200万個を超えるノードがある場合などは、非常に長い時間がかかります。

ネットワークの分析にかかる時間をさらに短縮するには、異なるリンク・レベルで分析を実行します。リンク・レベルとは、リンクの優先順位のレベルを示す、リンクに割り当てられた正の整数のことです。リンク・レベルが高いほど、優先順位が高くなります。たとえば、道路ネットワークの場合は、2つのリンク・レベル(一般道路に対してはレベル1、高速道路に対してはレベル2)で構成することができます。ネットワーク分析中は、高速道路が一般道路より優先され、最低リンク・レベルが1になります。(リンク・レベルが割り当てられていないリンクには、デフォルトのリンク・レベル1が使用されます。)

リンク・レベルには暗黙的な継承プロパティが含まれています。これは、リンク・レベルの高いネットワークが、リンク・レベルの低いネットワークのサブネットワークとなる必要があるということです。つまり、リンク・レベル2はリンク・レベル1のサブネットワークで、リンク・レベル3はリンク・レベル2のサブネットワークなどのように設定されます。

リンク・レベルはネットワークまたはパーティションのロード時に指定できます。これにより、そのレベルと、そのレベルより高いレベルのリンクがロードされます。一般道路に対してレベル1、および高速道路に対してレベル2が割り当てられている道路ネットワークの例では、ロード操作でリンク・レベル1を指定するとレベルが1および2のリンク(つまり一般道路と高速道路)がロードされますが、ロード操作でリンク・レベル2を指定すると、高速道路のリンクのみがロードされます。高速道路のリンクのみを使用して分析を実行する場合は、ロード操作に対してリンク・レベル2を指定してパフォーマンスを最適化できます。

5.10.6 計算済の分析結果

接続されているコンポーネントの分析などの一部の分析操作には、時間がかかる場合があります。実行時のパフォーマンスを向上させるには、SDO_NET.FIND_CONNECTED_COMPONENTSプロシージャをコールし、このプロシージャにより、ネットワーク内の接続されているコンポーネントを計算して、接続されているコンポーネント表にその結果を格納します。

実行時には、最短パスの分析または到達可能性の分析をコールする前に、接続されているコンポーネント表を問い合せて、対象ノードが同じ接続されているコンポーネントに属しているかどうかを確認できます。計算済のコンポーネント情報が存在しない場合は、最短パスおよび到達可能性の分析で、2つのノードが実際には接続されていないことを検出するまでに長い時間がかかる場合があります。

5.11 ネットワーク・データ・モデル・グラフ表

空間ネットワークの接続性情報は、ノード表およびリンク表の2つの表に格納されます。さらに、パス情報を、パス表およびパスリンク表に格納できます。

これらの表は、CREATE_<network-type>_NETWORKプロシージャを使用してネットワークを作成するときに、自動的に作成することができ、また、SDO_NET.CREATE_NODE_TABLESDO_NET.CREATE_LINK_TABLESDO_NET.CREATE_PATH_TABLEおよびSDO_NET.CREATE_PATH_LINK_TABLEの各プロシージャを使用して作成することもできます。

これらの表には、事前定義の名前を持つ列が含まれます。事前定義の列名は変更できません。ただし、ADD COLUMN句を指定してALTER TABLE文を実行することによって、表に列を追加できます。たとえば、各リンク表およびパス表は1つのCOST列を持つように作成されますが、追加の列を作成し、それらの列をその他の比較可能な属性に関連付けることができます。したがって、各リンクに運転時間、景色のよさ、および危険度を割り当てるには、運転時間にCOST列を使用し、SCENIC_APPEAL列およびDANGER列をリンク表に追加して、アプリケーションによって解釈される値を3つの列すべてに移入します。

次の考慮事項は、スキーマ、表、および任意のOracle Spatial and Graphメタデータ・ビューに格納されている列名に適用されます。たとえば、これらの注意事項は、ネットワーク・メタデータ・ビュー(「ネットワーク・データ・モデル・グラフのメタデータ・ビュー」を参照)に格納されるノード表、リンク表、パス表およびパスリンク表の名前と、これらの表の列名にも適用されます。

  • 名前には、文字、数字、下線のみが使用できます。たとえば、名前にスペース( )、アポストロフィ(')、引用符(")またはカンマ(,)を含めることはできません。

  • 名前の中の文字はすべて、名前がメタデータ・ビューに格納される前または表がアクセスされる前に大文字に変換されます。表名で指定されるすべてのスキーマ名も、同様に変換されます。

トピック:

5.11.1 ネットワーク・レイヤー表

この項のメタデータ表は、フィーチャ・モデリングには関連していません。

トピック:

5.11.1.1 ノード表

各ネットワークには、表5-6で説明する列が含まれるノード表があります。(含まれる列は、ネットワークのタイプ、およびネットワークが階層であるかどうかによって異なります。)

表5-6 ノード表の列

列名 データ型 説明

NODE_ID

NUMBER

ネットワーク内でこのノードを一意に識別するID番号です。

NODE_NAME

VARCHAR2(32)

ノード名です。

NODE_TYPE

VARCHAR2(24)

ノードのタイプを識別するユーザー定義の文字列です。

ACTIVE

VARCHAR2(1)

ノードがアクティブである(ネットワークで認識されている)場合はY、ノードがアクティブでない場合はNです。

PARTITION_ID

NUMBER

(使用しません。かわりに、ノードとパーティションの関係は、「パーティション表」で説明されているパーティション表に格納されます。)

<node_geometry_column>、またはGEOM_IDおよびMEASURE

SDO_GEOMETRY、SDO_TOPO_GEOMETRYまたはNUMBER

空間(SDO、非LRS)ネットワークの場合、ノードに関連付けられたSDO_GEOMETRYオブジェクトです。

空間トポロジ・ネットワークの場合、ノードに関連付けられたSDO_TOPO_GEOMETRYオブジェクトです。

空間LRSネットワークの場合、ノードに関連付けられたジオメトリ・オブジェクトのGEOM_ID列およびMEASURE列の値(いずれもNUMBER型)です。

論理ネットワークの場合、この列は使用しません。

空間SDOネットワークまたはトポロジ・ネットワークの場合、実際の列名は、デフォルト名、またはSDO_NET.CREATE_NODE_TABLEプロシージャのコール時にgeom_columnパラメータの値として指定した名前のいずれかになります。

<node_cost_column>

NUMBER

ノードに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。実際の列名は、デフォルト名、またはSDO_NET.CREATE_NODE_TABLEプロシージャのコール時にcost_columnパラメータの値として指定した名前のいずれかになります。コスト値は、料金所で支払う料金など、必要な任意の値を表すことができます。

HIERARCHY_LEVEL

NUMBER

階層ネットワークでのみ使用されます。このノードのネットワーク階層でのレベルを示す数値です。(ネットワーク階層については、「ネットワーク階層」を参照してください。)

PARENT_NODE_ID

NUMBER

階層ネットワークでのみ使用されます。このノードの親ノードのノードIDです。(ネットワーク階層については、「ネットワーク階層」を参照してください。)

5.11.1.2 リンク表

各ネットワークには、表5-7で説明する列が含まれるリンク表があります。

表5-7 リンク表の列

列名 データ型 説明

LINK_ID

NUMBER

ネットワーク内でこのリンクを一意に識別するID番号です。

LINK_NAME

VARCHAR2(32)

リンク名です。

START_NODE_ID

NUMBER

リンクの開始ノードのノードIDです。

END_NODE_ID

NUMBER

リンクの終了ノードのノードIDです。

LINK_TYPE

VARCHAR2(24)

リンクのタイプを識別するユーザー定義の文字列です。

ACTIVE

VARCHAR2(1)

リンクがアクティブである(ネットワークで認識されている)場合はY、リンクがアクティブでない場合はNです。

LINK_LEVEL

NUMBER

リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

<link_geometry_column>、またはGEOM_ID、START_MEASUREおよびEND_MEASURE

SDO_GEOMETRY、SDO_TOPO_GEOMETRYまたはNUMBER

空間(SDO、非LRS)ネットワークの場合、リンクに関連付けられたSDO_GEOMETRYオブジェクトです。

空間トポロジ・ネットワークの場合、リンクに関連付けられたSDO_TOPO_GEOMETRYオブジェクトです。

空間LRSネットワークの場合、リンクに関連付けられたジオメトリ・オブジェクトのGEOM_ID列、START_MEASURE列およびEND_MEASURE列の値(すべてNUMBER型)です。

論理ネットワークの場合、この列は使用しません。

空間SDOネットワークまたはトポロジ・ネットワークの場合、実際の列名は、デフォルト名、またはSDO_NET.CREATE_LINK_TABLEプロシージャのコール時にgeom_columnパラメータの値として指定した名前のいずれかになります。

<link_cost_column>

NUMBER

リンクに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。実際の列名は、デフォルト名、またはSDO_NET.CREATE_LINK_TABLEプロシージャのコール時にcost_columnパラメータの値として指定した名前のいずれかになります。コスト値は、リンクの推定運転時間など、必要な任意の値を表すことができます。

PARENT_LINK_ID

NUMBER

階層ネットワークでのみ使用されます。このリンクの親リンクのリンクIDです。(ネットワーク階層の親子関係については、「ネットワーク階層」を参照してください。)

BIDIRECTED

VARCHAR2(1)

有向ネットワークの場合のみ使用されます。リンクが無向(開始ノードから終了ノード、終了ノードから開始ノードのどちらの方向にも進むことが可能)の場合はY、有向(開始ノードから終了ノードの方向にのみ進むことが可能)の場合はNです。

5.11.1.3 パス表

各ネットワークにパス表を作成できます。パスは、リンクを順につなげたもので、通常、ネットワーク分析の結果として作成されます。パス表は、この分析の結果を格納する方法を提供します。パス表ごとに、対応するパスリンク表(「パスリンク表」を参照)を作成する必要があります。各パス表には、表5-8で説明する列が含まれます。

表5-8 パス表の列

列名 データ型 説明

PATH_ID

NUMBER

ネットワーク内でこのパスを一意に識別するID番号です。

PATH_NAME

VARCHAR2(32)

パス名です。

PATH_TYPE

VARCHAR2(24)

パスのタイプを識別するユーザー定義の文字列です。

START_NODE_ID

NUMBER

パスの最初のリンクを開始するノードのノードIDです。

END_NODE_ID

NUMBER

パスの最後のリンクを終了するノードのノードIDです。

COST

NUMBER

パスに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。コスト値は、パスの推定運転時間など、必要な任意の値を表すことができます。

SIMPLE

VARCHAR2(1)

単純なパスの場合はY、複雑なパスの場合はNです。単純なパスでは、各リンクを1回使用することによって開始ノードから終了ノードまで横断できる、リンクの順序付けされたリストが形成されます。複雑なパスでは、開始ノードから終了ノードまで移動するために、複数のオプションがあります。

<path_geometry_column>

SDO_GEOMETRY

論理ネットワークを除くすべてのネットワーク・タイプの場合、パスに関連付けられたジオメトリ・オブジェクトです。実際の列名は、デフォルト名、またはSDO_NET.CREATE_PATH_TABLEプロシージャのコール時にgeom_columnパラメータの値として指定した名前のいずれかになります。

論理ネットワークの場合、この列は使用しません。

5.11.1.4 パスリンク表

パス表(「パス表」を参照)ごとに、パスリンク表を作成する必要があります。パスリンク表の各行は、ネットワークのパス内でリンクを一意に識別します。つまり、PATH_ID、LINK_IDおよびSEQ_NOの値の組合せが、ネットワーク内で一意である必要があります。パスリンク表での行の順序は、重要ではありません。各パスリンク表には、表5-9で説明する列が含まれます。

表5-9 パスリンク表の列

列名 データ型 説明

PATH_ID

NUMBER

ネットワークのパスのID番号です。

LINK_ID

NUMBER

ネットワークのリンクのID番号です。

SEQ_NO

NUMBER

パスでのリンクの一意の順序番号です。(順序番号は、1から始まります。)順序番号を使用すると、同じノードおよびリンクをパスに繰り返し含めることができます。

5.11.1.5 サブパス表

各パスには、1つ以上の対応するサブパスを作成できます。ネットワーク内のすべてのサブパスに関する情報は、サブパス表に格納されます。サブパスは、パスに沿った部分的なパスです(「ネットワーク・データ・モデル・グラフの概念」を参照)。サブパス表には、表5-10で説明する列が含まれます。

表5-10 サブパス表の列

列名 データ型 説明

SUBPATH_ID

NUMBER

このサブパスを参照パス内で一意に識別するID番号です。

SUBPATH_NAME

VARCHAR2(32)

サブパス名です。

SUBPATH_TYPE

VARCHAR2(24)

サブパスのタイプを識別するユーザー定義の文字列です。

REFERENCE_PATH_ID

NUMBER

このサブパスを含むパスのパスID番号です。

START_LINK_INDEX

NUMBER

サブパスの開始を定義するために使用するリンクのリンクIDです。たとえば、「ネットワーク・データ・モデル・グラフの概念」図5-2では、START_LINK_INDEXは0で、START_PERCENTAGEは0.65です。

END_LINK_INDEX

NUMBER

サブパスの終了を定義するために使用するリンクのリンクIDです。たとえば、「ネットワーク・データ・モデル・グラフの概念」図5-2では、END_LINK_INDEXは6で、END_PERCENTAGEは0.5です。

START_PERCENTAGE

NUMBER

パスのSTART_LINK_INDEXとその次のリンクの間の距離の割合で、サブパスの開始点を表します。正の数値または負の数値となります。たとえば、「ネットワーク・データ・モデル・グラフの概念」図5-2では、START_LINK_INDEXは0で、START_PERCENTAGEは0.65です。(この場合の割合の値は0から1.0の範囲で表されるので、0.65は65パーセントです。)

END_PERCENTAGE

NUMBER

パスのEND_LINK_INDEXとその次のリンクの間の距離の割合で、サブパスの終了点を表します。正の数値または負の数値となります。たとえば、「ネットワーク・データ・モデル・グラフの概念」図5-2では、END_LINK_INDEXは6で、END_PERCENTAGEは0.5です。(この場合の割合の値は0から1.0の範囲で表されるので、0.5は50パーセントです。)

COST

NUMBER

サブパスに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。コスト値は、パスの推定運転時間など、必要な任意の値を表すことができます。

GEOM

SDO_GEOMETRY

論理ネットワークを除くすべてのネットワーク・タイプの場合、サブパスに関連付けられたジオメトリ・オブジェクトです。実際の列名は、デフォルト名、またはSDO_NET.CREATE_SUBPATH_TABLEプロシージャのコール時にgeom_columnパラメータの値として指定した名前のいずれかになります。

論理ネットワークの場合、この列は使用しません。

5.11.1.6 パーティション表

パーティション化された各ネットワークには、パーティション表があります。パーティション化されたネットワークの詳細は、「ロード・オンデマンドを使用したネットワーク分析」を参照してください。各パーティション表には、表5-11で説明する列が含まれます。

表5-11 パーティション表の列

列名 データ型 説明

NODE_ID

NUMBER

ノードのID番号です。

PARTITION_ID

NUMBER

パーティションのID番号です。ネットワーク内で一意である必要があります。

LINK_LEVEL

NUMBER

リンク・レベルです(リンク・レベルは、リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます)。

5.11.1.7 パーティションBLOB表

パーティション化された各ネットワークには、パーティションBLOB表があります。この表には、ネットワークのリンク・レベルとパーティションIDの組合せごとのバイナリ・ラージ・オブジェクト(BLOB)表現が格納されます。パーティションのBLOB表現を使用すると、ネットワークのロード・オンデマンド分析操作でパフォーマンスが向上します。パーティションBLOB表を作成するには、SDO_NET.GENERATE_PARTITION_BLOBSプロシージャを使用します。このプロシージャでは、パーティションBLOB表の名前をパラメータの1つとして指定します。パーティション化されたネットワークの詳細は、「ロード・オンデマンドを使用したネットワーク分析」を参照してください。

注意:

パーティションBLOB表を直接変更することはできません。この表は、SDO_NET.GENERATE_PARTITION_BLOBSプロシージャおよびSDO_NET.GENERATE_PARTITION_BLOBプロシージャへのコールの結果として自動的に更新されます。

各パーティション表には、表5-12で説明する列が含まれます。

表5-12 パーティションBLOB表の列

列名 データ型 説明

LINK_LEVEL

VARCHAR2(32)

リンク・レベルです(リンク・レベルは、リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます)。

PARTITION_ID

NUMBER

パーティションのID番号です。

BLOB

BLOB

指定したパーティション内の指定したリンク・レベルを表すバイナリ・ラージ・オブジェクト(BLOB)です。

NUM_INODES

NUMBER

BLOBの内部ノード数(BLOB内の合計ノード数)です。

NUM_ENODES

NUMBER

外部ノードの数です。外部ノードとは、BLOB外にあるノードで、このノードが一端を構成するリンクのもう一端のノードがBLOB内にあるものを指します。

NUM_ILINKS

NUMBER

BLOBの内部リンク(完全にBLOB内にあるリンク)の数です。

NUM_ELINKS

NUMBER

外部リンクの数です。外部リンクとは、1つのノードが内部(BLOB内)で、1つのノードが外部(BLOB外)となっているリンクです。

NUM_INLINKS

NUMBER

外部からのリンクの数です。外部からのリンクとは、開始ノードがBLOB外にあり、終了ノードがBLOB内にある外部リンクです。

NUM_OUTLINKS

NUMBER

外部へのリンクの数です。外部へのリンクとは、開始ノードがBLOB内にあり、終了ノードがBLOB外にある外部リンクです。

USER_DATA_INCLUDED

VARCHAR2(1)

BLOBにユーザー・データを含めることができる場合はY、BLOBにユーザー・データを含めることができない場合はNです。

5.11.1.8 接続されているコンポーネント表

各ネットワークには、接続されているコンポーネント表を作成できます。この表には各ノードのコンポーネントIDが格納されます。同じ接続されているコンポーネントのノードは、同じコンポーネントIDを持ちます。この情報が表に格納されていると、ネットワーク分析の多くの操作でパフォーマンスが向上します。接続されているコンポーネント表を作成し、後から表の内容を更新するには、SDO_NET.FIND_CONNECTED_COMPONENTSプロシージャを使用します。このプロシージャでは、接続されているコンポーネント表の名前をパラメータの1つとして指定します。接続されているコンポーネントに関する計算済情報の使用の詳細は、「計算済の分析結果」を参照してください。

各接続されているコンポーネント表には、表5-13で説明する列が含まれます。

表5-13 接続されているコンポーネント表の列

列名 データ型 説明

LINK_LEVEL

NUMBER

コンポーネントの割当てのリンク・レベルです。(リンク・レベルは、リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。)

NODE_ID

NUMBER

到達可能なその他すべてのコンポーネントの算出元となるノードのID番号です。

COMPONENT_ID

NUMBER

指定したノードから到達可能なコンポーネントのID番号です。

5.11.1.9 ノード階層表(オプション)

各ネットワークに、ネットワークが階層を持つ場合(「ネットワーク階層」を参照)に、親子関係を格納するノード階層表を作成できます。

ノード階層表が存在する場合、この表には表5-14で説明する列が含まれます。

表5-14 ノード階層表の列

列名 データ型 説明

PARENT_ID

NUMBER

親ノードID (親ネットワーク内のノードID、あるいは子ネットワーク内のグループID、クラスタIDまたはパーティションID)です。

CHILD_ID

NUMBER

子ID (子ネットワーク内のノードID)です。

LINK_LEVEL

NUMBER

親子関係が定義されるリンク・レベルです。リンク・レベルの高いネットワークは、リンク・レベルの低いネットワークのサブネットワークとなります。リンク・レベルnのネットワークは、nより大きいか等しいリンク・レベルを持つリンクのみで構成されます。

5.11.1.10 ノード・レベル表(オプション)

各ネットワークに、各上位レベル・ノード(最大リンク・レベルが1より大きいノード)の最大リンク・レベルに関する情報を格納するノード・レベル表を作成できます。ノード・レベル表は、マルチレベル・ネットワークでのみ役立ち、この表を使用すると、ノード表とリンク表からのパーティションのロード時間を短縮できます。

ノード・レベル表が存在する場合、この表には表5-15で説明する列が含まれます。

表5-15 ノード・レベル表の列

列名 データ型 説明

NODE_ID

NUMBER

最大リンク・レベルが1より大きいノードのIDです。

LINK_LEVEL

NUMBER

ノードが接続されている最大リンク・レベルです。

5.11.2 フィーチャ・レイヤー表

この項の表は、フィーチャ・モデリング(「フィーチャ・モデリング」を参照)に関連します。これらの表は、登録された各フィーチャ・レイヤーを説明するために使用されます。

ほとんどのアプリケーションには、フィーチャ・エンティティ情報、フィーチャとネットワークの関係またはフィーチャ階層関係を含む表がすでに存在していますが、これらの表のスキーマがNDM表のスキーマと異なる場合があります。このような場合は、既存の表のスキーマをNDM表のスキーマにマップするビューを作成できます。

トピック:

5.11.2.1 フィーチャ表

フィーチャ表には、フィーチャ・エンティティ情報が含まれます。各フィーチャ表には、FEATURE_ID列が含まれている必要があります。フィーチャ分析で役立つ可能性があるその他のフィーチャ属性は、ユーザー・データとして登録できます。

各フィーチャ表には、表5-16で説明する列が含まれます。

表5-16 フィーチャ表の列

列名 データ型 説明

FEATURE_ID

NUMBER

フィーチャのIDです。

(必要に応じた追加の列)

(適宜)

(フィーチャ分析で役立つ可能性があるその他のフィーチャ属性)

5.11.2.2 フィーチャ要素関係表

フィーチャ要素関係表には、フィーチャ要素とネットワーク要素(ノードとリンク)間の関係に関する情報が含まれます。

フィーチャ要素関係表には、表5-17で説明する列が含まれます。

表5-17 フィーチャ要素関係表の列

列名 データ型 説明

FEATURE_ID

NUMBER

フィーチャのIDです。

FEAT_ELEM_TYPE

NUMBER

フィーチャ要素のタイプです。次のいずれかです: 1 (SDO_NET.FEAT_ELEM_TYPE_PON (ノード上の点))、2 (SDO_NET.FEAT_ELEM_TYPE_POL (リンク上の点))、3 (SDO_NET.FEAT_ELEM_TYPE_LINE (線))。

NET_ELEM_ID

NUMBER

このフィーチャ要素に関連付けられているネットワーク要素(ノードまたはリンク)のIDです。

START_PERCENTAGE

NUMBER

このフィーチャ要素のNET_ELEM_IDに沿った開始の割合です(ノード上の点であるフィーチャ要素に対しては無視されます)。

END_PERCENTAGE

NUMBER

このフィーチャ要素のNET_ELEM_IDに沿った終了の割合です(ノード上の点および線上の点であるフィーチャ要素に対しては無視されます)。

SEQUENCE

NUMBER

フィーチャ要素の順序番号です。

5.11.2.3 フィーチャ階層表

フィーチャ階層表には、フィーチャ階層情報が含まれます。子フィーチャは異なるフィーチャ・レイヤーに属することができます。

フィーチャ階層表には、表5-18で説明する列が含まれます。

表5-18 フィーチャ階層表の列

列名 データ型 説明

PARENT_ID

NUMBER

親フィーチャのIDです。

CHILD_LAYER_ID

NUMBER

子フィーチャのフィーチャ・レイヤーIDです。

CHILD_ID

NUMBER

子フィーチャのIDです。

SEQUENCE

NUMBER

子フィーチャの順序番号です。

5.11.3 ネットワーク・フィーチャ編集(NFE)モデル表

この項の表は、ネットワーク・フィーチャ編集(NFE) (「ネットワーク・フィーチャ編集(NFE)を使用したフィーチャ・モデリング」を参照)を使用したフィーチャ操作に関連します。これらの表は、各NFEモデルを説明するために使用されます。

ほとんどの場合、PL/SQLファンクションのSDO_NFE.CREATE_MODEL_STRUCTUREまたはJava APIを使用して新しいNFEモデルが作成されると、これらの表は自動的に作成または更新されます。しかし、表またはビューを手動で作成し、それらを目的のモデルに登録することもできます。

トピック:

5.11.3.1 自動作成される点のデフォルト属性表

自動作成される点のデフォルト属性表には、線-線接続性ルールを実行した結果として自動作成される点の属性のデフォルト値に関する情報が含まれます。

次の表では、自動作成される点のデフォルト属性表の列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はPOINT_ATTR_DEF_[model_id]$です。

表5-19 自動作成される点のデフォルト属性表の列

列名 データ型 説明

ID

NUMBER

主キー。デフォルト値の識別子。

LINE_LINE_RULE_ID

NUMBER

外部キー。既存の線-線ルールの識別子。線-線ルール表のID列を参照します。

ATTRIBUTE_NAME

VARCHAR(50)

点フィーチャ・クラス属性名。xxx_SDO_NETWORK_USER_DATAビューのDATA_NAME列を参照します。

DEFAULT_VALUE

VARCHAR(100)

点の属性のデフォルト値。

5.11.3.2 線-線接続性ルール表

線-線接続性ルール表には、NFEモデルに含まれるフィーチャに適用可能な線-線接続性ルールの定義に関する情報が含まれます。

この定義は、2つの線フィーチャ(線-点ルールで記述される)が相互に接続するために、どのように相互作用する必要があるかを表します。

次の表では、線-線接続性ルール表の列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はLINE_LINE_RULE_[model_id]$です。

表5-20 線-線接続性ルール表の列

列名 データ型 説明

ID

NUMBER

主キー。線-線ルールの識別子。

LINE_POINT_1_ID

NUMBER

外部キー。既存の線-点ルールの識別子。線-点ルール表のID列を参照します。

LINE_POINT_2_ID

NUMBER

外部キー。既存の線-点ルールの識別子。線-点ルール表のID列を参照します。

INTERACTION

NUMBER

2つの線間の相互作用タイプ。使用可能な値: 1 = 交差、2 = 終了点に接触、3 = 中間点に接触、4 = 任意の点に接触、5 = 任意の相互作用

DECISION_HANDLER_ID

NUMBER

外部キー。ルールに関連付けられたデシジョン・ハンドラ(ある場合)のID。ルール・デシジョン・ハンドラ表のID列を参照します。

CREATE_POINT

VARCHAR2(1)

線フィーチャ間で相互作用が発生したときに、接続点を自動的に作成するかどうかを指定します。使用可能な値: 'Y'、'N'。

5.11.3.3 線-点接続性ルール表

線-点接続性ルール表には、NFEモデルに含まれるフィーチャに適用可能な線-点接続性ルールの定義に関する情報が含まれます。

この定義には、フィーチャ・レイヤー、フィーチャ・クラスおよび接続可能な線相互作用フィーチャと点相互作用フィーチャの両方に関するフィーチャ属性の条件の指定が含まれます。

次の表では、線-点接続性ルール表の列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はLINE_POINT_RULE_[model_id]$です。

表5-21 線-点接続性ルール表の列

列名 データ型 説明

ID

NUMBER

主キー。線-点ルールの識別子。

LINE_FEATURE_LAYER_ID

NUMBER

線が属するフィーチャ・レイヤーの識別子。xxx_SDO_NETWORK_FEATURE表を参照します。値-1は、すべてのフィーチャ・レイヤーを意味します。

LINE_FEATURE_CLASS_ID

NUMBER

ルールの適用先となる線のフィーチャ・クラスの識別子。値-1は、すべてのフィーチャ・クラスを意味します。

LINE_ATTRIBUTE_CONDITION

VARCHAR2(200)

フィーチャの線の属性についてルールで評価される条件。例: MATERIAL = 'IRON'

POINT_FEATURE_LAYER_ID

NUMBER

許可された接続点が属するフィーチャ・レイヤーの識別子。xxx_SDO_NETWORK_FEATURE表を参照します。

POINT_FEATURE_CLASS_ID

NUMBER

許可された接続点のフィーチャ・クラスの識別子。値-1は、すべてのフィーチャ・クラスを意味します。

DECISION_HANDLER_ID

NUMBER

外部キー。ルールに関連付けられたデシジョン・ハンドラ(ある場合)のID。ルール・デシジョン・ハンドラ表のID列を参照します。

MAX_IN_CONN

NUMBER

点に接続できる入力線の最大数。

MAX_OUT_CONN

NUMBER

点に接続できる出力線の最大数。

MIN_IN_CONN

NUMBER

点に接続する必要がある入力線の最小数

MIN_OUT_CONN

NUMBER

点に接続する必要がある出力線の最小数

SOURCE

NUMBER

ルールがユーザーによって作成されたのか、線-線ルールによって作成されたのかを示します。使用可能な値: 1 = ユーザー、2 = 線-線ルール。デフォルト値は1です。

ID

NUMBER

主キー。線-線ルールの識別子。

5.11.3.4 フィーチャ・クラス表

フィーチャ・クラスは、フィーチャに関連します。フィーチャ・クラス表には、フィーチャ・レイヤーのすべてのフィーチャ・クラスのレコードが含まれます。また、次の表で説明する列が含まれる必要があります。

NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_CLASS_[model_id]$です。

表5-22 フィーチャ・クラス表の列

列名 データ型 説明

ID

NUMBER

主キー。フィーチャ・クラスの識別子

NAME

VARCHAR2(50)

フィーチャ・クラス名

FEATURE_LAYER_ID

NUMBER

フィーチャ・レイヤーの識別子。xxx_SDO_NETWORK_FEATURE表を参照します。

SHAPE

NUMBER

フィーチャ・クラスの形状タイプ。使用可能な値: SDO_NFE.FT_CLASS_POINT (1)、SDO_NFE.FT_CLASS_SIMPLE_LINE (2)、SDO_NFE.FT_CLASS_COMPLEX_LINE (3)、SDO_NFE.FT_CLASS_PATH (4)。

STYLE

VARCHAR2(50)

フィーチャ・クラスの形式。xxx_SDO_STYLES表を参照します。

5.11.3.5 フィーチャ・クラス属性の制約表

フィーチャ・クラス属性の制約表には、フィーチャ・クラスが属するフィーチャ・レイヤーに定義されているのと同じ属性であるフィーチャ・クラス属性についてのユーザー制限に関する情報が含まれます。

この表には、次の表で説明する列が含まれる必要があります。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_CLASS_ATTR_CSTR_[model_id]$です。

表5-23 フィーチャ・クラス属性の制約表の列

列名 データ型 説明

ID

NUMBER

主キー。制約の識別子。

FEATURE_CLASS_ID

NUMBER

外部キー。フィーチャ・クラスの識別子。フィーチャ・クラス表を参照します。

ATTRIBUTE_NAME

VARCHAR2(50)

制限する属性の名前。xxx_SDO_NETWORK_USER_DATAビューのDATA_NAME列を参照します。

DEFAULT_VALUE

VARCHAR2(100)

指定した属性(attribute_name)のデフォルト値。

VISIBLE

VARCHAR2(1)

属性が表示可能である必要があるかどうかを指定します。

EDITABLE

VARCHAR2(1)

属性が編集可能である必要があるかどうかを指定します。

5.11.3.6 フィーチャ・クラス事前定義済のデフォルトで接続される点表

フィーチャ・クラス事前定義済のデフォルトで接続される点表には、フィーチャ・クラスで記述された線フィーチャに沿ってデフォルトで接続される点フィーチャなどに関する情報が含まれます。

線フィーチャ・クラスは、デフォルトで接続される点を使用して定義できます。次の表では、フィーチャ・クラス事前定義済のデフォルトで接続される点表の列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_CLASS_DEF_CON_PT_[model_id]$です。

表5-24 フィーチャ・クラス事前定義済のデフォルトで接続される点表の列

列名 データ型 説明

ID

NUMBER

主キー。デフォルトで接続される点の識別子。

LINE_FEATURE_CLASS_ID

NUMBER

外部キー。線フィーチャ・クラスの識別子。フィーチャ・クラス表のID列を参照します。

POINT_FEATURE_CLASS_ID

NUMBER

外部キー。点フィーチャ・クラスの識別子。フィーチャ・クラス表のID列を参照します。

POSITION_PERCENTAGE

DECIMAL

線に沿った点の場所の割合。

5.11.3.7 フィーチャ・クラス関係表

フィーチャ・クラス関係表には、フィーチャとフィーチャ・クラス間の関係(どのフィーチャがどのフィーチャ・クラスに属するか)に関する情報が含まれます。

フィーチャ・クラス関係表には、次の表で説明する列が含まれます。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_CLASS_REL_[model_id]$です。

表5-25 フィーチャ・クラス関係表の列

列名 データ型 説明

FEATURE_ID

NUMBER

主キー。フィーチャの識別子。フィーチャ表を参照します。

FEATURE_CLASS_ID

NUMBER

外部キー。フィーチャ・クラスの識別子。フィーチャ・クラス表を参照します。

5.11.3.8 フィーチャ・ルール関係表

フィーチャ・ルール関係表には、ルールに含まれる各フィーチャ要素に関連する情報が、その生成または接続の起因となるルールとともに含まれます。

フィーチャ・ルール関係表には、次の表で説明する列が含まれます。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_RULE_REL_[model_id]$です。

表5-26 フィーチャ・ルール関係表の列

列名 データ型 説明

RULE_INSTANCE_ID

NUMBER

主キー。ルール・インスタンスの識別子。

FEATURE_LAYER_ID

NUMBER

主キー。フィーチャ・レイヤーの識別子。xxx_SDO_NETWORK_FEATURE表を参照します。

FEATURE_ID

NUMBER

主キー。フィーチャの識別子。フィーチャ表のFEATURE_ID列を参照します。

NET_ELEM_ID

NUMBER

主キー。ネットワーク要素の識別子。フィーチャ要素関係表のNET_ELEM_ID列を参照します。

FEAT_ELEM_TYPE

NUMBER

主キー。フィーチャ要素のタイプです。フィーチャ要素関係表のFEAT_ELEM_TYPE列を参照します。

5.11.3.9 フィーチャ・ユーザー・データ表

フィーチャ・ユーザー・データ表には、カタログ・タイプのフィーチャ・クラス属性の情報が含まれます。

フィーチャ・ユーザー・データ表は、xxx_SDO_NETWORK_USER_DATAビューを拡張したものです。次の表では、フィーチャ・ユーザー・データ表の列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_USR_DATA_[model_id]$です。

表5-27 フィーチャ・ユーザー・データ表の列

列名 データ型 説明

ID

NUMBER

主キー。フィーチャ・クラス属性の識別子。

FEATURE_LAYER_ID

NUMBER

フィーチャ・クラス属性が属するフィーチャ・レイヤーの識別子。

ATTRIBUTE_NAME

VARCHAR2(50)

属性名。xxx_SDO_NETWORK_USER_DATAビューのDATA_NAME列を参照します。

CATALOG_ID

NUMBER

外部キー。カタログの識別子。フィーチャ・ユーザー・データ・カタログ表のID列を参照します。

5.11.3.10 フィーチャ・ユーザー・データ・カタログ表

カタログからフィーチャ・クラス属性に値を割り当てることができます。つまり、フィーチャ・クラスの属性の型にカタログの型を指定できます。フィーチャ・ユーザー・データ・カタログ表では、そのために使用できるカタログの登録簿を保持します。

次の表では、フィーチャ・ユーザー・データ・カタログ表に含まれる必要がある列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_USR_DATA_CATLG_[model_id]$です。

表5-28 フィーチャ・ユーザー・データ・カタログ表の列

列名 データ型 説明

ID

NUMBER

主キー。カタログの識別子。

NAME

VARCHAR2(200)

カタログ名。

DATA_TYPE

VARCHAR2(12)

カタログのデータ型(NumberやVarchar2など)。

5.11.3.11 フィーチャ・ユーザー・データ・カタログ値表

フィーチャ・ユーザー・データ・カタログ値表には、フィーチャ・ユーザー・データ・カタログ表で定義されたカタログで保持される値のリストが含まれます。

次の表では、フィーチャ・ユーザー・データ・カタログ値表に含まれる必要がある列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はFT_USR_DATA_CVAL_[model_id]$です。

表5-29 フィーチャ・ユーザー・データ・カタログ値表の列

列名 データ型 説明

ID

NUMBER

主キー。カタログ・エントリの識別子。

CATALOG_ID

NUMBER

外部キー。カタログの識別子。フィーチャ・ユーザー・データ・カタログ表を参照します。

VALUE

VARCHAR2(12)

カタログ・エントリ。

5.11.3.12 点カーディナリティ・ルール表

点カーディナリティ・ルール表には、特定の点フィーチャがNFEモデルでサポートする必要があるインバウンド接続およびアウトバウンド接続の最大数と最小数の構成が含まれます。

点カーディナリティ・ルール表には、次の表で説明する列が含まれます。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はPOINT_CARD_RULE_[model_id]$です。

表5-30 点カーディナリティ・ルール表の列

列名 データ型 説明

ID

NUMBER

主キー。カーディナリティ・ルールの識別子

FEATURE_LAYER_ID

NUMBER

点のフィーチャ・レイヤー

FEATURE_CLASS_ID

NUMBER

点のフィーチャ・クラス。クラスの形状は、POINTタイプである必要があります

MAX_IN_CONN

NUMBER

点に接続できる入力線の最大数

MAX_OUT_CONN

NUMBER

点に接続できる出力線の最大数

5.11.3.13 ルール・デシジョン・ハンドラ表

ルール・デシジョン・ハンドラ表には、接続性ルール(線-線または線-点)の実行時にデシジョン・ハンドラとして実行されるJavaクラスまたはPL/SQLプロシージャ(あるいはその両方)の名前に関する情報が含まれます。

ルール・デシジョン・ハンドラ表には、次の表で説明する列が含まれます。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はRULE_DEC_HANDLER_[model_id]$です。

表5-31 ルール・デシジョン・ハンドラ表の列

列名 データ型 説明

ID

NUMBER

主キー。デシジョン・ハンドラの識別子。

TYPE

VARCHAR2(1)

SDO_NFE.RULE_TYPE_LINE_LINE(線-線ルール・ハンドラの場合)またはSDO_NFE.RULE_TYPE_LINE_POINT(線-点ルール・ハンドラの場合)。

CLASS_FQNAME

VARCHAR(100)

ハンドラ・クラスの完全修飾名。このクラスは、oracle.spatial.network.nfe.model.rule.DecisionHandlerの実装である必要があります。実装クラスは、Java APIでルール・エンジンを実行するアプリケーションのクラスパスからアクセスできる必要があります。

PLSQL_SP_GET_CONN_GROUPS

VARCHAR2(50)

ルールによって接続可能な交差に加わっている要素の別のグループを取得するために使用するPL/SQLストアド・プロシージャの名前。名前にはパッケージ名を含める必要があります。タイプ'L'のハンドラの場合、デフォルト値はSDO_NFE.get_ll_conn_intersectionsであり、パラメータは次のとおりです。

model_id IN NUMBER - モデルの識別子 ll_rule_id IN NUMBER - 線-線ルールの識別子

interaction_grp IN OUT SDO_INTERACTION - 相互作用する線および点のグループ

rule_lhs_lines_indexes IN dbms_sql.NUMBER_TABLE - 相互作用グループ内の線フィーチャで、特に線-線ルールの左辺に合致する線の索引。

rule_rhs_lines_indexes IN dbms_sql.NUMBER_TABLE - 相互作用グループ内の線フィーチャで、特に線-線ルールの右辺に合致する線の索引。

rule_points_indexes IN dbms_sql.NUMBER_TABLE - 相互作用グループ内の点フィーチャで、特に線-線ルールの点フィーチャの指定に合致する点の索引。このような点は、接続可能グールの構造に考慮される点です。

詳細は、第7項のSDO_NFE.GET_LL_CONN_INTERSECTIONSファンクションのドキュメントを参照してください。

タイプ'P'のハンドラの場合、デフォルト値はSDO_NFE.get_lp_conn_intersectionsであり、パラメータは次のとおりです。

model_id IN NUMBER - モデルの識別子

lp_rule_id IN NUMBER - 線-点ルールの識別子

interaction_grp IN OUT SDO_INTERACTION - 相互作用する線および点のグループ。

rule_lines_indexes IN dbms_sql.NUMBER_TABLE - 相互作用グループ内の線フィーチャで、特に線-点ルールに合致する線の索引。このような線は、接続可能グールの構造で考慮されます。

rule_points_indexes IN dbms_sql.NUMBER_TABLE - 相互作用グループ内の点フィーチャで、特に線-点ルールの点フィーチャの指定に合致する点の索引。このような点は、接続可能グールの構造に考慮される点です。

詳細は、第7項のSDO_NFE.GET_LP_CONN_INTERSECTIONSファンクションのドキュメントを参照してください。

PLSQL_SP_GET_CONN_POINT

VARCHAR2(50)

交差に加わっている要素間の接続点のジオメトリを決定するために使用されるPL/SQLストアド・プロシージャの名前。名前にはパッケージ名を含める必要があります。デフォルト値は、SDO_NFE.get_connection_point_geomです。唯一のパラメータを相互作用フィーチャのグループであるSDO_INTERACTION型のオブジェクトとして受け入れる必要があります。詳細は、SDO_NFE.GET_CONNECTION_POINT_GEOMファンクションのドキュメントを参照してください。

カスタマイズしたルール・デシジョン・ハンドラをJava APIで使用する場合、使用するデシジョン・ハンドラのJavaクラスをCLASS_FQNAMEに指定する必要があります。カスタマイズしたルール・デシジョン・ハンドラをPL/SQLで使用する場合は、接続可能なフィーチャのグループを計算するためのサブプログラムをPLSQL_SP_GET_CONN_GROUPSに、接続するフィーチャ間で接続点のジオメトリを計算するためのサブプログラムをPLSQL_SP_GET_CONN_POINTに指定する必要があります。

5.11.3.14 ルール・インスタンス表

ルール・インスタンス表には、線-線または線-点のいずれかの接続性ルールがNFEモデルで適用されることで生成されるルール・インスタンスに関する情報が含まれます。

この定義には、ルール・インスタンスの識別子、インスタンスを生成したルールの識別子およびルールのタイプが含まれます。

次の表では、ルール・インスタンス表の列について説明します。NFEモデルの作成時に、この種の表にデフォルトで付けられる名前はRULE_INSTANCE_[model_id]$です。

表5-32 ルール・インスタンス表の列

列名 データ型 説明

ID

NUMBER

主キー。ルール・インスタンスの識別子

RULE_ID

NUMBER

ルールの識別子。線-線ルール表または線-点ルール表のID列を参照します。

RULE_TYPE

VARCHAR(1)

SDO_NFE.RULE_TYPE_LINE_LINEまたはSDO_NFE.RULE_TYPE_LINE_POINTである必要があります。

5.12 ネットワーク・データ・モデル・グラフおよびネットワーク・フィーチャ編集(NFE)モデルのメタデータ・ビュー

スキーマ(ユーザー)ごとに、xxx_SDO_NETWORK_xxxxxxおよびxxx_SDO_NFE_MODEL_xxxxxxという2セットのネットワーク・メタデータ・ビューを作成できます(先頭のxxxはUSERまたはALLです)。これらのビューは、必要に応じて、Spatial and Graphによって作成されます

xxx_SDO_NFE_MODEL_xxxxxxメタデータ・ビューは、ネットワーク・フィーチャ編集(NFE)を使用したフィーチャ・モデリングに関連します。

トピック:

5.12.1 xxx_SDO_NETWORK_METADATAビュー

次のビューには、ネットワークに関する情報が含まれます。

  • USER_SDO_NETWORK_METADATAには、ユーザーが所有するすべてのネットワークに関する情報が含まれます。

  • ALL_SDO_NETWORK_METADATAには、ユーザーがSELECT権限を持つすべてのネットワークに関する情報が含まれます。

CREATE_<network-type>_NETWORKプロシージャの1つを使用してネットワークを作成すると、これらのビューの情報が、新しいネットワークを反映するように自動的に更新されます。このプロシージャを使用してネットワークを作成しない場合、ネットワークに関する情報をUSER_SDO_NETWORK_METADATAビューに挿入する必要があります。

USER_SDO_NETWORK_METADATAビューとALL_SDO_NETWORK_METADATAビューのどちらにも表5-33に示す列が含まれますが、USER_SDO_NETWORK_METADATAビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-33 xxx_SDO_NETWORK_METADATAビューの列

列名 データ型 説明

OWNER

VARCHAR2(32)

ネットワークの所有者です(ALL_SDO_NETWORK_METADATAビューのみ)。

NETWORK

VARCHAR2(24)

ネットワーク名です。

NETWORK_ID

NUMBER

ネットワークのID番号です(Spatial and Graphによって割り当てられます)。

NETWORK_CATEGORY

VARCHAR2(12)

ネットワークのノードおよびリンクが空間ジオメトリに関連付けられている場合はSPATIAL、ネットワークのノードおよびリンクが空間ジオメトリに関連付けられていない場合はLOGICALです。値がLOGICALの場合、ネットワーク・データ・モデル・グラフのPL/SQL APIおよびJava APIで、ノード、リンクおよびパスの空間属性は無視されます。

GEOMETRY_TYPE

VARCHAR2(24)

NETWORK_CATEGORYSPATIALの場合は、ノードおよびリンクのジオメトリ・タイプを示す値です。非LRS SDO_GEOMETRYオブジェクトの場合はSDO_GEOMETRY、LRS SDO_GEOMETRYオブジェクトの場合はLRS_GEOMETRY、SDO_TOPO_GEOMETRYオブジェクトの場合はTOPO_GEOMETRYです。

NETWORK_TYPE

VARCHAR2(24)

ネットワークのタイプを識別するユーザー定義の文字列です。

NO_OF_HIERARCHY_LEVELS

NUMBER

ネットワーク階層のレベルの数です。階層がない場合は1が含まれます。(ネットワーク階層については、「ネットワーク階層」を参照してください。)

NO_OF_PARTITIONS

NUMBER

(現在は使用されていません)

LRS_TABLE_NAME

VARCHAR2(32)

GEOMETRY_TYPESDO_GEOMETRYの場合、ノードに関連付けられたジオメトリが含まれる表の名前です。

LRS_GEOM_COLUMN

VARCHAR2(32)

LRS_TABLE_NAMEに表名が指定されている場合、その表のジオメトリ列です。

NODE_TABLE_NAME

VARCHAR2(32)

GEOMETRY_TYPESDO_GEOMETRYの場合、ノードに関連付けられたジオメトリが含まれる表の名前です。(ノード表については、「ノード表」を参照してください。)

NODE_GEOM_COLUMN

VARCHAR2(32)

NODE_TABLE_NAMEに表名が指定されている場合、その表のジオメトリ列です。

NODE_COST_COLUMN

VARCHAR2(1024)

NODE_TABLE_NAMEに表名が指定されている場合、その表のコスト列です。またはコスト値を計算するPL/SQLファンクションです。

NODE_PARTITION_COLUMN

VARCHAR2(32)

(現在は使用されていません)。

NODE_DURATION_COLUMN

VARCHAR2(32)

NODE_TABLE_NAMEに表名が指定されている場合、その表の継続時間列(オプション)です。この列には、ユーザー定義項目の数値(ノードに関連付けられた時間(分)など)を含めることができます。

LINK_TABLE_NAME

VARCHAR2(32)

GEOMETRY_TYPESDO_GEOMETRYの場合、リンクに関連付けられたジオメトリが含まれる表の名前です。(リンク表については、「リンク表」を参照してください。)

LINK_GEOM_COLUMN

VARCHAR2(32)

LINK_TABLE_NAMEに表名が指定されている場合、その表のジオメトリ列です。

LINK_DIRECTION

VARCHAR2(12)

ネットワークのすべてのリンクのタイプを示す値です。UNDIRECTEDまたはDIRECTEDになります。

LINK_COST_COLUMN

VARCHAR2(1024)

LINK_TABLE_NAMEに表名が指定されている場合、各リンクのコスト値が含まれるオプションの数値列です。またはコスト値を計算するPL/SQLファンクションです。

LINK_PARTITION_COLUMN

VARCHAR2(32)

(現在は使用されていません)

LINK_DURATION_COLUMN

VARCHAR2(32)

LINK_TABLE_NAMEに表名が指定されている場合、その表の継続時間列(オプション)です。この列には、ユーザー定義項目の数値(リンクに関連付けられた時間(分)など)を含めることができます。

PATH_TABLE_NAME

VARCHAR2(32)

パスに関する情報が含まれるオプションの表の名前です。(パス表については、「パス表」を参照してください。)

PATH_GEOM_COLUMN

VARCHAR2(32)

PATH_TABLE_NAMEが空間ネットワークに関連付けられている場合、その表のジオメトリ列です。

PATH_LINK_TABLE_NAME

VARCHAR2(32)

各パスのリンクに関する情報が含まれるオプションの表の名前です。(パスリンク表については、「パスリンク表」を参照してください。)

SUBPATH_TABLE_NAME

VARCHAR2(32)

サブパスに関する情報が含まれるオプションの表の名前です。(サブパス表については、「サブパス表」を参照してください。)

SUBPATH_GEOM_COLUMN

VARCHAR2(32)

SUBPATH_TABLE_NAMEが空間ネットワークに関連付けられている場合、その表のジオメトリ列です。

PARTITION_TABLE_NAME

VARCHAR2(32)

パーティション化されたネットワークの場合: パーティション表の名前です。(パーティション表については、「パーティション表」を参照してください。)

PARTITION_BLOB_TABLE_NAME

VARCHAR2(32)

パーティションBLOBが生成されているパーティション化されたネットワークの場合: パーティションBLOB表の名前です。(パーティションBLOB表については、「パーティションBLOB表」を参照してください。)

COMPONENT_TABLE_NAME

VARCHAR2(32)

計算済の接続されているコンポーネント(「計算済の分析結果」を参照)に関する情報を含む表の名前です。(接続されているコンポーネント表については、「接続されているコンポーネント表」を参照してください。)

NODE_LEVEL_TABLE_NAME

VARCHAR2(32)

マルチレベル・ネットワークのノード・レベルに関する情報を含む表の名前です。この表は、SDO_NET.GENERATE_NODE_LEVELSプロシージャでnode_level_table_nameパラメータとして指定します。

TOPOLOGY

VARCHAR2(32)

(SDO_NET.CREATE_TOPO_NETWORKプロシージャで作成した)SDO_TOPO_GEOMETRYオブジェクトが含まれる空間ネットワークの場合、トポロジの名前です。

USER_DEFINED_DATA

VARCHAR2(1)

ネットワークにユーザー定義データが含まれる場合はY、ネットワークにユーザー定義のデータが含まれない場合はNです。

EXTERNAL_REFERENCES

VARCHAR2(1)

(現在は使用されていません)

CHILD_NETWORK

VARCHAR2(32)

子ネットワークの名前です(ネットワーク階層が関係している場合)。

HIERARCHY_TABLE_NAME

VARCHAR2(32)

階層表の名前です(ネットワーク階層が関係している場合)。

5.12.2 xxx_SDO_NETWORK_CONSTRAINTSビュー

次のビューには、ネットワーク制約(「ネットワーク制約」を参照)に関する情報が含まれます。

  • USER_SDO_NETWORK_CONSTRAINTSには、ユーザーが所有するすべてのネットワーク制約に関する情報が含まれます。

  • ALL_SDO_NETWORK_CONSTRAINTSには、ユーザーがSELECT権限を持つすべてのネットワーク制約に関する情報が含まれます。

これらのビューは、SDO_NET.REGISTER_CONSTRAINTプロシージャおよびSDO_NET.DEREGISTER_CONSTRAINTプロシージャによって自動的に保持されます。これらのビューの内容を直接変更することはできません。

USER_SDO_NETWORK_CONSTRAINTSビューとALL_SDO_NETWORK_CONSTRAINTSビューのどちらにも表5-34に示す列が含まれますが、USER_SDO_NETWORK_CONSTRAINTSビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-34 xxx_SDO_NETWORK_CONSTRAINTSビューの列

列名 データ型 説明

OWNER

VARCHAR2(32)

ネットワーク制約の所有者です(ALL_SDO_NETWORK_CONSTRAINTSビューのみ)。

CONSTRAINT

VARCHAR2(32)

ネットワーク制約の名前です。

DESCRIPTION

VARCHAR2(200)

ネットワーク制約に関する説明(目的、使用上の注意など)です。

CLASS_NAME

VARCHAR2(4000)

ネットワーク制約を実装するJavaクラスの名前です。

CLASS

BINARY FILE LOB

ネットワーク制約を実装するJavaクラスです。

5.12.3 xxx_SDO_NETWORK_USER_DATAビュー

次のビューには、ネットワークのユーザー定義データに関する情報が含まれます。これは、ユーザーがネットワーク表現と関連付ける(接続性とは関係のない)情報です。

  • USER_SDO_NETWORK_USER_DATAには、ユーザーが所有するすべてのネットワークのユーザー定義データに関する情報が含まれます。

  • ALL_SDO_NETWORK_USER_DATAには、ユーザーがSELECT権限を持つすべてのネットワークのユーザー定義データに関する情報が含まれます。

USER_SDO_NETWORK_USER_DATAビューとALL_SDO_NETWORK_USER_DATAビューのどちらにも表5-34に示す列が含まれますが、USER_SDO_NETWORK_USER_DATAビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-35 xxx_SDO_NETWORK_USER_DATAビューの列

列名 データ型 説明

OWNER

VARCHAR2(32)

ネットワーク制約の所有者です(ALL_SDO_NETWORK_USER_DATAビューのみ)。

NETWORK

VARCHAR2(32)

ネットワーク名です。

TABLE_TYPE

VARCHAR2(12)

ユーザー定義データを含む表のタイプ: NODELINKPATHまたはSUBPATHです。

xxx_SDO_USER_NETWORK_USER_DATAビューを介してフィーチャ・ユーザー・データが登録されている場合です。TABLE_TYPEはフィーチャ表の名前に設定されます。

DATA_NAME

VARCHAR2(32)

ユーザー定義データを含む列の名前です。

DATA_TYPE

VARCHAR2(12)

ユーザー定義データのデータ型: VARCHAR2INTEGERNUMBERDATETIMESTAMPまたはSDO_GEOMETRYです。

DATA_LENGTH

NUMBER(38)

DATA_TYPEがVARCHAR2である場合、ユーザー定義データの長さです。

CATEGORY_ID

NUMBER

ユーザー・データ・カテゴリID (負でない数値、デフォルト値は0)です。カテゴリIDを使用すると、アプリケーションごとにユーザー・データをグループ化できます。カテゴリ0は、すべてのアプリケーションに有効な汎用ユーザー・データに使用するために予約されています。ユーザー・データを目的ごとに異なるカテゴリにグループ化できますので、ネットワーク分析中は、関連するユーザー・データ・カテゴリのみがメモリーにロードされ、実行時のメモリー使用量が削減されます。

たとえば、道路ネットワークの場合、カテゴリ0のユーザー・データには、リンクの制限速度およびファンクション・クラスと、ノードの(x, y)座標を含めることができ、トラック輸送関連のユーザー・データをカテゴリ1に、またトラフィック関連のユーザー・データをカテゴリ2に含めることができます。

ユーザー定義データを使用するには、適切なxxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)のUSER_DEFINED_DATA列値をYに設定する必要があります。

ユーザー定義データの使用例については、「ユーザー定義データの例(PL/SQLおよびJava)」を参照してください。

xxx_SDO_NETWORK_USER_DATAビューを介して定義されたユーザー・データについては、ネットワーク分析中にユーザー・データにアクセスする場合、デフォルトのユーザー・データI/O実装(LODUserDataIOSDO)が使用されます。ただし、一部のユーザー・データは、ノード表またはリンク表に含まれていないため、xxx_SDO_NETWORK_USER_DATAビューを介して登録できません。このようなユーザー・データについては、ユーザー・データI/Oインタフェースの独自の実装を提供する必要があります。カスタムのユーザー・データI/Oインタフェースを実装する一般的な方法は、ノードおよびリンクのユーザー・データに対応したBLOB (各パーティションごとに1つのBLOB)を生成し、次にネットワーク分析中にBLOBからユーザー・データ情報を取得することです。

ユーザー定義データ(カテゴリ分けされたユーザー・データ)の複数のカテゴリを単一のネットワークに関連付けることもできます。たとえば、マルチモーダル・ネットワーク(「マルチモーダル・ネットワークと時間の例」を参照)では、リンクのマルチモーダル属性の他に、運転に関連する属性(制限速度など)をリンクに関連付ける必要がある場合、ユーザー定義データを2つのカテゴリ(1つは運転に関連する属性用で、もう1つはマルチモーダル属性用)に整理できます。

5.12.4 xxx_SDO_NETWORK_FEATUREビュー

次のビューには、ネットワーク・フィーチャ・レイヤー(「フィーチャおよびフィーチャ・レイヤー」を参照)に関する情報が含まれます。

  • USER_SDO_NETWORK_FEATUREには、ユーザーが所有するすべてのネットワーク・フィーチャ・レイヤーに関する情報が含まれます。

  • ALL_SDO_NETWORK_FEATUREには、ユーザーがSELECT権限を持つすべてのネットワーク・フィーチャ・レイヤーに関する情報が含まれます。

USER_SDO_NETWORK_FEATUREビューとALL_SDO_NETWORK_FEATUREビューのどちらにも表5-34に示す列が含まれますが、USER_SDO_NETWORK_FEATUREビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-36 xxx_SDO_NETWORK_FEATUREビューの列

列名 データ型 説明

OWNER

VARCHAR2(32)

ネットワーク・フィーチャ・レイヤーの所有者です(ALL_SDO_NETWORK_FEATUREビューのみ)。

NETWORK

VARCHAR2(32)

フィーチャ・レイヤーが定義されているネットワークの名前です。

FEATURE_LAYER_NAME

VARCHAR2(32)

フィーチャ・レイヤーの名前です。

FEATURE_LAYER_ID

NUMBER

フィーチャ・レイヤーのIDです(Oracle Spatial and Graphによって割り当てられます)。

FEATURE_LAYER_TYPE

NUMBER

フィーチャ・レイヤーのタイプです(「フィーチャおよびフィーチャ・レイヤー」表5-2を参照)

FEATURE_TABLE_NAME

VARCHAR2(32)

フィーチャ表の名前です(「フィーチャ表」を参照)

RELATION_TABLE_NAME

VARCHAR2(32)

フィーチャ要素をネットワーク要素(ノードとリンク)にマップするフィーチャ要素関係表の名前です(「フィーチャ要素関係表」を参照)

HIERRCHY_TABLE_NAME

VARCHAR2(32)

フィーチャ間の親子関係を定義するフィーチャ階層表の名前です(「フィーチャ階層表」を参照)

ユーザー定義データを使用するには、適切なxxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)のUSER_DEFINED_DATA列値をYに設定する必要があります。

ユーザー定義データの使用例については、「ユーザー定義データの例(PL/SQLおよびJava)」を参照してください。

xxx_SDO_NETWORK_USER_DATAビューを介して定義されたユーザー・データについては、ネットワーク分析中にユーザー・データにアクセスする場合、デフォルトのユーザー・データI/O実装(LODUserDataIOSDO)が使用されます。ただし、一部のユーザー・データは、ノード表またはリンク表に含まれていないため、xxx_SDO_NETWORK_USER_DATAビューを介して登録できません。このようなユーザー・データについては、ユーザー・データI/Oインタフェースの独自の実装を提供する必要があります。カスタムのユーザー・データI/Oインタフェースを実装する一般的な方法は、ノードおよびリンクのユーザー・データに対応したBLOB (各パーティションごとに1つのBLOB)を生成し、次にネットワーク分析中にBLOBからユーザー・データ情報を取得することです。

ユーザー定義データ(カテゴリ分けされたユーザー・データ)の複数のカテゴリを単一のネットワークに関連付けることもできます。たとえば、マルチモーダル・ネットワーク(「マルチモーダル・ネットワークと時間の例」を参照)では、リンクのマルチモーダル属性の他に、運転に関連する属性(制限速度など)をリンクに関連付ける必要がある場合、ユーザー定義データを2つのカテゴリ(1つは運転に関連する属性用で、もう1つはマルチモーダル属性用)に整理できます。

5.12.5 xxx_SDO_NFE_MODEL_FTLAYER_RELビュー

次のビューには、NFEモデルに関連するネットワーク・フィーチャ・レイヤーに関する情報が含まれます。(このトピックでは、「ネットワーク・フィーチャ編集(NFE)を使用したフィーチャ・モデリング」で説明されている概念を理解しておく必要があります。)

  • USER_SDO_NFE_MODEL_FTLAYER_RELには、ユーザーが所有するすべてのNFEモデルに関連するフィーチャ・レイヤーに関する情報が含まれます。

  • ALL_SDO_NFE_MODEL_FTLAYER_RELには、ユーザーがSELECT権限を持つNFEモデルに関連するフィーチャ・レイヤーに関する情報が含まれます。

USER_SDO_NFE_MODEL_FTLAYER_RELビューとALL_SDO_NFE_MODEL_FTLAYER_RELビューのどちらにも表5-37に示す列が含まれますが、USER_SDO_NFE_MODEL_FTLAYER_RELビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-37 xxx_SDO_NFE_MODEL_FTLAYER_RELビューの列

列名 データ型 説明

OWNER

VARCHAR2(32)

NFEモデルの所有者(ALL_SDO_NFE_MODEL_FTLAYER_RELビューのみ)

MODEL_ID

NUMBER

フィーチャ・レイヤーに関連するモデルの識別子。

FEATURE_LAYER_ID

NUMBER

関連するフィーチャ・レイヤーの識別子。

HIERARCHY_LEVEL

NUMBER

モデル内のフィーチャ・レイヤーの階層レベル。デフォルトは0(ゼロ)です。高いレベルは、低いレベルの上にあります。

Z_ORDER

NUMBER

同じ階層レベルにある他のフィーチャ・レイヤー間でのフィーチャ・レイヤーの深さ。通常、キャンバスにフィーチャ・レイヤー要素を描画する順序の決定に使用します。最も低い順序が最初に表示されます。

PATH_LAYER

VARCHAR2(1)

フィーチャ・レイヤーが分析操作から生成されたパスかどうかを示します。Yはパス・フィーチャ・レイヤー(分析操作から生成)であることを示し、NまたはNULLは一般的なフィーチャ・レイヤーであることを示します。

5.12.6 xxx_SDO_NFE_MODEL_METADATAビュー

次のビューには、NFEモデルに関する情報が含まれます。(このトピックでは、「ネットワーク・フィーチャ編集(NFE)を使用したフィーチャ・モデリング」で説明されている概念を理解しておく必要があります。)

  • USER_SDO_NFE_MODEL_METADATAには、ユーザーが所有するNFEモデルに関する情報が含まれます。

  • ALL_SDO_NFE_MODEL_METADATAには、ユーザーがSELECT権限を持つNFEモデルに関する情報が含まれます。

USER_SDO_NFE_MODEL_METADATAビューとALL_SDO_NFE_MODEL_METADATAビューのどちらにも表5-38に示す列が含まれますが、USER_SDO_NFE_MODEL_METADATAビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-38 xxx_SDO_NFE_MODEL_METADATAビューの列

列名 データ型 説明

OWNER

VARCHAR2(32)

NFEモデルの所有者(ALL_SDO_NFE_MODEL_METADATAビューのみ)。

ID

NUMBER

モデルの識別子(Oracle Spatial and Graphによって割り当てられます)。

NAME

VARCHAR2(100)

モデルの名前。

EDITION_MODE

NUMBER

新しいネットワークを使用し、基礎となるネットワーク要素とともフィーチャを作成するモデルの場合の1 (SDO_NFE.FROM_SCRATCH)、または現存するネットワークの上に構築されるモデル(ネットワーク要素は変更不可)の場合の2 (SDO_NFE.OVER_EXISTING_NETWORK)を使用できます。

VERSIONABLE_IND

VARCHAR2(1)

モデルで別のバージョンまたはブランチが許可されるかどうかを示します。Yは許可されることを示し、Nは許可されないことを示します。

TABLE_REG_TAB

VARCHAR2(50)

ネットワーク・フィーチャ編集(NFE)モデル表の名前が登録されている表の名前。この表は、自動的に作成および管理され、表5-39で説明する列があります。

SEQUENCE_REG_TAB

VARCHAR2(50)

モデルの表に関連付けられた順序が登録されている表の名前。この表は、自動的に作成および管理され、「xxx_SDO_NFE_MODEL_METADATAビュー」で説明する列があります。

NETWORK_NAME

VARCHAR2(50)

モデルに関連付けられたネットワークの名前。

表5-39 TABLE_REG_TAB表の列

列名 データ型 説明

TABLE_TYPE

VARCHAR2(50)

主キー。登録する表のタイプ。使用可能な値: SDO_NFE.FT_CLASS、SDO_NFE.FT_CLASS_REL、SDO_NFE.FT_CLASS_ATTR_CON、DO_NFE.FT_USR_DATA、SDO_NFE.FT_USR_DATA_CAT、SDO_NFE.FT_USR_DATA_CVAL、SDO_NFE.FT_CLASS_DEF_PTS、SDO_NFE.LINE_LINE_RULES、SDO_NFE.LINE_POINT_RULES、SDO_NFE.RULE_INSTANCE、SDO_NFE.FT_RULE_REL、SDO_NFE.RULE_DEC_HANDLER、SDO_NFE.POINT_CARD_RULES、SDO_NFE.POINT_ATTR_DEF

TABLE_NAME

VARCHAR2(50)

表に割り当てられる名前。SDO_NET.ADD_CHILD_FEATUREを使用する場合、デフォルトでは、この名前は[TABLE_TYPE]_[model_id]$という形式で作成されます。

表5-40 SEQUENCE_REG_TAB表の列

列名 データ型 説明

TABLE_NAME

VARCHAR2(50)

主キー。順序に関連付けられた表の名前。

SEQUENCE_NAME

VARCHAR2(50)

順序の名前。

5.12.7 xxx_SDO_NFE_MODEL_WORKSPACEビュー

次のビューには、NFEモデルに関連する作業領域に関する情報が含まれます。(このトピックでは、「ネットワーク・フィーチャ編集(NFE)を使用したフィーチャ・モデリング」で説明されている概念を理解しておく必要があります。)

  • USER_SDO_NFE_MODEL_WORKSPACEには、ユーザーが所有するすべてのNFEモデルに関連する作業領域に関する情報が含まれます。

  • ALL_SDO_NFE_MODEL_WORKSPACEには、ユーザーがSELECT権限を持つNFEモデルに関連する作業領域に関する情報が含まれます。

これらのビューは、Workspace Managerの作業領域の作成および削除にNFE JavaインタフェースとPL/SQLインタフェースを使用して、Spatial and Graphによって自動的に管理されます。これらのビューの内容を直接変更することはできません。

USER_SDO_NFE_MODEL_WORKSPACEビューとALL_SDO_NFE_MODEL_WORKSPACEビューのどちらにも表5-37に示す列が含まれますが、USER_SDO_NFE_MODEL_WORKSPACEビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-41 xxx_SDO_NFE_MODEL_WORKSPACEビューの列

列名 データ型 説明

OWNER

VARCHAR2(32)

NFEモデルの所有者(ALL_SDO_NFE_MODEL_WORKSPACEビューのみ)

ID

NUMBER

作業領域の識別子。Oracle Spatial and Graphによって割り当てられます。

MODEL_ID

NUMBER

作業領域が属するモデルの識別子。

WORKSPACE_NAME

VARCHAR2(50)

作業領域の名前。

MBR_IND

VARCHAR2(1)

作業領域がモデル内のMBR (最小境界矩形)領域であるかどうかを示します。Yは作業領域がMBRであることを示し、Nは作業領域がMBRでないことを示します

LOWER_X

NUMBER

MBR_INDがYの場合、MBRの下方の座標のX値。

UPPER_X

NUMBER

MBR_INDがYの場合、MBRの上方の座標のX値。

LOWER_Y

NUMBER

MBR_INDがYの場合、MBRの下方の座標のY値。

UPPER_Y

NUMBER

MBR_INDがYの場合、MBRの上方の座標のY値。

LOCK_IND

VARCHAR2(1)

作業領域が他のユーザーによる編集に対してロックされる(他のユーザーは編集できない)かどうかを示します。Yは作業領域がロックされることを示し、Nは作業領域がロックされないことを示します。

5.13 ネットワーク・データ・モデル・グラフのApplication Program Interface

Oracle Spatial and Graphのネットワーク・データ・モデル・グラフには、2つのクライアントApplication Program Interface (API)として、SDO_NETパッケージによって提供されるPL/SQLインタフェースと、Javaインタフェースが含まれます。

両方のインタフェースを使用してネットワーク・データの作成と更新を、またJavaインタフェースを使用してネットワークの分析を実行できます。ネットワーク表の移入および索引の作成にはPL/SQLのみまたはSQLのみを使用し、アプリケーション開発には主にJavaを使用することをお薦めします。

PL/SQL APIとJava APIには、次のパフォーマンス上の注意事項があります。

  • 空間ネットワークの空間に関係しない内容について分析または編集を行う場合は、これらの処理を開始する前にUSER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)のNETWORK_CATEGORY列の値をLOGICALに設定し、処理が完了してから値をSPATIALに戻すことで、パフォーマンスを向上できます。

    たとえば、2ノード間の最短パスの計算で検討されるのはコスト値であるため、この方法は最短パスを探す場合に利用できます。ただし、リンクに対して空間ジオメトリ・オブジェクトまたは終了メジャー値を設定する場合は、この方法を利用できません。

  • ネットワーク・オブジェクトを変更しない場合(ネットワークの分析操作または情報取得のみを実行する場合)は、ネットワーク・メモリー・オブジェクトを読取り専用で(更新不可を指定して)作成することで、パフォーマンスを向上できます。

トピック:

5.13.1 ネットワーク・データ・モデル・グラフのPL/SQLインタフェース

SDO_NETパッケージは、データベース・サーバー上でネットワークの作成、アクセスおよび管理を行うためのサブプログラムを提供します。SDO_NETのファンクションとプロシージャの使用例は、「ネットワークの例」例5-5に示しています。

SDO_NETサブプログラムは、次の論理カテゴリにグループ化できます。

SDO_NETの各ファンクションおよびプロシージャのリファレンス情報については、「SDO_NETパッケージ・サブプログラム」を参照してください。

5.13.2 ネットワーク・データ・モデル・グラフのJavaインタフェース

ネットワーク・データ・モデル・グラフの機能には、ロード・オンデマンドのJavaインタフェースが含まれています。このインタフェースに関する完全なリファレンス情報については、『Oracle Spatial and Graph Java API Reference』を参照してください。ロード・オンデマンドのJavaインタフェースのクラスは、oracle.spatial.network.lodパッケージとそのサブパッケージに含まれています。

Spatial and Graph Javaクラス・ライブラリは、<ORACLE_HOME>/md/jlib/ディレクトリの下の.jarファイルにあります。

トピック:

5.13.2.1 ネットワーク・メタデータとデータの管理

Java APIを使用して、次のようなネットワーク・メタデータとデータの管理操作を実行できます。

  • ノードおよびリンクのデータの挿入、削除および変更

  • データベースからのネットワークのロード

  • データベースへのネットワークの格納

  • データベースへのネットワーク・メタデータの格納

  • ネットワーク・メタデータの属性の変更

5.13.2.2 ロード・オンデマンド方式を使用したネットワーク分析

oracle.spatial.network.lod.NetworkAnalystクラスを使用し、ロード・オンデマンド方式を使用して次のようなネットワーク分析操作を実行できます。

  • 最短パス: グラフ理論の一般的な推移閉包問題です。任意の開始ノードおよび終了ノードについて、最短パスを検索します。

  • 到達可能性: 任意のノードについて、このノードに到達可能なすべてのノードを検索するか、またはこのノードから到達可能なすべてのノードを検索します。

  • コスト内分析: 任意のターゲット・ノードおよびコストについて、任意のコスト内でターゲット・ノードから到達可能なすべてのノードを検索します。

  • 最近隣分析: 任意のターゲット・ノードおよび近くにある複数のノードについて、近くにあるノードおよびそのノードから任意のターゲット・ノードに移動するためのコストを検索します。

  • 動的データ入力: ネットワーク更新情報を使用してNetworkUpdateオブジェクトを作成して使用します。

  • ユーザー定義のリンクおよびノードのコスト計算表: リンクまたはノードのコストを計算する方法を定義します。

5.13.3 ネットワーク・データ・モデル・グラフのXMLインタフェース

ネットワーク・データ・モデル・グラフのXML APIを使用してネットワーク分析を実行できます。Webサービス・リクエストは、Oracle Spatial and GraphのWebサービスを介してサポートされています(『Oracle Spatial and Graph開発者ガイド』を参照)。

HTTPリクエストは、Java、PLSQLまたは.NETプログラムから、あるいは単純にHTMLフォームからWebサービスに送信できます。SDO_NET.POST_XMLファンクション(「SDO_NETパッケージ・サブプログラム」を参照)を使用すると、PL/SQLユーザーはWebサービスをコールできます。

ネットワーク・データ・モデル・グラフのXML APIのXMLスキーマについては、$ORACLE_HOME/md/doc/sdondmxml.zipを参照してください。

トピック:

5.13.3.1 ユーザー指定の実装

XML APIは、LODインタフェースを実装するJavaクラスの指定を可能にすることで、ユーザー指定の制約、コスト計算またはネットワーク分析アルゴリズムの設定を取得できます。入力パラメータ(トラック輸送制約の実装でのトラックの重量または高さなど)が必要な実装については、Javaクラスがoracle.spatial.network.lod.XMLConfigurableインタフェース(つまり、次の2つのメソッド)を実装する必要があります。

  • void init(Element parameter);

  • String getXMLSchema();

initメソッドでは、入力パラメータをXML要素として渡すことができます(XML要素は、getXMLSchemaメソッドから返されるスキーマに従う必要があります)。

次のXMLコード・セグメントは、最短パス分析リクエストに対して最短パス・アルゴリズムを構成する方法の例です。

<startPoint>
  <nodeID>123</nodeID>
</startPoint>
<endPoint>
  <nodeID>456</nodeID>
</endPoint>
<shortestPathAlgorithm>
  <className>oracle.spatial.network.lod.AStar</className>
  <parameters>
    <heuristicCostFunction>
      <className>oracle.spatial.network.lod.GeodeticCostFunction</className>
      <parameters>
        <userDataCategory>0</userDataCategory>
        <xCoordUserDataIndex>0</xCoordUserDataIndex>
        <yCoordUserDataIndex>1</yCoordUserDataIndex>
      </parameters>
    </heuristicCostFunction>
    <linkLevelSelector>
      <className>oracle.spatial.network.lod.DynamicLinkLevelSelector</className>
      <parameters>
        <maxLinkLevel>2</maxLinkLevel>
        <costThreshold linkLevel="1">40000</costThreshold>
        <numHighLevelNeighbors>8</numHighLevelNeighbors>
        <costMultiplier>1.5</costMultiplier>
        <costFunction>
          <className>oracle.spatial.network.lod.GeodeticCostFunction</className>
          <parameters>
            <userDataCategory>0</userDataCategory>
            <xCoordUserDataIndex>0</xCoordUserDataIndex>
            <yCoordUserDataIndex>1</yCoordUserDataIndex>
          </parameters>
        </costFunction>
      </parameters>
    </linkLevelSelector>
  </parameters>
</shortestPathAlgorithm>

XML APIのその他の例については、NDMのチュートリアル(「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」を参照)を参照してください。

5.14 複数のスキーマが関係している場合のネットワーク・アクセス

ネットワーク所有者以外のデータベース・ユーザーがメモリーにネットワークを読み込む場合は、次のいずれかを実行する必要があります。

2つ目の方法では、ビューの作成という追加の手順が必要ですが、このビューによって、ネットワークにおけるアクセス可能な部分を柔軟に制御できるようになります。各ビューでは、ネットワークのすべての部分にアクセスできるようにすることも、WHERE句を使用してアクセスを一部分のみに制限することもできます(たとえば、WHERE STATE_CODE='NY'では、ビュー・ユーザーをNew Yorkの行に制限します)。

例として、次のシナリオについて考えてみます。

  • User1がNetwork1を作成します(したがって、所有者になります)。

  • User2がSDO_NET_MEM.NETWORK_MANAGER.READ_NETWORKプロシージャをコールしてNetwork1を読み込もうとしますが、エラーが発生します。このエラーは、User2がNetwork1のネットワーク・データ・モデル・グラフ表に対する適切な権限を所有していても発生します。

この問題に対処するには、「複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス」または「複数のスキーマが関係している場合のビューを使用したアクセス」のいずれかの方法を使用する必要があります。

トピック:

5.14.1 複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス

(適切な権限のある)所有者以外のユーザーがネットワークにアクセスできるように、ネットワーク・メタデータでネットワーク所有者を指定します。ネットワークへのアクセスを許可する所有者以外のユーザーごとに、次の手順を実行します。

  1. ユーザーに、必要なネットワーク・データ・モデル・グラフ表へのSELECTまたはREADアクセス権が付与されていることを確認します。このアクセス権がユーザーに付与されていない場合は、ネットワーク所有者として接続し、アクセス権を付与します。たとえば、User1として接続し、次の文を実行します。

    GRANT select ON network1_node$ TO user2;
    GRANT select ON network1_link$ TO user2;
    GRANT select ON network1_path$ TO user2;
    GRANT select ON network1_plink$ TO user2;
    
  2. 所有者以外のユーザーとして接続します。たとえば、User2として接続します。

  3. USER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)におけるネットワークについて、ネットワーク所有者のスキーマ名を使用してネットワーク・データ・モデル・グラフ表を修飾します。たとえば、ネットワークがこのビューにまだ定義されていない場合は、User2としての接続中に次を実行します。

    INSERT INTO user_sdo_network_metadata 
      (network, network_category, geometry_type, 
       node_table_name,node_geom_column,
       link_table_name, link_geom_column, link_direction,
       path_table_name, path_geom_column,
       path_link_table_name)
    VALUES
      ('NETWORK1','SPATIAL', 'SDO_GEOMETRY',
       'USER1.NETWORK1_NODE$', 'GEOMETRY',
       'USER1.NETWORK1_LINK$', 'GEOMETRY', 'DIRECTED',
       'USER1.NETWORK1_PATH$', 'GEOMETRY',
       'USER1.NETWORK1_PLINK$');
    

    ネットワークがこのビューにすでに定義されている場合は、定義を更新して、各表名をスキーマ名で修飾します。次に例を示します。

    UPDATE USER_SDO_NETWORK_METADATA
      SET node_table_name = 'USER1.NETWORK1_NODE$',
          link_table_name = 'USER1.NETWORK1_LINK$',
          path_table_name = 'USER1.NETWORK1_PATH$',
          path_link_table_name = 'USER1.NETWORK1_PLINK$'
      WHERE network = 'NETWORK1';
    

このシナリオでは、これでUser2がNETWORK1をメモリーに読み込めるようになります。

5.14.2 複数のスキーマが関係している場合のビューを使用したアクセス

(適切な権限のある)所有者以外のユーザーがネットワークまたはネットワークの特定の部分にアクセスできるように、ビューを作成します。ネットワークへのアクセスを許可する所有者以外のユーザーごとに、次の手順を実行します。

  1. ユーザーに、必要なネットワーク・データ・モデル・グラフ表へのSELECTまたはREADアクセス権が付与されていることを確認します。このアクセス権がユーザーに付与されていない場合は、ネットワーク所有者として接続し、アクセス権を付与します。たとえば、User1として接続し、次の文を実行します。

    GRANT select ON network1_node$ TO user2;
    GRANT select ON network1_link$ TO user2;
    GRANT select ON network1_path$ TO user2;
    GRANT select ON network1_plink$ TO user2;
    
  2. 所有者以外のユーザーとして接続します。たとえば、User2として接続します。

  3. 必要な各ネットワーク・データ・モデル・グラフ・ノードに対するビューを作成し、各ビューでは対応する表の列をすべて選択するようにします。表名をネットワーク所有者のスキーマ名で修飾します。たとえば、User2としての接続中に次のようにします。

    CREATE VIEW network1_node$ AS select * from user1.network1_node$;
    CREATE VIEW network1_link$ AS select * from user1.network1_link$;
    CREATE VIEW network1_path$ AS select * from user1.network1_path$;
    CREATE VIEW network1_plink$ AS select * from user1.network1_plink$;

    注意:

    この例では、基礎となる表のすべてのデータを含むビューを示していますが、各ビューの定義でWHERE句(WHERE STATE_CODE='NY'など)を使用することで、ネットワークの使用可能な部分を制限できます。

  4. 新しく作成したビューを指定する行をUSER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に追加します。たとえば、User2としての接続中に次のようにします。

    INSERT INTO user_sdo_network_metadata 
      (network, network_category, geometry_type, 
       node_table_name,node_geom_column,
       link_table_name, link_geom_column, link_direction,
       path_table_name, path_geom_column,
       path_link_table_name)
    VALUES
      ('NETWORK1','SPATIAL', 'SDO_GEOMETRY',
       'NETWORK1_NODE$', 'GEOMETRY',
       'NETWORK1_LINK$', 'GEOMETRY', 'DIRECTED',
       'NETWORK1_PATH$', 'GEOMETRY',
       'NETWORK1_PLINK$');
    

このシナリオでは、これでUser2が作成されたビューを介してNETWORK1の使用可能な部分をメモリーに読み込めるようになります。

5.15 ネットワークの例

このトピックでは、複数のネットワーク・データ・モデル・グラフの例を示します。

ほとんどは簡単な例です。すべての例でPL/SQL APIを使用し、一部の例では他のAPIも使用しています。

この項の例では、この章で説明した概念を示しています。また、「SDO_NETパッケージ・サブプログラム」に示すPL/SQLのファンクションおよびプロシージャを使用しています。

トピック:

5.15.1 単純な空間(SDO)ネットワークの例(PL/SQL)

この項では、3つのノードおよび各ノード間のリンクが含まれる非常に単純な空間(SDO、非LRS)ネットワークの例を示します。図5-4に、このネットワークを示します。

図5-4 単純な空間(SDO)ネットワーク

図5-4の説明が続きます
図5-4「単純な空間(SDO)ネットワーク」の説明

図5-4に示すとおり、ノードN1は点1,1、ノードN2は点15,1、ノードN3は点9,4に存在します。リンクL1はノードN1とノードN2を結ぶ直線、リンクL2はノードN2とノードN3を結ぶ直線、リンクL3はノードN3とノードN1を結ぶ直線です。リンクにはその他のノードまたは形状点は含まれません。

例5-3では、次の処理を行います。

  • SDO_NET.CREATE_SDO_NETWORKプロシージャのコール時に、SDO_NET1有向ネットワークを作成し、SDO_NET1_NODE$、SDO_NET1_LINK$、SDO_NET1_PATH$およびSDO_NET1_PLINK$の各表を作成して、xxx_SDO_NETWORK_METADATAビューを更新します。すべてのジオメトリ列は、GEOMETRYという名前になります。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。

  • ノード表、リンク表、パス表およびパスリンク表を移入します。これによって、ノード表に3つの行、リンク表に3つの行、パス表に2つの行、パスリンク表に4つの行が挿入されます。

  • Oracle Spatial and Graphメタデータを更新し、ノード表およびリンク表のGEOMETRY列に空間索引を作成します。(このアクションは、ネットワーク管理には直接関係ありませんが、アプリケーションでこれらのジオメトリ列の空間索引を利用する場合に必要です。)

例5-3には、SDO_NETのファンクションおよびプロシージャの使用が多くは示されていません(これらについては、「空間(LRS)ネットワークの例(PL/SQL)」例5-5を参照してください)。

例5-3 単純な空間(SDO)ネットワークの例(PL/SQL)

-- Create the SDO_NET1 directed network. Also creates the SDO_NET1_NODE$, 
-- SDO_NET1_LINK$, SDO_NET1_PATH$, SDO_NET1_PLINK$ tables, and updates 
-- USER_SDO_NETWORK_METADATA. All geometry columns are named GEOMETRY. 
-- Both the node and link tables contain a cost column named COST. 
EXECUTE SDO_NET.CREATE_SDO_NETWORK('SDO_NET1', 1, TRUE, TRUE);
 
-- Populate the SDO_NET1_NODE$ table.
-- N1
INSERT INTO sdo_net1_node$ (node_id, node_name, active, geometry, cost)
  VALUES(1, 'N1', 'Y',
    SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(1,1,NULL), NULL, NULL),
    5);
-- N2
INSERT INTO sdo_net1_node$ (node_id, node_name, active, geometry, cost)
  VALUES(2, 'N2', 'Y',
    SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(15,1,NULL), NULL, NULL),
    8);
-- N3
INSERT INTO sdo_net1_node$ (node_id, node_name, active, geometry, cost)
  VALUES(3, 'N3', 'Y',
    SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(9,4,NULL), NULL, NULL),
    4);
 
-- Populate the SDO_NET1_LINK$ table.
-- L1
INSERT INTO sdo_net1_link$ (link_id, link_name, start_node_id, end_node_id,
     active, geometry, cost, bidirected)
  VALUES(1, 'L1', 1, 2, 'Y',
    SDO_GEOMETRY(2002, NULL, NULL, 
      SDO_ELEM_INFO_ARRAY(1,2,1), 
        SDO_ORDINATE_ARRAY(1,1, 15,1)),
    14, 'Y');
-- L2
INSERT INTO sdo_net1_link$ (link_id, link_name, start_node_id, end_node_id,
     active, geometry, cost, bidirected)
   VALUES(2, 'L2', 2, 3, 'Y',
    SDO_GEOMETRY(2002, NULL, NULL, 
      SDO_ELEM_INFO_ARRAY(1,2,1), 
        SDO_ORDINATE_ARRAY(15,1, 9,4)),
    10, 'Y');
-- L3
INSERT INTO sdo_net1_link$ (link_id, link_name, start_node_id, end_node_id,
     active, geometry, cost, bidirected)
  VALUES(3, 'L3', 3, 1, 'Y',
    SDO_GEOMETRY(2002, NULL, NULL, 
      SDO_ELEM_INFO_ARRAY(1,2,1), 
        SDO_ORDINATE_ARRAY(9,4, 1,1)),
    10, 'Y');
 
-- Do not populate the SDO_NET1_PATH$ and SDO_NET1_PLINK$ tables now.
-- Do this only when you need to create any paths.
 
---------------------------------------------------------------------------
-- REMAINING STEPS NEEDED TO USE SPATIAL INDEXES --
---------------------------------------------------------------------------
-- Update the USER_SDO_GEOM_METADATA view. This is required before the
-- spatial index can be created. Do this only once for each layer
-- (that is, table-column combination).

INSERT INTO user_sdo_geom_metadata
    (TABLE_NAME,
     COLUMN_NAME,
     DIMINFO,
     SRID)
  VALUES (
    'SDO_NET1_NODE$',
    'GEOMETRY',
    SDO_DIM_ARRAY(   -- 20X20 grid
      SDO_DIM_ELEMENT('X', 0, 20, 0.005),
      SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
       ),
    NULL   -- SRID (spatial reference system, also called coordinate system)
  );
INSERT INTO user_sdo_geom_metadata
    (TABLE_NAME,
     COLUMN_NAME,
     DIMINFO,
     SRID)
  VALUES (
    'SDO_NET1_LINK$',
    'GEOMETRY',
    SDO_DIM_ARRAY(   -- 20X20 grid
      SDO_DIM_ELEMENT('X', 0, 20, 0.005),
      SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
       ),
    NULL   -- SRID (spatial reference system, also called coordinate system)
  );
 
-- Create the spatial indexes
CREATE INDEX sdo_net1_nodes_idx ON sdo_net1_node$(geometry)
  INDEXTYPE IS MDSYS.SPATIAL_INDEX;
CREATE INDEX sdo_net1_links_idx ON sdo_net1_link$(geometry)
  INDEXTYPE IS MDSYS.SPATIAL_INDEX;

5.15.2 単純な論理ネットワークの例(PL/SQL)

この項では、3つのノードおよびノード間のリンクが含まれる非常に単純な論理ネットワークの例を示します。図5-5に、このネットワークを示します。

図5-5 単純な論理ネットワーク

図5-5の説明は次にあります。
図5-5「単純な論理ネットワーク」の説明

図5-5に示すとおり、リンクL1はノードN1とノードN2を結ぶ直線、リンクL2はノードN2とノードN3を結ぶ直線、リンクL3はノードN3とノードN1を結ぶ直線です。リンクにはその他のノードは含まれません。

例5-4では、SDO_NET.CREATE_LOGICAL_NETWORKプロシージャをコールし、これによって、LOG_NET1有向ネットワークの作成、LOG_NET1_NODE$、LOG_NET1_LINK$、LOG_NET1_PATH$およびLOG_NET1_PLINK$の各表の作成、およびxxx_SDO_NETWORK_METADATAビューの更新が行われます。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。(これは論理ネットワークであるため、ジオメトリ列は含まれません。)この例では、ノード表およびリンク表の移入も行われます。

例5-4には、SDO_NETのファンクションおよびプロシージャの使用が多くは示されていません(これらについては、「論理階層ネットワークの例(PL/SQL)」の論理階層ネットワークの例(例5-6)を参照してください)。

例5-4 単純な論理ネットワークの例(PL/SQL)

-- Creates the LOG_NET1 directed logical network. Also creates the
-- LOG_NET1_NODE$, LOG_NET1_LINK$, LOG_NET1_PATH$,
-- and LOG_NET1_PLINK$ tables, and updates USER_SDO_NETWORK_METADATA.
-- Both the node and link tables contain a cost column named COST. 
EXECUTE SDO_NET.CREATE_LOGICAL_NETWORK('LOG_NET1', 1, TRUE, TRUE);
 
-- Populate the LOG_NET1_NODE$ table.
-- N1
INSERT INTO log_net1_node$ (node_id, node_name, active, cost)
  VALUES (1, 'N1', 'Y', 2);
-- N2
INSERT INTO log_net1_node$ (node_id, node_name, active, cost)
  VALUES (2, 'N2', 'Y', 3);
-- N3
INSERT INTO log_net1_node$ (node_id, node_name, active, cost)
  VALUES (3, 'N3', 'Y', 2);
 
-- Populate the LOG_NET1_LINK$ table.
-- L1
INSERT INTO log_net1_link$ (link_id, link_name, start_node_id, end_node_id,
     active, link_level, cost)
  VALUES (1, 'L1', 1, 2, 'Y', 1, 10);
-- L2
INSERT INTO log_net1_link$ (link_id, link_name, start_node_id, end_node_id,
     active, link_level, cost)
  VALUES (2, 'L2', 2, 3, 'Y', 1, 7);
-- L3
INSERT INTO log_net1_link$ (link_id, link_name, start_node_id, end_node_id,
     active, link_level, cost)
  VALUES (3, 'L3', 3, 1, 'Y', 1, 8);
 
-- Do not populate the LOG_NET1_PATH$ and LOG_NET1_PLINK$ tables now.
-- Do this only when you need to create any paths.

5.15.3 空間(LRS)ネットワークの例(PL/SQL)

この項では、図5-6に示す道路(ルート)を使用する空間(LRS)ネットワークの例を示します。それぞれの道路は、1つ以上の道路セグメント・ジオメトリ(図を参照)から抜き出された、(リンクに関連付けられた)個々の線セグメントで作成されています。

図5-6 空間(LRS)ネットワークの道路および道路セグメントの例

図5-6の説明が続きます
図5-6「空間(LRS)ネットワークの道路および道路セグメントの例」の説明

次に、図5-6について説明します。

  • Route1は、点2,2から開始し、点5,14で終了します。このルートには、N1N2N3N4N5N6およびN7の各ノードが含まれます。このルートには、R1L1R1L2R1L3R1L4R1L5およびR1L6の各リンクが含まれます。

  • Route2は、点8,4から開始し、点8,13で終了します。これには、N3N6およびN8の各ノードが含まれます。これには、R2L1およびR2L2の各リンクが含まれます。

  • Route3は、点12,10から開始し、点5,14で終了します。これには、N5N8およびN7の各ノードが含まれます。これには、R3L1およびR3L2の各リンクが含まれます。

  • 図の右側には、4つの道路セグメント・ジオメトリが個別に示されています。(各セグメント上の点には、対応するノード名がラベル付けされ、各セグメント・ジオメトリが、左側の図のどの部分に相当するかわかりやすくなっています。)

例5-5では、次の処理を行います。

  • 道路セグメント・ジオメトリを格納する表を作成します。

  • 4つの道路セグメント・ジオメトリを表に挿入します。

  • USER_SDO_GEOM_METADATAビューに空間メタデータを挿入します。

  • ROAD_SEGMENTS表のジオメトリ列に空間索引を作成します。

  • ノード表を作成および移入します。

  • リンク表を作成および移入します。

  • 将来使用する場合に備えて、パス表およびパスリンク表を作成および移入します。(アプリケーションでパスを使用できるようにするには、これらの2つの表を移入する必要があります。)

  • USER_SDO_NETWORK_METADATAビューにネットワーク・メタデータを挿入します。

例5-5 空間(LRS)ネットワークの例(PL/SQL)

---------------------------------------------------------------------------
-- CREATE AND POPULATE TABLE --
---------------------------------------------------------------------------
-- Create a table for road segments. Use LRS.
CREATE TABLE road_segments (
  segment_id  NUMBER PRIMARY KEY,
  segment_name  VARCHAR2(32),
  segment_geom  SDO_GEOMETRY, 
  geom_id NUMBER);
 
-- Populate the table with road segments.
INSERT INTO road_segments VALUES(
  1,
  'Segment1',
  SDO_GEOMETRY(
    3302,  -- line string, 3 dimensions (X,Y,M), 3rd is measure dimension
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
    SDO_ORDINATE_ARRAY(
      2,2,0,   -- Starting point - Node1; 0 is measure from start.
      2,4,2,   -- Node2; 2 is measure from start. 
      8,4,8,   -- Node3; 8 is measure from start. 
      12,4,12) -- Node4; 12 is measure from start. 
  ), 1001
);
 
INSERT INTO road_segments VALUES(
  2,
  'Segment2',
  SDO_GEOMETRY(
    3302,  -- line string, 3 dimensions (X,Y,M), 3rd is measure dimension
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
    SDO_ORDINATE_ARRAY(
      8,4,0,   -- Node3; 0 is measure from start. 
      8,10,6,  -- Node6; 6 is measure from start. 
      8,13,9)  -- Ending point - Node8; 9 is measure from start.
  ), 1002
);
 
INSERT INTO road_segments VALUES(
  3,
  'Segment3',
  SDO_GEOMETRY(
    3302,  -- line string, 3 dimensions (X,Y,M), 3rd is measure dimension
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
    SDO_ORDINATE_ARRAY(
      12,4,0,     -- Node4; 0 is measure from start.
      12,10,6,    -- Node5; 6 is measure from start. 
      8,13,11,    -- Node8; 11 is measure from start. 
      5,14,14.16) -- Ending point - Node7; 14.16 is measure from start.
  ), 1003
);
 
INSERT INTO road_segments VALUES(
  4,
  'Segment4',
  SDO_GEOMETRY(
    3302,  -- line string, 3 dimensions (X,Y,M), 3rd is measure dimension
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
    SDO_ORDINATE_ARRAY(
      12,10,0, -- Node5; 0 is measure from start.
      8,10,4,  -- Node6; 4 is measure from start.  
      5,14,9)  -- Ending point - Node7; 9 is measure from start.
  ), 1004
);
 
---------------------------------------------------------------------------
-- UPDATE THE SPATIAL METADATA --
---------------------------------------------------------------------------
-- Update the USER_SDO_GEOM_METADATA view. This is required before the
-- spatial index can be created. Do this only once for each layer
-- (that is, table-column combination; here: road_segment and segment_geom).
INSERT INTO user_sdo_geom_metadata
    (TABLE_NAME,
     COLUMN_NAME,
     DIMINFO,
     SRID)
  VALUES (
  'ROAD_SEGMENTS',
  'SEGMENT_GEOM',
  SDO_DIM_ARRAY(   -- 20X20 grid
    SDO_DIM_ELEMENT('X', 0, 20, 0.005),
    SDO_DIM_ELEMENT('Y', 0, 20, 0.005),
    SDO_DIM_ELEMENT('M', 0, 20, 0.005) -- Measure dimension
     ),
  NULL   -- SRID (spatial reference system, also called coordinate system)
);
 
-------------------------------------------------------------------
-- CREATE THE SPATIAL INDEX --
-------------------------------------------------------------------
CREATE INDEX road_segments_idx ON road_segments(segment_geom)
  INDEXTYPE IS MDSYS.SPATIAL_INDEX;
  
--------------------------------
-- USE SDO_NET SUBPROGRAMS
--------------------------------
 
-- This procedure does not use the CREATE_LRS_NETWORK procedure. Instead,
-- the user creates the network tables and populates the network metadata view.
-- Basic steps:
-- 1. Create and populate the node table.
-- 2. Create and populate the link table.
-- 3. Create the path table and paths and links table (for possible 
--    future use, before which they will need to be populated).
-- 4. Populate the network metadata (USER_SDO_NETWORK_METADATA).
--    Note: Can be done before or after Steps 1-3.
-- 5. Use various SDO_NET functions and procedures.
 
-- 1. Create and populate the node table.
EXECUTE SDO_NET.CREATE_NODE_TABLE('ROADS_NODES', 'LRS_GEOMETRY', 'NODE_GEOMETRY', 'COST', 1);
 
-- Populate the node table.
 
-- N1
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure) 
  VALUES (1, 'N1', 'Y', 1001, 0);
 
-- N2
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure)
  VALUES (2, 'N2', 'Y', 1001, 2);
 
-- N3
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure)
  VALUES (3, 'N3', 'Y', 1001, 8);
 
-- N4
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure)
  VALUES (4, 'N4', 'Y', 1001, 12);
 
-- N5
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure)
  VALUES (5, 'N5', 'Y', 1004, 0);
 
-- N6
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure)
  VALUES (6, 'N6', 'Y', 1002, 6);
 
-- N7
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure)
  VALUES (7, 'N7', 'Y', 1004, 9);
 
-- N8
INSERT INTO roads_nodes (node_id, node_name, active, geom_id, measure)
  VALUES (8, 'N8', 'Y', 1002, 9);
 
-- 2. Create and populate the link table.
EXECUTE SDO_NET.CREATE_LINK_TABLE('ROADS_LINKS', 'LRS_GEOMETRY', 'LINK_GEOMETRY', 'COST', 1);
 
-- Populate the link table.
 
-- Route1, Link1
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active, 
   cost, geom_id, start_measure, end_measure)
VALUES (101, 'R1L1', 1, 2, 'Y', 3, 1001, 0, 2);
 
-- Route1, Link2
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active, 
   cost, geom_id, start_measure, end_measure)
VALUES (102, 'R1L2', 2, 3, 'Y', 15, 1001, 2, 8);
 
 -- Route1, Link3
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (103, 'R1L3', 3, 4, 'Y', 10, 1001, 8, 12);
 
-- Route1, Link4
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (104, 'R1L4', 4, 5, 'Y', 15, 1003, 0, 6);
 
-- Route1, Link5
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (105, 'R1L5', 5, 6, 'Y', 10, 1004, 0, 4);
 
-- Route1, Link6
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (106, 'R1L6', 6, 7, 'Y', 7, 1004, 4, 9);
 
-- Route2, Link1 (cost = 30, a slow drive)
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (201, 'R2L1', 3, 6, 'Y', 30, 1002, 0, 6);
 
-- Route2, Link2
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (202, 'R2L2', 6, 8, 'Y', 5, 1002, 6, 9);
 
-- Route3, Link1
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (301, 'R3L1', 5, 8, 'Y', 5, 1003, 6, 11);
 
-- Route3, Link2
INSERT INTO roads_links (link_id, link_name, start_node_id, end_node_id, active,
   cost, geom_id, start_measure, end_measure)
VALUES (302, 'R3L2', 8, 7, 'Y', 5, 1003, 11, 14.16);
 
-- 3. Create the path table (to store created paths) and the path-link 
--    table (to store links for each path) for possible future use,
--    before which they will need to be populated.
EXECUTE SDO_NET.CREATE_PATH_TABLE('ROADS_PATHS', 'PATH_GEOMETRY');
EXECUTE SDO_NET.CREATE_PATH_LINK_TABLE('ROADS_PATHS_LINKS');
 
-- 4. Populate the network metadata (USER_SDO_NETWORK_METADATA).
 
INSERT INTO user_sdo_network_metadata 
    (NETWORK,
     NETWORK_CATEGORY,
     GEOMETRY_TYPE,
     NETWORK_TYPE,
     NO_OF_HIERARCHY_LEVELS,
     NO_OF_PARTITIONS,
     LRS_TABLE_NAME,
     LRS_GEOM_COLUMN,
     NODE_TABLE_NAME,
     NODE_GEOM_COLUMN,
     NODE_COST_COLUMN,
     LINK_TABLE_NAME,
     LINK_GEOM_COLUMN,
     LINK_DIRECTION,
     LINK_COST_COLUMN,
     PATH_TABLE_NAME,
     PATH_GEOM_COLUMN,
     PATH_LINK_TABLE_NAME)
  VALUES (
    'ROADS_NETWORK',  -- Network name
    'SPATIAL',  -- Network category
    'LRS_GEOMETRY',  -- Geometry type
    'Roadways',  -- Network type (user-defined)
    1,  -- No. of levels in hierarchy
    1,  -- No. of partitions
    'ROAD_SEGMENTS',   -- LRS table name
    'SEGMENT_GEOM' ,  -- LRS geometry column
    'ROADS_NODES',  -- Node table name
    'NODE_GEOMETRY',  -- Node geometry column
    'COST',  -- Node cost column
    'ROADS_LINKS',  -- Link table name
    'LINK_GEOMETRY',  -- Link geometry column
    'DIRECTED',  -- Link direction
    'COST',  -- Link cost column
    'ROADS_PATHS',  -- Path table name
    'PATH_GEOMETRY',  -- Path geometry column
    'ROADS_PATHS_LINKS'  -- Paths and links table
    );
 
-- 5. Use various SDO_NET functions and procedures.
 
-- Validate the network.
SELECT SDO_NET.VALIDATE_NETWORK('ROADS_NETWORK') FROM DUAL;
 
-- Validate parts or aspects of the network.
SELECT SDO_NET.VALIDATE_LINK_SCHEMA('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.VALIDATE_LRS_SCHEMA('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.VALIDATE_NODE_SCHEMA('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.VALIDATE_PATH_SCHEMA('ROADS_NETWORK') FROM DUAL;
 
-- Retrieve various information (GET_xxx and some other functions).
SELECT SDO_NET.GET_CHILD_LINKS('ROADS_NETWORK', 101) FROM DUAL;
SELECT SDO_NET.GET_CHILD_NODES('ROADS_NETWORK', 1) FROM DUAL;
SELECT SDO_NET.GET_GEOMETRY_TYPE('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_IN_LINKS('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_INVALID_LINKS('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_INVALID_NODES('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_INVALID_PATHS('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_ISOLATED_NODES('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LINK_COST_COLUMN('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LINK_DIRECTION('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LINK_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LINK_GEOMETRY('ROADS_NETWORK', 103) FROM DUAL;
SELECT SDO_NET.GET_LINK_TABLE_NAME('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LRS_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LRS_LINK_GEOMETRY('ROADS_NETWORK', 103) FROM DUAL;
SELECT SDO_NET.GET_LRS_NODE_GEOMETRY('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_LRS_TABLE_NAME('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NETWORK_CATEGORY('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NETWORK_ID('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NETWORK_NAME(3) FROM DUAL;
SELECT SDO_NET.GET_NETWORK_TYPE('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NO_OF_HIERARCHY_LEVELS('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NO_OF_LINKS('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NO_OF_NODES('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NODE_DEGREE('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_NODE_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NODE_GEOMETRY('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_NODE_IN_DEGREE('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_NODE_OUT_DEGREE('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_NODE_TABLE_NAME('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NODE_COST_COLUMN('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NODE_HIERARCHY_LEVEL('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_OUT_LINKS('ROADS_NETWORK', 3) FROM DUAL;
SELECT SDO_NET.GET_PATH_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_PATH_TABLE_NAME('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_COMPLEX('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_HIERARCHICAL('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_LOGICAL('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_SIMPLE('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_SPATIAL('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.LRS_GEOMETRY_NETWORK('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.NETWORK_EXISTS('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.SDO_GEOMETRY_NETWORK('ROADS_NETWORK') FROM DUAL;
SELECT SDO_NET.TOPO_GEOMETRY_NETWORK('ROADS_NETWORK') FROM DUAL;
 
-- Copy a network.
EXECUTE SDO_NET.COPY_NETWORK('ROADS_NETWORK', 'ROADS_NETWORK2');
 
-- Create a trigger.
EXECUTE SDO_NET.CREATE_DELETE_TRIGGER('ROADS_NETWORK');

5.15.4 論理階層ネットワークの例(PL/SQL)

この項では、図5-7に示すノードおよびリンクが含まれる論理ネットワークの例を示します。論理ネットワークであるため、空間ジオメトリは関連付けられません。(図5-7は、基本的に「ネットワーク階層」図5-3と同じですが、ノードおよびリンクがラベル付けされています。)

図5-7 論理ネットワークのノードおよびリンクの例

図5-7の説明が続きます
図5-7「論理ネットワークのノードおよびリンクの例」の説明

次に、図5-7について説明します。

  • ネットワークは階層ネットワークで、2つのレベルがあります。上位レベル(レベル2)は、2つのノード(HN1HN2)で構成されており、残りのノードおよびリンクは、階層の下位レベル(レベル1)に含まれます。

  • レベル1の各ノードは、レベル2のいずれかのノードの子ノードです。ノードHN1は、子ノードN1N2N3N4N5およびN6を持ちます。ノードHN2は、子ノードN7N8N9N10N11N12N13およびN14を持ちます。

  • 1つのリンク(HN1HN2)がノードHN1およびHN2をリンクし、2つのリンク(N5N8およびN6N7)は、親リンクHN1HN2の子リンクとなります。ただし、リンクは特定のネットワーク階層レベルには関連付けられていません。

例5-6では、次の処理を行います。

  • ノード表を作成および移入します。

  • リンク表を作成および移入します。

  • 将来使用する場合に備えて、パス表およびパスリンク表を作成および移入します。(アプリケーションでパスを使用できるようにするには、これらの2つの表を移入する必要があります。)

  • USER_SDO_NETWORK_METADATAビューにネットワーク・メタデータを挿入します。

  • SDO_NETの様々なファンクションおよびプロシージャを使用します。

例5-6 論理ネットワークの例(PL/SQL)

-- Basic steps:
-- 1. Create and populate the node table.
-- 2. Create and populate the link table.
-- 3. Create the path table and paths and links table (for possible 
--    future use, before which they will need to be populated).
-- 4. Populate the network metadata (USER_SDO_NETWORK_METADATA).
--    Note: Can be done before or after Steps 1-3.
-- 5. Use various SDO_NET functions and procedures.
 
-- 1. Create and populate the node table.
EXECUTE SDO_NET.CREATE_NODE_TABLE('XYZ_NODES', NULL, NULL, NULL, 2);
 
-- Populate the node table, starting with the highest level in the hierarchy.
 
-- HN1 (Hierarchy level=2, highest in this network)
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level)
  VALUES (1, 'HN1', 'Y', 2);
 
-- HN2 (Hierarchy level=2, highest in this network)
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level)
  VALUES (2, 'HN2', 'Y', 2);
 
-- N1 (Hierarchy level 1, parent node ID = 1 for N1 through N6)
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (101, 'N1', 'Y', 1, 1);
 
-- N2 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (102, 'N2', 'Y', 1, 1);
 
-- N3 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (103, 'N3', 'Y', 1, 1);
 
-- N4 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (104, 'N4', 'Y', 1, 1);
 
-- N5 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (105, 'N5', 'Y', 1, 1);
 
-- N6 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (106, 'N6', 'Y', 1, 1);
 
-- N7 (Hierarchy level 1, parent node ID = 2 for N7 through N14)
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (107, 'N7', 'Y', 1, 2);
 
-- N8 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (108, 'N8', 'Y', 1, 2);
 
-- N9 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (109, 'N9', 'Y', 1, 2);
 
-- N10 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (110, 'N10', 'Y', 1, 2);
 
-- N11 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (111, 'N11', 'Y', 1, 2);
 
-- N12 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (112, 'N12', 'Y', 1, 2);
 
-- N13 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (113, 'N13', 'Y', 1, 2);
 
-- N14 
INSERT INTO xyz_nodes (node_id, node_name, active, hierarchy_level, 
     parent_node_id)
  VALUES (114, 'N14', 'Y', 1, 2);
 
-- 2. Create and populate the link table.
EXECUTE SDO_NET.CREATE_LINK_TABLE('XYZ_LINKS', NULL, NULL, 'COST', 2);
 
-- Populate the link table.
 
-- HN1HN2 (single link in highest hierarchy level: link level = 2)
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level)
  VALUES (1001, 'HN1HN2', 1, 2, 'Y', 2);
 
-- For remaining links, link level = 1 and cost (10, 20, or 30) varies among links.
-- N1N2
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1101, 'N1N2', 101, 102, 'Y', 1, 10);
 
-- N1N3
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1102, 'N1N3', 101, 103, 'Y', 1, 20);
 
-- N2N3
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1103, 'N2N3', 102, 103, 'Y', 1, 30);
 
-- N3N4
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1104, 'N3N4', 103, 104, 'Y', 1, 10);
 
-- N4N5
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1105, 'N4N5', 104, 105, 'Y', 1, 20);
 
-- N4N6
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1106, 'N4N6', 104, 106, 'Y', 1, 30);
 
-- N5N6
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1107, 'N5N6', 105, 106, 'Y', 1, 10);
 
-- N5N8 (child of the higher-level link: parent ID = 1001)
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost, parent_link_id)
  VALUES (1108, 'N5N8', 105, 108, 'Y', 1, 20, 1001);
 
-- N6N7 (child of the higher-level link: parent ID = 1001)
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost, parent_link_id)
  VALUES (1109, 'N6N7', 106, 107, 'Y', 1, 30, 1001);
 
-- N7N8
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1110, 'N7N8', 107, 108, 'Y', 1, 10);
 
-- N7N9
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1111, 'N7N9', 107, 109, 'Y', 1, 20);
 
-- N8N9
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1112, 'N8N9', 108, 109, 'Y', 1, 30);
 
-- N9N10
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1113, 'N9N10', 109, 110, 'Y', 1, 30);
 
-- N9N13
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1114, 'N9N13', 109, 113, 'Y', 1, 10);
 
-- N10N11
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1115, 'N10N11', 110, 111, 'Y', 1, 20);
 
-- N11N12
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1116, 'N11N12', 111, 112, 'Y', 1, 30);
 
-- N12N13
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1117, 'N12N13', 112, 113, 'Y', 1, 10);
 
-- N12N14
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1118, 'N12N14', 112, 114, 'Y', 1, 20);
 
-- N13N14
INSERT INTO xyz_links (link_id, link_name, start_node_id, end_node_id, active, 
     link_level, cost)
  VALUES (1119, 'N13N14', 113, 114, 'Y', 1, 30);
 
-- 3. Create the path table (to store created paths) and the path-link 
--    table (to store links for each path) for possible future use,
--    before which they will need to be populated.
EXECUTE SDO_NET.CREATE_PATH_TABLE('XYZ_PATHS', NULL);
EXECUTE SDO_NET.CREATE_PATH_LINK_TABLE('XYZ_PATHS_LINKS');
 
-- 4. Populate the network metadata (USER_SDO_NETWORK_METADATA).
 
INSERT INTO user_sdo_network_metadata 
    (NETWORK,
     NETWORK_CATEGORY,
     NO_OF_HIERARCHY_LEVELS,
     NO_OF_PARTITIONS,
     NODE_TABLE_NAME,
     LINK_TABLE_NAME,
     LINK_DIRECTION,
     LINK_COST_COLUMN,
     PATH_TABLE_NAME,
     PATH_LINK_TABLE_NAME)
  VALUES (
    'XYZ_NETWORK',  -- Network name
    'LOGICAL',   -- Network category
    2,  -- No. of levels in hierarchy
    1,  -- No. of partitions
    'XYZ_NODES',  -- Node table name
    'XYZ_LINKS',  -- Link table name
    'BIDIRECTED',  -- Link direction
    'COST',  -- Link cost column
    'XYZ_PATHS',  -- Path table name
    'XYZ_PATHS_LINKS'  -- Path-link table name
  );
 
-- 5. Use various SDO_NET functions and procedures.
 
-- Validate the network.
SELECT SDO_NET.VALIDATE_NETWORK('XYZ_NETWORK') FROM DUAL;
 
-- Validate parts or aspects of the network.
SELECT SDO_NET.VALIDATE_LINK_SCHEMA('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.VALIDATE_LRS_SCHEMA('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.VALIDATE_NODE_SCHEMA('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.VALIDATE_PATH_SCHEMA('XYZ_NETWORK') FROM DUAL;
 
-- Retrieve various information (GET_xxx and some other functions).
SELECT SDO_NET.GET_CHILD_LINKS('XYZ_NETWORK', 1001) FROM DUAL;
SELECT SDO_NET.GET_CHILD_NODES('XYZ_NETWORK', 1) FROM DUAL;
SELECT SDO_NET.GET_CHILD_NODES('XYZ_NETWORK', 2) FROM DUAL;
SELECT SDO_NET.GET_IN_LINKS('XYZ_NETWORK', 104) FROM DUAL;
SELECT SDO_NET.GET_LINK_COST_COLUMN('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LINK_DIRECTION('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_LINK_TABLE_NAME('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NETWORK_TYPE('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NO_OF_HIERARCHY_LEVELS('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NO_OF_LINKS('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NO_OF_NODES('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.GET_NODE_DEGREE('XYZ_NETWORK', 104) FROM DUAL;
SELECT SDO_NET.GET_NODE_IN_DEGREE('XYZ_NETWORK', 104) FROM DUAL;
SELECT SDO_NET.GET_NODE_OUT_DEGREE('XYZ_NETWORK', 104) FROM DUAL;
SELECT SDO_NET.GET_OUT_LINKS('XYZ_NETWORK', 104) FROM DUAL;
SELECT SDO_NET.GET_PATH_TABLE_NAME('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_HIERARCHICAL('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_LOGICAL('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.IS_SPATIAL('XYZ_NETWORK') FROM DUAL;
SELECT SDO_NET.NETWORK_EXISTS('XYZ_NETWORK') FROM DUAL;
 
-- Copy a network.
EXECUTE SDO_NET.COPY_NETWORK('XYZ_NETWORK', 'XYZ_NETWORK2');
 
-- Create a trigger.
EXECUTE SDO_NET.CREATE_DELETE_TRIGGER('XYZ_NETWORK');

5.15.5 パーティション化とロード・オンデマンド分析の例(PL/SQL、XMLおよびJava)

この項では、関連する操作を含むネットワークのパーティション化の例、およびロード・オンデマンドでのネットワーク分析の実行の例を示します。この例では、「ロード・オンデマンドを使用したネットワーク分析」で説明した概念と方法を示します。

パーティション化したネットワークでのロード・オンデマンド分析のその他の使用例は、デモ・ファイル(「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」を参照)に含まれています。

例5-7 空間ネットワークのパーティション化

例5-7では、NYC_NETという名前の空間ネットワークをパーティション化します。(このネットワークはすでに存在し、そのメタデータ表、ノード表およびリンク表は移入済であると想定します。)

例5-7および例5-8では、NYC_NETネットワークに必要なパーティション表を生成します。これらの例の実行後に、.logファイルで現行の状態またはパーティション化やBLOB生成中に発生したエラーをチェックできます。

exec sdo_net.spatial_partition(
  network->'NYC_NET', -- network name
  partition_table_name->'NYC_PART$', -- partition table name
  max_num_nodes->5000, -- max. number of nodes per partition
  log_loc->'MDDIR', -- partition log directory
  log_file->'nyc_part.log', --partition log file name
  open_mode->'w', -- partition log file open mode
  link_level->1); -- link level

例5-8 パーティションBLOBの生成

例5-8では、ネットワークのパーティションBLOBを生成します。

exec sdo_net.generate_partition_blobs(
  network->'NYC_NET', ,-- network name
  link_level ->1, -- link level
  partition_blob_table_name->'NYC_PBLOB$', -- partition blob table name
  includeUserdata->FALSE, -- include user data in partition blobs?
  log_loc->'MYDIR',  -- partition log directory
  log_file->'nyc_part.log', --partition log file name
  open_mode->'a'); -- partition log file open mode

例5-9 パーティション・キャッシュを含むロード・オンデマンド環境の構成

例5-9には、パーティション・キャッシュを含む、ロード・オンデマンド環境の構成を行うXMLを示します。

<?xml version="1.0" encoding="UTF-8" ?>
<LODConfigs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns ="http://xmlns.oracle.com/spatial/network"
            version = "12.1">      
<!--The new xml configuration schema takes the version number. If the version attribute is missing, then we assume it is 11.2 or lower. -->
<!-- default configuration for networks not configured -->
  <LODConfig globalNetworkName="$DEFAULT$" networkName="$DEFAULT$">
    <networkIO>
      <geometryTolerance>0.000001</geometryTolerance>
      <readPartitionFromBlob>false</readPartitionFromBlob>
      <partitionBlobTranslator>
        <className>oracle.spatial.network.lod.PartitionBlobTranslator11gR2</className>
        <parameters></parameters>
      </partitionBlobTranslator>
      <userDataIO categoryId="0">
        <className>oracle.spatial.network.lod.LODUserDataIOSDO</className>
        <parameters></parameters>
      </userDataIO>
      <cachingPolicy linkLevel="1">
        <maxNodes>500000</maxNodes>
        <residentPartitions></residentPartitions>
        <flushRule>
          <className>oracle.spatial.network.lod.LRUCachingHandler</className>
          <parameters></parameters>
        </flushRule>
      </cachingPolicy>
    </networkIO>
    <networkAnalysis>
      <linkLevelSelector>
        <className>oracle.spatial.network.lod.DummyLinkLevelSelector</className>
        <parameters></parameters>
      </linkLevelSelector>
      <withinCostPolygonTolerance>0.05</withinCostPolygonTolerance>
    </networkAnalysis>
  </LODConfig>
  <LODConfig globalNetworkName="SAMPLE_NETWORK" networkName="SAMPLE_NETWORK">
    <networkIO>
      <geometryTolerance>0.000001</geometryTolerance>
      <readPartitionFromBlob>true</readPartitionFromBlob>
      <partitionBlobTranslator>
        <className>oracle.spatial.router.ndm.RouterPartitionBlobTranslator11gR2</className>
        <parameters></parameters>
      </partitionBlobTranslator>
      <userDataIO categoryId="0">
        <className>oracle.spatial.network.lod.LODUserDataIOSDO</className>
        <parameters></parameters>
      </userDataIO>
      <userDataIO categoryId="1">
        <className>oracle.spatial.router.ndm.RouterUserDataIO</className>
        <parameters></parameters>
      </userDataIO>
      <cachingPolicy linkLevel="1">
        <maxNodes>200000</maxNodes>
        <residentPartitions></residentPartitions>
        <flushRule>
          <className>oracle.spatial.network.lod.LRUCachingHandler</className>
          <parameters></parameters>
        </flushRule>
      </cachingPolicy>
      <cachingPolicy linkLevel="2">
        <maxNodes>800000</maxNodes>
        <residentPartitions>0</residentPartitions>
        <flushRule>
          <className>oracle.spatial.network.lod.LRUCachingHandler</className>
          <parameters></parameters>
        </flushRule>
      </cachingPolicy>
    </networkIO>
    <networkAnalysis>
    </networkAnalysis>
  </LODConfig>
</LODConfigs>

例5-10 ロード・オンデマンド構成のリロード(Java API)

例5-10および例5-11には、それぞれロード・オンデマンド構成のリロードに使用するJava APIおよびPL/SQL APIを示します。

InputStream config = ClassLoader.getSystemResourceAsStream(
                     "netlodcfg.xml");
LODNetworkManager.getConfigManager().loadConfig(config);

例5-11 ロード・オンデマンド構成のリロード(PL/SQL API)

EXECUTE SDO_NET.LOAD_CONFIG('WORK_DIR', 'netlodcfg.xml');

例5-12 推定パーティション・サイズの取得

例5-12では、指定したネットワーク・パーティションの推定サイズ(バイト単位)を戻します。

SELECT SDO_NET.GET_PARTITION_SIZE (
  NETWORK->'NYC_NET',
  PARTITION_ID->1,
  LINK_LEVEL ->1,
  INCLUDE_USER_DATA->'FALSE',
  INCLUDE_SPATIAL_DATA->'TRUE') FROM DUAL;

例5-13 ネットワーク分析: 最短パス(LOD Java API)

例5-13では、ロード・オンデマンドのJava API (oracle.spatial.network.lod)を使用して、ネットワーク上の最短パスの問合せを発行します。

Connection conn = LODNetworkManager.getConnection(dbUrl, dbUser, dbPassword);
// get LOD network IO Adapter
String networkName = "NYC_NET";
NetworkIO reader = LODNetworkManager.getCachedNetworkIO(conn, networkName, networkName, null);
// get analysis module
NetworkAnalyst analyst = LODNetworkManager.getNetworkAnalyst(reader);
// compute the shortest path
LogicalSubPath path = analyst.shortestPathDijkstra(new PointOnNet(startNodeId),
      new PointOnNet(endNodeId), null);
// print path result
PrintUtility.print(System.out, path, false, 0, 0);
. . .

例5-14 ネットワーク分析: 最短パス(XML API)

例5-14では、XML API (oracle.spatial.network.xml)を使用して、ネットワーク上の最短パスの問合せを発行します。これには、要求と応答が含まれます。

<?xml version="1.0" encoding="UTF-8"?>
<ndm:networkAnalysisRequest
    xmlns:ndm="http://xmlns.oracle.com/spatial/network"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:gml="http://www.opengis.net/gml">
  <ndm:networkName>NYC_NET</ndm:networkName>
  <ndm:shortestPath>
    <ndm:startPoint>
      <ndm:nodeID>65</ndm:nodeID>
    </ndm:startPoint>
    <ndm:endPoint>
      <ndm:nodeID>115</ndm:nodeID>
    </ndm:endPoint>
    <ndm:subPathRequestParameter>
      <ndm:isFullPath> true </ndm:isFullPath>
      <ndm:startLinkIndex> true </ndm:startLinkIndex>
      <ndm:startPercentage> true </ndm:startPercentage>
      <ndm:endLinkIndex> true </ndm:endLinkIndex>
      <ndm:endPercentage> true </ndm:endPercentage>
      <ndm:geometry>false</ndm:geometry>
    <ndm:pathRequestParameter>
      <ndm:cost> true </ndm:cost>
      <ndm:isSimple> true </ndm:isSimple>
      <ndm:startNodeID>true</ndm:startNodeID>
      <ndm:endNodeID>true</ndm:endNodeID>
      <ndm:noOfLinks>true</ndm:noOfLinks>
      <ndm:linksRequestParameter>
        <ndm:onlyLinkID>true</ndm:onlyLinkID>
      </ndm:linksRequestParameter>
      <ndm:nodesRequestParameter>
        <ndm:onlyNodeID>true</ndm:onlyNodeID>
      </ndm:nodesRequestParameter>
      <ndm:geometry>true</ndm:geometry>
    </ndm:pathRequestParameter>
    </ndm:subPathRequestParameter>
  </ndm:shortestPath>
</ndm:networkAnalysisRequest>
 
<?xml version = '1.0' encoding = 'UTF-8'?>
<ndm:networkAnalysisResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ndm="http://xmlns.oracle.com/spatial/network" xmlns:gml="http://www.opengis.net/gml">
  <ndm:networkName>NYC_NET</ndm:networkName>
  <ndm:shortestPath>
    <ndm:subPathResponse>
      <ndm:isFullPath>true</ndm:isFullPath>
      <ndm:startLinkIndex>0</ndm:startLinkIndex>
      <ndm:startPercentage>0.0</ndm:startPercentage>
      <ndm:endLinkIndex>17</ndm:endLinkIndex>
      <ndm:endPercentage>1.0</ndm:endPercentage>
      <ndm:pathResponse>
        <ndm:cost>6173.212694405703</ndm:cost>
        <ndm:isSimple>true</ndm:isSimple>
        <ndm:startNodeID>65</ndm:startNodeID>
        <ndm:endNodeID>115</ndm:endNodeID>
        <ndm:noOfLinks>18</ndm:noOfLinks>
        <ndm:linkIDs>145477046 145477044 145477042 145477039 145476926 145476930 145480892 145480891 145476873 145476871 145477023 145489019 145489020 145476851 145488986 145488987 145476913 145476905         
        </ndm:linkIDs>
        <ndm:nodeIDs>65 64 60 57 58 61 71 70 73 87 97 95 91 101 102 104 117 120 115 
        </ndm:nodeIDs>
        <ndm:geometry>
          <gml:LineString>
            <gml:coordinates>-71.707462,43.555262 -71.707521,43.555601…
            </gml:coordinates>
          </gml:LineString>
        </ndm:geometry>
      </ndm:pathResponse>
    </ndm:subPathResponse>
  </ndm:shortestPath>
</ndm:networkAnalysisResponse>

5.15.6 ユーザー定義データの例(PL/SQLおよびJava)

この項では、ネットワークのユーザー定義データの使用例を示します(ユーザー定義データとは、ユーザーがネットワーク表現と関連付ける(接続性とは関係のない)情報です)。USER_SDO_NETWORK_USER_DATAメタデータ・ビューとALL_SDO_NETWORK_USER_DATAメタデータ・ビュー(「xxx_SDO_NETWORK_USER_DATAビュー」を参照)のどちらにも、ユーザー定義データに関する情報が含まれます。

ユーザー定義データを使用するには、適切なxxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)のUSER_DEFINED_DATA列値をYに設定する必要があります。

例5-15 ユーザー定義データのネットワーク・メタデータへの挿入

例5-15では、PL/SQL APIを使用して、リンク関連のユーザー定義データをネットワーク・メタデータに挿入します。

-- Insert link user data named 'interaction' of
-- type varchar2 (50) in network 'bi_test'.
--'interaction' is a column of type varchar2(50) in the link table of network 'bi_
test'.
insert into user_sdo_network_user_data 
         (network,table_type, data_name, data_type, data_length, category_id) 
          values ('bi_test', 'LINK', 'interaction', 'VARCHAR2', 50, 0) ;
-- insert link user data named 'PROB' of type Number.
--'PROB' is a column of type NUMBER in the link table of network 'bi_test'.
insert into user_sdo_network_user_data 
         (network,table_type,data_name,data_type, category_id)
          values ('bi_test','LINK','PROB','NUMBER', 0) ;

ネットワークまたはネットワーク・パーティションがロードされた後に、ユーザー定義データをJava表現で使用できます。ユーザー定義データにアクセスするには、NodeLinkPathおよびSubPathインタフェースのgetCategorizedUserDataメソッドおよびsetCategorizedUserDataメソッドを使用します。次に例を示します。

// The user data index is the sequence number of a user data within a category
// sorted by data name.
 
int interactionUserDataIndex = 0;
int probUserDataIndex = 1;
 
String interaction = (String)link.getCategorizedUserData().getUserData(0).
                     get(interactionUseDataIndex);
 
double prob = ((Double)link.getCategorizedUserData().getUserData(0).
              get(probUserdataIndex)).doubleValue();

例5-16 LODUserDataIOインタフェースのwriteUserDataメソッドの実装

例5-16では、LODUserDataIOインタフェースのカスタム・ユーザー・データI/O実装(デフォルト以外の実装)のJava APIを使用します。リンクに関連付けられたユーザー・データがBLOB (各パーティションごとに1つのBLOB)に書き込まれ、分析中にBLOBからから読み込まれます。この例では、次を前提としています。

  • 各パーティションのマルチモーダル・データに対するユーザー定義データのBLOBには、パーティションIDとパーティションに関連付けられたリンクの数が含まれ、その後に各リンクの<Link ID, link route ID>が含まれます。

  • ユーザー定義データのBLOB表の名前は、MULTIMODAL_USER_DATAです。

 //Method getLinksInPartition(partitionId) computes a vector that
 // consists of  the ID and the route ID of each link associated with a partition
 // with ID = partitionId
 LinkVector = getLinksInPartition(partitionId);
 
 ObjectOutputStream dout = null;
 
 //Insert an empty blob for the partition with ID = partition_id
 String insertStr = "INSERT INTO " + MULTIMODAL_USER_DATA +
                              " (partition_id, blob) " + " VALUES " + " (?, EMPTY_BLOB())" ;
 
 PreparedStatement stmt = conn.prepareStatement(insertStr);
 stmt.setInt(1,partitionId);
 int n = stmt.executeUpdate();
 stmt.close();
 
 //lock the row for blob update
  String lockRowStr = "SELECT blob FROM " + MULTIMODAL_USER_DATA +
                                   " WHERE partition_id = ? " + " FOR UPDATE";
  stmt = conn.prepareStatement(lockRowStr);
  stmt.setInt(1,partitionId);
  ResultSet rs = stmt.executeQuery();
 
  rs.next();
 oracle.sql.BLOB userDataBlob = (oracle.sql.BLOB) rs.getBlob(1);
 stmt.close();
 
  OutputStream blobOut = ((oracle.sql.BLOB) userDataBlob).setBinaryStream(1);
  dout = new ObjectOutputStream(blobOut);
 
  //write partition ID
  dout.writeInt(partitionId);
  int numLinks = linkVector.size()
 
   for (int i=0; i<linkVector.size(); i++) {
         //MultimodalLink is a class with variables link ID and route ID
         MultimodalLink link = (MultimodalLink) linkVector.elementAt(i);
          //write link ID 
         dout.writeLong(link.getLinkId());
 
         // write route ID into file
         dout.writeInt(link.getRouteId());
    }
    dout.close();
     blobOut.close();
     rs.close();

例5-17 LODUserDataIOインタフェースのreadUserDataメソッドの実装

例5-17では、ユーザー定義データにアクセスするには、NodeLinkPathおよびSubPathインタフェースのgetCategorizedUserDataメソッドおよびsetCategorizedUserDataメソッド、およびCategorizedUserDataインタフェースのgetUserDataメソッドおよびsetUserDataメソッドを使用します。

//Read the blob for the required partition from the user data blob table
// In this example,
// MULTIMODAL_USER_DATA  is the name of user –defined data blob table
BLOB multimodalBlob = null;
String queryStr = "SELECT blob FROM " + MULTIMODAL_USER_DATA                                
                             " WHERE partition_id = ?";
PreparedStatement stmt = conn.prepareStatement(queryStr);
stmt.setInt(1,partitionId);
ResultSet rs = stmt.executeQuery();
if (rs.next())   {
     multimodalBlob = (oracle.sql.BLOB)rs.getBlob(1);
}
 
// Materialize the blob value as an input stream        
InputStream is = multimodalBlob.getBinaryStream();
 
//Create an ObjectInputStream that reads from the InputStream is
ObjectInputStream ois = new ObjectInputStream(is);
 
//Read the values of partition ID and number of links from the blob
int partitionId = ois.readInt();
int numLinks = ois.readInt();
 
for (int i=0; i<numLinks; i++)  {
 
    //Read link ID and route ID for each link
     long linkId = ois.readLong();
     int routeId = ois.readInt();
 
     //MultimodalLinkUserData is an implementation of NDM LOD UserData interface
     //Implementation is provided at the end of the example 
     linkUserData = new MultimodalLinkUserData(routeId);
 
     //Get the link object corresponding to the link ID
     LogicalNetLink link = partition.getLink(linkId);
 
     //Get the (categorized) user data associated with the link. 
     CategorizedUserData cud = link.getCategorizedUserData();
    
     // If the link does not have categorized user data associated with it,
     // initialize it to linkUserData
     // Else, set the user data for category USER_DATA_MULTIMODAL 
     // to linkUserData 
     if (cud == null) {
            UserData [] userDataArray = {linkUserData};
            cud = new CategorizedUserDataImpl(userDataArray);
             link.setCategorizedUserData(cud);
     }
     else {                   
            cud.setUserData(USER_DATA_MULTIMODAL,linkUserData);
     }
}

次の例では、分析中にユーザー定義データ(リンクに関連付けられたルートID)を読み取る方法を示します。

//info is an instance of LODAnalysisInfo 
LogicalLink currentLink = info.getCurrentLink();
 
//Read the user-defined data (in this case, route ID) 
int linkRouteId   = (Integer)currentLink.getCategorizedUserData().
                           getUserData(USER_DATA_MULTIMODAL).                                      
                           get(INDEX_LINK_ROUTEID);

MultimodalLinkUserDataインタフェースの実装は次のとおりです。

class MultimodalLinkUserData implements UserData
{
    private int routeId;
 
    protected MultimodalLinkUserData(int routeId)
   {
        this.routeId = routeId;
   }
 
  public Object get(int index)
  {
    switch(index)
    {
         case INDEX_LINK_ROUTEID:
              return routeId;
    }
    return null;
  }
 
  public void set(int index, Object userData)
  {
    switch(index)
    {
         case INDEX_LINK_ROUTEID:
            this.routeId = (Integer) userData;
    }
  }
 
  public int getNumberOfUserData()
  {
       return 1;
  }
 
  public Object clone()
{
    return new MultimodalLinkUserData(routeId);
  }
}

5.16 ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース

ネットワーク・データ・モデル・グラフの学習リソースが利用できます。

Oracle Technology Networkのhttp://www.oracle.com/technetwork/database-options/spatialandgraphには、ネットワーク・データ・モデル(NDM)グラフを含む、Oracle Spatial and Graphテクノロジを開始する場合に役立つ貴重なリソースへのリンクが提供されています。ネットワーク・データ・モデル・グラフのリソースには、次のものが含まれます。

  • ネットワーク・データ・モデル・グラフのチュートリアル(http://www.oracle.com/technetwork/indexes/samplecode/spatial-1433316.htmlにあるndm_tutorial.zip)は、ネットワークの設定と構成を行う手順および分析を行う手順の概要を説明します。また、サンプル・コードと、Oracle Mapを使用して分析結果を表示する方法を説明するWebアプリケーションも含まれています。

  • NDMのホワイト・ペーパー(『A Load-On-Demand Approach to Handling Large Networks in the Oracle Spatial and Graph Network Data Model Graph』)では、詳細な説明と例を提供します。

  • NDMエディタ(小中規模のネットワークを対象としたデモとして提供)は、ネットワーク・データ・モデルに格納されるデータを表示、参照およびナビゲートするためのグラフィカル・ツールです。また、このツールを使用してネットワークに対する分析(最短パス、最近隣、最低コスト・スパニング・ツリーなど)や、ノード、リンクおよびパスの追加と削除を実行することもできます。

  • NFE (ネットワーク・フィーチャ編集) Java APIのドキュメントでは、NFE機能の例が示されています。また、電気および水道のネットワーク例や、NFE表の説明とともにNFEデータ・ディクショナリも掲載されています。

    NFEを使用した開発を開始する前に、Javaの例を詳しく調べることをお薦めします。

  • NFEエディタは、NFEモデルを作成して管理するためのサンプル・アプリケーションです。モデルは、最初からモードまたは既存のネットワーク・モデルの上にモードで作成できます。フィーチャ・レイヤー、フィーチャ・クラスおよびフィーチャの作成と管理ができます。さらに、ビデオ・プレゼンテーションでは、NFEエディタを使用したNFEモデルの作成方法および管理方法を紹介しています。

5.17 Spatial and Graphおよび関連する機能のREADMEファイル

README.txtファイルは、『Oracle Spatial and Graph開発者ガイド』『Oracle Spatial and Graph GeoRaster開発者ガイド』および『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』(このマニュアル)の情報を補足するファイルです。

このファイルは次の場所にあります。

$ORACLE_HOME/md/doc/README.txt