5 ネットワーク・データ・モデル・グラフの概要
この章では、グラフ内のノードおよびリンク(頂点およびエッジ)としてモデル化される機能またはオブジェクトを表すネットワーク・データ・モデルに関連する概念および操作について説明します。
このモデルは、Oracle Spatial and Graphネットワーク・データ・モデル・グラフ機能(または単にネットワーク・データ・モデル・グラフ)と呼ばれます。この章では、ユーザーが『Oracle Spatial and Graph開発者ガイド』に記載されているOracle Spatial and Graphの主な概念、データ型および操作を理解していると想定しています。
この章では、Oracle Spatial and Graphに関連するいくつかのネットワーク関連の用語について説明しますが、ユーザーがネットワーク・データ・モデリングの基本的な概念を十分に理解していると想定しています。
トピック:
- ネットワーク・モデリングの概要
多くのアプリケーションで、機能またはオブジェクトは、ネットワーク内のノードおよびリンクとしてモデル化されます。ネットワーク・モデルには、ノード間およびリンク間の接続性の関係、リンクの方向、ノードおよびリンクのコストなどの論理情報が含まれます。 - ネットワーク・データ・モデル・グラフを使用するための主な手順
このトピックでは、Oracle Spatial and Graphでネットワーク・データ・モデル・グラフ機能を使用するための主な手順の概要を示します。 - ネットワーク・データ・モデル・グラフの概念
ネットワークは、接続性を使用してオブジェクト間の関係を表す数学的なグラフです。 - ネットワーク・アプリケーション
ネットワークは、アプリケーションで、様々なオブジェクトがどのように相互に接続されているかを確認するために使用されます。 - ネットワーク階層
一部のネットワーク・アプリケーションでは、異なる抽象化レベルでの表現が必要です。たとえば、2つの主なプロセスがリンクで接続された最も高い抽象化レベルのノードとして表され、それぞれの主なプロセスがノードおよびリンクで表現された1段階低いレベルの複数の下位プロセスを持つ場合があります。 - ネットワーク・ユーザー・データ
xxx_SDO_NETWORK_USER_DATAビューを介して定義されたユーザー・データについては、ネットワーク分析中にユーザー・データにアクセスする場合、デフォルトのユーザー・データI/O実装(LODUserDataIOSDO
)が使用されます。ただし、一部のユーザー・データは、ノード表またはリンク表に含まれていないため、xxx_SDO_NETWORK_USER_DATAビューを介して登録できません。 - フィーチャ・モデリング
ネットワーク上の対象オブジェクトをフィーチャとしてモデル化できます。 - ネットワーク・フィーチャ編集(NFE)を使用したフィーチャ・モデリング
ネットワーク・フィーチャ編集(NFE)を使用すると、NFEモデルを作成および管理できます。NFEモデルにより、フィーチャ・モデリング機能が拡張され、Java SwingコンポーネントおよびPL/SQL APIを使用してフィーチャをビジュアル化し、操作できるようになります。 - ネットワーク制約
ネットワーク制約は、ネットワーク分析の計算に対して定義される制限事項です。 - ロード・オンデマンドを使用したネットワーク分析
ロード・オンデマンドとは、ネットワーク分析時に、調査がネットワーク・パーティションに到達するまでは、そのパーティションがメモリーにロードされないことです。 - ネットワーク・データ・モデル・グラフ表
空間ネットワークの接続性情報は、ノード表およびリンク表という2つの表に格納されます。さらに、パス情報を、パス表およびパスリンク表に格納できます。 - ネットワーク・データ・モデル・グラフおよびネットワーク・フィーチャ編集(NFE)モデルのメタデータ・ビュー
スキーマ(ユーザー)ごとに、xxx_SDO_NETWORK_xxxxxxおよびxxx_SDO_NFE_MODEL_xxxxxxという2セットのネットワーク・メタデータ・ビューを作成できます(先頭のxxxはUSERまたはALLです)。これらのビューは、必要に応じて、Spatial and Graphによって作成されます - ネットワーク・データ・モデル・グラフのApplication Program Interface
Oracle Spatial and Graphのネットワーク・データ・モデル・グラフ機能には、2つのクライアントApplication Program Interface (API)として、SDO_NETパッケージによって提供されるPL/SQLインタフェースと、Javaインタフェースが含まれます。 - 複数のスキーマが関係している場合のネットワーク・アクセス
ネットワーク所有者以外のデータベース・ユーザーがメモリーにネットワークを読み込む場合は、次のいずれかを実行する必要があります。 - ネットワークの例
このトピックでは、複数のネットワーク・データ・モデル・グラフの例を示します。 - ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース
ネットワーク・データ・モデル・グラフの学習リソースを利用できます。 - Spatial and Graphおよび関連する機能のREADMEファイル
README.txt
ファイルは、次のマニュアルの情報を補足するファイルです。
5.1 ネットワーク・モデリングの概要
多くのアプリケーションで、機能またはオブジェクトは、ネットワークのノードおよびリンクとしてモデル化されます。ネットワーク・モデルには、ノード間およびリンク間の接続性の関係、リンクの方向、ノードおよびリンクのコストなどの論理情報が含まれます。
論理ネットワーク情報を使用して、ネットワークを分析し、質問(多くはパスの計算および追跡に関連する質問)に対する回答を得ることができます。たとえば、生化学パスウェイの場合、2つの化合物間で可能なすべての反応パスウェイを検出できます。または、道路ネットワークの場合、次の情報を検出できます。
-
2つの都市間の最短(距離)パスまたは最速(移動時間)パス
-
特定の空港に最も近いホテルおよびそのホテルへのアクセス方法
論理ネットワーク情報の他に、ノードの位置やリンクのジオメトリなどの空間情報をネットワークに関連付けることができます。この情報を使用すると、論理情報をモデル化できます(たとえば、ルートの物理的な長さを空間表現から直接計算できるため、このルートのコストなどの論理情報をモデル化できます)。
Spatial and Graphネットワーク・データ・モデル・グラフ機能は、大規模で複雑なネットワークに対して使用できます。たとえば、図5-1は、ネットワーク分析用のデモのWebベース・アプリケーションに表示された、ネットワーク・データ・モデル・グラフ機能を使用して定義したサンフランシスコ市とリンクを示しています。(このデモは、「ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース」で説明するNDMのチュートリアルを使用してインストールできます。)
一般的なデータ・モデルおよびネットワーク分析機能を使用すると、従来の地理情報システム(GIS)の他に、多くの種類のネットワーク・アプリケーションをモデル化および分析できます。たとえば、生化学の分野では、アプリケーションで、生物の反応パスウェイ・ネットワークをモデル化する必要がある場合があります。製薬産業では、新薬発見プロセスをモデル化するアプリケーションで、蛋白質間の相互作用をモデル化する必要がある場合があります。
Spatial and Graphのネットワーク・モデリング機能には、スキーマ・オブジェクトおよびApplication Program Interface (API)が含まれます。スキーマ・オブジェクトには、メタデータおよびネットワーク表が含まれます。APIには、データベースでネットワークを作成および管理するためのサーバー側PL/SQL API (SDO_NETパッケージ)、およびネットワークの編集と分析のための中間層(クライアント側) Java APIが含まれます。
5.2 ネットワーク・データ・モデル・グラフを使用するための主な手順
また、重要な概念、構造および操作を示します(詳細は他の項を参照してください)。
ネットワークを作成するには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.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つ前のノードからの距離の割合として定義されます。
サブパスは、次のパラメータを使用して、既存のパス(参照パス)を参照します。
-
参照パス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.5 ネットワーク階層
一部のネットワーク・アプリケーションでは、異なる抽象化レベルでの表現が必要です。たとえば、2つの主なプロセスがリンクで接続された最も高い抽象化レベルのノードとして表され、それぞれの主なプロセスがノードおよびリンクで表現された1段階低いレベルの複数の下位プロセスを持つ場合があります。
ネットワーク階層を使用すると、各ノードに階層レベルを割り当てることによって、ネットワークを複数の抽象化レベルで表現できます。(リンクには階層レベルは割り当てられません。リンクは、同じ階層レベルまたは異なる階層レベルのノード間に設定できます。)階層内で最も低い(最も詳細な)レベルはレベル1で、これより高いレベルは順にレベル2、レベル3のように番号が付けられます。
ネットワーク階層で隣接するレベルのノードには、親子関係があります。上位レベルの各ノードは、下位レベルの1つ以上のノードに対する親ノードになります。下位レベルの各ノードは、上位レベルの1つのノードの子ノードになります。同じ親ノードを持つノードは、兄弟ノードになります。
リンクにも、親子関係がある場合があります。ただし、リンクには階層レベルが割り当てられないため、リンクの親子関係とネットワーク階層レベルには関連性がない場合もあります。同じ親リンクを持つリンクは、兄弟リンクになります。
図5-3に、2つのレベルが存在する単純な階層ネットワークを示します。
次に、図5-3について説明します。
-
上位レベル(レベル2)には、2つのノードが含まれます。各ノードは、下位レベルの複数のノードに対する親ノードです。上位レベルのノード間のリンクは、下位レベルのノード間の2つのリンクに対する親リンクです。
-
下位レベル(レベル1)は、上位レベルの各ノードを構成するノードを示します。また、上位レベルの各親ノードの子ノードであるノード間のリンク、および異なる親ノードを持つノード間のリンクを示します。
-
異なる親ノードを持つ下位レベルのノード間のリンクは、太い接続線で示されています。これらのリンクは、階層の上位レベルのノード間の単一のリンクの子リンクです。(ただし、下位レベルでのこれらの2つのリンクを、上位レベルのノード間の親リンクの子リンクとして定義しない場合もあります。)
-
それぞれの親ノードと親リンク、およびその子ノードと子リンクとの間の親子関係は、両端に矢印がある破線で示されています。
図5-3には示しませんが、異なる階層レベル間にリンクを設定できます。たとえば、上位レベルのノードと下位レベルの任意のノードとの間にリンクを定義できます。この場合、リンク間には親子関係がありません。
ネットワーク内の特定のノード・グループについて、親ネットワークを定義できます。子ネットワーク内のグループIDは、親ネットワーク内のノードIDとして使用されます。子ネットワーク内のグループ間の集約リンクは、親ネットワーク内のリンクを表し、任意のリンクIDが割り当てられます。
ネットワークでは、ノードをグループ化する方法を様々な基準に応じて複数使用することができるため、複数の親ネットワークを持つことができます。また、親ネットワーク内のノードをさらにグループ化して、上位レベルの親ネットワークを形成することもできます。たとえば、ソーシャル・ネットワークでは、メンバーを市、職業、所得などの基準でグループ化できます。たとえば、市でグループ化されたメンバーを、上位レベルの郡、州または国のネットワークにさらにグループ化できます。
ネットワークの親子関係は、ネットワーク・メタデータのCHILD_NETWORK列およびHIERARCHY_TABLE_NAME列を使用して定義されます。
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メソッドの実装
ユーザー定義データにアクセスするには、Node
、Link
、Path
および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つまたは複数のフィーチャ要素で構成されます。フィーチャ要素は、ネットワークに沿った点、リンクまたは部分リンクです。フィーチャ・レイヤーはネットワークの上に定義できます。たとえば、レストランとホテルをそれぞれ道路ネットワーク上のフィーチャ・レイヤーとして定義したり、スイッチを電気ネットワーク上のフィーチャ・レイヤーとして定義できます。
フィーチャ・モデリングを使用する一般的な手順は次のとおりです。
-
フィーチャ・レイヤーを作成します。
たとえば、道路ネットワーク上の対象点(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
-
フィーチャ・ユーザー・データを登録します(アプリケーション固有のフィーチャ属性がフィーチャ分析で役立つ可能性がある場合)。
フィーチャ・ユーザー・データを登録するには、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
-
フィーチャ・レイヤーのフィーチャの追加、更新または削除を行います。
フィーチャ表、フィーチャ要素関係表およびフィーチャ階層表(すべて「フィーチャ・レイヤー表」を参照)またはこれらの表の組合せの内容は、データ・プロバイダにより管理されますので、この手順は省略できます。省略しない場合は、SDO_NETパッケージに含まれるプロシージャ(ADD_FEATURE、UPDATE_FEATURE、DELETE_FEATURESなど)をコールして、フィーチャ・レイヤー内のフィーチャの追加、更新または削除を行います。(SDO_NETサブプログラムについては、「SDO_NETパッケージ・サブプログラム」を参照してください。)
-
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 TABLE
、CREATE VIEW
、CREATE 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つを使用してネットワークを作成します。
-
SDO_NET.SPATIAL_PARTITIONプロシージャを使用してネットワークをパーティション化します(「ネットワークのパーティション化」を参照)。
-
オプションで、パーティションBLOBを生成します(「パーティションBLOBの生成」を参照)。
-
パーティション・キャッシュを含むロード・オンデマンド環境を構成します(「パーティション・キャッシュの構成」を参照)。
-
ネットワークを分析します(「ネットワークの分析」を参照)。
注意:
また、ロード・オンデマンド分析は、ネットワーク全体を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_TABLE、SDO_NET.CREATE_LINK_TABLE、SDO_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) |
ノードのタイプを識別するユーザー定義の文字列です。 |
VARCHAR2(1) |
ノードがアクティブである(ネットワークで認識されている)場合は |
|
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プロシージャのコール時に |
<node_cost_column> |
NUMBER |
ノードに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。実際の列名は、デフォルト名、またはSDO_NET.CREATE_NODE_TABLEプロシージャのコール時に |
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) |
リンクのタイプを識別するユーザー定義の文字列です。 |
VARCHAR2(1) |
リンクがアクティブである(ネットワークで認識されている)場合は |
|
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プロシージャのコール時に |
<link_cost_column> |
NUMBER |
リンクに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。実際の列名は、デフォルト名、またはSDO_NET.CREATE_LINK_TABLEプロシージャのコール時に |
PARENT_LINK_ID |
NUMBER |
階層ネットワークでのみ使用されます。このリンクの親リンクのリンクIDです。(ネットワーク階層の親子関係については、「ネットワーク階層」を参照してください。) |
BIDIRECTED |
VARCHAR2(1) |
有向ネットワークの場合のみ使用されます。リンクが無向(開始ノードから終了ノード、終了ノードから開始ノードのどちらの方向にも進むことが可能)の場合は |
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) |
単純なパスの場合は |
<path_geometry_column> |
SDO_GEOMETRY |
論理ネットワークを除くすべてのネットワーク・タイプの場合、パスに関連付けられたジオメトリ・オブジェクトです。実際の列名は、デフォルト名、またはSDO_NET.CREATE_PATH_TABLEプロシージャのコール時に 論理ネットワークの場合、この列は使用しません。 |
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プロシージャのコール時に 論理ネットワークの場合、この列は使用しません。 |
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にユーザー・データを含めることができる場合は |
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モデルが作成されると、これらの表は自動的に作成または更新されます。しかし、表またはビューを手動で作成し、それらを目的のモデルに登録することもできます。
トピック:
- 自動作成される点のデフォルト属性表
自動作成される点のデフォルト属性表には、線-線接続性ルールを実行した結果として自動作成される点の属性のデフォルト値に関する情報が含まれます。 - 線-線接続性ルール表
線-線接続性ルール表には、NFEモデルに含まれるフィーチャに適用可能な線-線接続性ルールの定義に関する情報が含まれます。 - 線-点接続性ルール表
線-点接続性ルール表には、NFEモデルに含まれるフィーチャに適用可能な線-点接続性ルールの定義に関する情報が含まれます。 - フィーチャ・クラス表
フィーチャ・クラスは、フィーチャに関連します。フィーチャ・クラス表には、フィーチャ・レイヤーのすべてのフィーチャ・クラスのレコードが含まれます。また、次の表で説明する列が含まれる必要があります。 - フィーチャ・クラス属性の制約表
フィーチャ・クラス属性の制約表には、フィーチャ・クラスが属するフィーチャ・レイヤーに定義されているのと同じ属性であるフィーチャ・クラス属性についてのユーザー制限に関する情報が含まれます。 - フィーチャ・クラス事前定義済のデフォルトで接続される点表
フィーチャ・クラス事前定義済のデフォルトで接続される点表には、フィーチャ・クラスで記述された線フィーチャに沿ってデフォルトで接続される点フィーチャなどに関する情報が含まれます。 - フィーチャ・クラス関係表
フィーチャ・クラス関係表には、フィーチャとフィーチャ・クラスとの間の関係(どのフィーチャがどのフィーチャ・クラスに属するか)に関する情報が含まれます。 - フィーチャ・ルール関係表
フィーチャ・ルール関係表には、ルールに含まれる各フィーチャ要素に関連する情報が、その生成または接続の起因となるルールとともに含まれます。 - フィーチャ・ユーザー・データ表
フィーチャ・ユーザー・データ表には、カタログ・タイプのフィーチャ・クラス属性の情報が含まれます。 - フィーチャ・ユーザー・データ・カタログ表
カタログからフィーチャ・クラス属性に値を割り当てることができます。つまり、フィーチャ・クラスの属性の型にカタログの型を指定できます。フィーチャ・ユーザー・データ・カタログ表では、そのために使用できるカタログの登録簿を保持します。 - フィーチャ・ユーザー・データ・カタログ値表
フィーチャ・ユーザー・データ・カタログ値表には、フィーチャ・ユーザー・データ・カタログ表で定義されたカタログで保持される値のリストが含まれます。 - 点カーディナリティ・ルール表
点カーディナリティ・ルール表には、特定の点フィーチャがNFEモデルでサポートする必要があるインバウンド接続およびアウトバウンド接続の最大数と最小数の構成が含まれます。 - ルール・デシジョン・ハンドラ表
ルール・デシジョン・ハンドラ表には、接続性ルール(線-線または線-点)の実行時にデシジョン・ハンドラとして実行されるJavaクラスまたはPL/SQLプロシージャ(あるいはその両方)の名前に関する情報が含まれます。 - ルール・インスタンス表
ルール・インスタンス表には、線-線または線-点のいずれかの接続性ルールが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) |
フィーチャの線の属性についてルールで評価される条件。例: |
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) |
|
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) |
|
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) |
ネットワークのノードおよびリンクが空間ジオメトリに関連付けられている場合は |
GEOMETRY_TYPE |
VARCHAR2(24) |
|
NETWORK_TYPE |
VARCHAR2(24) |
ネットワークのタイプを識別するユーザー定義の文字列です。 |
NO_OF_HIERARCHY_LEVELS |
NUMBER |
ネットワーク階層のレベルの数です。階層がない場合は1が含まれます。(ネットワーク階層については、「ネットワーク階層」を参照してください。) |
NO_OF_PARTITIONS |
NUMBER |
(現在は使用されていません) |
LRS_TABLE_NAME |
VARCHAR2(32) |
|
LRS_GEOM_COLUMN |
VARCHAR2(32) |
|
NODE_TABLE_NAME |
VARCHAR2(32) |
|
NODE_GEOM_COLUMN |
VARCHAR2(32) |
|
VARCHAR2(1024) |
|
|
NODE_PARTITION_COLUMN |
VARCHAR2(32) |
(現在は使用されていません)。 |
VARCHAR2(32) |
|
|
LINK_TABLE_NAME |
VARCHAR2(32) |
|
LINK_GEOM_COLUMN |
VARCHAR2(32) |
|
LINK_DIRECTION |
VARCHAR2(12) |
ネットワークのすべてのリンクのタイプを示す値です。 |
VARCHAR2(1024) |
|
|
LINK_PARTITION_COLUMN |
VARCHAR2(32) |
(現在は使用されていません) |
VARCHAR2(32) |
|
|
PATH_TABLE_NAME |
VARCHAR2(32) |
パスに関する情報が含まれるオプションの表の名前です。(パス表については、「パス表」を参照してください。) |
PATH_GEOM_COLUMN |
VARCHAR2(32) |
|
PATH_LINK_TABLE_NAME |
VARCHAR2(32) |
各パスのリンクに関する情報が含まれるオプションの表の名前です。(パスリンク表については、「パスリンク表」を参照してください。) |
SUBPATH_TABLE_NAME |
VARCHAR2(32) |
サブパスに関する情報が含まれるオプションの表の名前です。(サブパス表については、「サブパス表」を参照してください。) |
SUBPATH_GEOM_COLUMN |
VARCHAR2(32) |
|
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プロシージャで |
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) |
ユーザー定義データを含む表のタイプ: xxx_SDO_USER_NETWORK_USER_DATAビューを介してフィーチャ・ユーザー・データが登録されている場合です。TABLE_TYPEはフィーチャ表の名前に設定されます。 |
DATA_NAME |
VARCHAR2(32) |
ユーザー定義データを含む列の名前です。 |
DATA_TYPE |
VARCHAR2(12) |
ユーザー定義データのデータ型: |
DATA_LENGTH |
NUMBER(38) |
DATA_TYPEが |
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) |
フィーチャ・レイヤーが分析操作から生成されたパスかどうかを示します。 |
5.12.6 xxx_SDO_NFE_MODEL_METADATAビュー
次のビューには、NFEモデルに関する情報が含まれます。(このトピックでは、「ネットワーク・フィーチャ編集(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 |
新しいネットワークを使用し、基礎となるネットワーク要素とともフィーチャを作成するモデルの場合の |
VERSIONABLE_IND |
VARCHAR2(1) |
モデルで別のバージョンまたはブランチが許可されるかどうかを示します。 |
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を使用する場合、デフォルトでは、この名前は |
表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 (最小境界矩形)領域であるかどうかを示します。 |
LOWER_X |
NUMBER |
MBR_INDが |
UPPER_X |
NUMBER |
MBR_INDが |
LOWER_Y |
NUMBER |
MBR_INDが |
UPPER_Y |
NUMBER |
MBR_INDが |
LOCK_IND |
VARCHAR2(1) |
作業領域が他のユーザーによる編集に対してロックされる(他のユーザーは編集できない)かどうかを示します。 |
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 複数のスキーマが関係している場合のネットワーク・アクセス
ネットワーク所有者以外のデータベース・ユーザーがメモリーにネットワークを読み込む場合は、次のいずれかを実行する必要があります。
-
所有者以外のユーザーごとに、USER_SDO_NETWORK_METADATAビューのネットワーク表をネットワーク所有者のスキーマで修飾します(「複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス」を参照)。
-
所有者以外のユーザーごとに、ネットワーク・データ・モデル・グラフ表に対するビューを作成し、USER_SDO_NETWORK_METADATAビューを更新します(「複数のスキーマが関係している場合のビューを使用したアクセス」を参照)。
2つ目の方法では、ビューの作成という追加の手順が必要ですが、このビューによって、ネットワークにおけるアクセス可能な部分を柔軟に制御できるようになります。各ビューでは、ネットワークのすべての部分にアクセスできるようにすることも、WHERE句を使用してアクセスを一部分のみに制限することもできます(たとえば、WHERE STATE_CODE='NY'
では、ビュー・ユーザーをNew Yorkの行に制限します)。
例として、次のシナリオについて考えてみます。
-
User1がNetwork1を作成します(したがって、所有者になります)。
-
User2がSDO_NET_MEM.NETWORK_MANAGER.READ_NETWORKプロシージャをコールしてNetwork1を読み込もうとしますが、エラーが発生します。このエラーは、User2がNetwork1のネットワーク・データ・モデル・グラフ表に対する適切な権限を所有していても発生します。
この問題に対処するには、「複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス」または「複数のスキーマが関係している場合のビューを使用したアクセス」のいずれかの方法を使用する必要があります。
5.14.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;
-
所有者以外のユーザーとして接続します。たとえば、User2として接続します。
-
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 複数のスキーマが関係している場合のビューを使用したアクセス
(適切な権限のある)所有者以外のユーザーがネットワークまたはネットワークの特定の部分にアクセスできるように、ビューを作成します。ネットワークへのアクセスを許可する所有者以外のユーザーごとに、次の手順を実行します。
-
ユーザーに、必要なネットワーク・データ・モデル・グラフ表への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;
-
所有者以外のユーザーとして接続します。たとえば、User2として接続します。
-
必要な各ネットワーク・データ・モデル・グラフ・ノードに対するビューを作成し、各ビューでは対応する表の列をすべて選択するようにします。表名をネットワーク所有者のスキーマ名で修飾します。たとえば、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'
など)を使用することで、ネットワークの使用可能な部分を制限できます。 -
新しく作成したビューを指定する行を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に示すとおり、ノード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に示すとおり、リンク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について説明します。
-
Route1
は、点2,2から開始し、点5,14で終了します。このルートには、N1
、N2
、N3
、N4
、N5
、N6
およびN7
の各ノードが含まれます。このルートには、R1L1
、R1L2
、R1L3
、R1L4
、R1L5
およびR1L6
の各リンクが含まれます。 -
Route2
は、点8,4から開始し、点8,13で終了します。これには、N3
、N6
およびN8
の各ノードが含まれます。これには、R2L1
およびR2L2
の各リンクが含まれます。 -
Route3
は、点12,10から開始し、点5,14で終了します。これには、N5
、N8
および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について説明します。
-
ネットワークは階層ネットワークで、2つのレベルがあります。上位レベル(レベル2)は、2つのノード(
HN1
とHN2
)で構成されており、残りのノードおよびリンクは、階層の下位レベル(レベル1)に含まれます。 -
レベル1の各ノードは、レベル2のいずれかのノードの子ノードです。ノード
HN1
は、子ノードN1
、N2
、N3
、N4
、N5
およびN6
を持ちます。ノードHN2
は、子ノードN7
、N8
、N9
、N10
、N11
、N12
、N13
および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表現で使用できます。ユーザー定義データにアクセスするには、Node
、Link
、Path
および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では、ユーザー定義データにアクセスするには、Node
、Link
、Path
および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