Oracle® Spatial and Graph

トポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド

12cリリース1 (12.1)

B72471-05(原本部品番号:E53120-04)

2017年3月

Oracle Spatial and Graphのトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフの機能の使用方法およびリファレンス情報を示します。

Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド, 12c リリース1 (12.1)

B72471-05

Copyright © 2003, 2017, Oracle and/or its affiliates.  All rights reserved.

原本著者: Chuck Murray

協力者: Ning An、Betsy George、Huiling Gong、Siva Ravada、Jack Wang

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』のこのリリースでの変更点

- Oracle Database 12cリリース1 (12.1)での変更点

- 新機能

- ネットワーク・データ・モデルでのフィーチャ・モデリング

- マルチモーダル・ネットワークおよび時間モデリングのサポート

- SDO_NET.LOGICAL_POWERLAW_PARTITIONの新しいpart_size_toleranceパラメータ

- インメモリーのJava APIおよびSDO_NET_MEMパッケージのサポート終了

- その他の変更

第I部 トポロジ・データ・モデル

1 トポロジ・データ・モデルの概要

- トポロジ・データを使用するための主な手順

- トポロジ・データから作成したトポロジの使用

- 空間ジオメトリから作成したトポロジの使用

- トポロジ・データ・モデルの概念

- トポロジ・データ・モデルの許容差

- トポロジ・ジオメトリおよびトポロジ・ジオメトリ・レイヤー

- フィーチャ

- コレクション・レイヤー

- トポロジ・ジオメトリ・レイヤー階層

- トポロジ・データ・モデル表

- エッジ情報表

- ノード情報表

- フェイス情報表

- 関係情報表

- 履歴情報表

- トポロジ・データ型

- SDO_TOPO_GEOMETRY型

- SDO_TOPO_GEOMETRYのコンストラクタ

- 挿入操作用のコンストラクタ: 位相要素の指定

- 挿入操作用のコンストラクタ: 下位レベルのフィーチャの指定

- 更新操作用のコンストラクタ: 位相要素の指定

- 更新操作用のコンストラクタ: 下位レベルのフィーチャの指定

- GET_GEOMETRYメンバー・ファンクション

- GET_TGL_OBJECTSメンバー・ファンクション

- GET_TOPO_ELEMENTSメンバー・ファンクション

- SDO_LIST_TYPE型

- SDO_EDGE_ARRAY型およびSDO_NUMBER_ARRAY型

- トポロジのメタデータ・ビュー

- xxx_SDO_TOPO_INFOビュー

- xxx_SDO_TOPO_METADATAビュー

- トポロジのApplication Program Interface

- トポロジ演算子

- トポロジ・データ・モデルのJavaインタフェース

- トポロジ・データのエクスポートおよびインポート

- 複数のスキーマが関係している場合のトポロジの使用方法および編集方法

- 複数のスキーマが関係している場合のトポロジの使用方法

- 複数のスキーマが関係している場合のトポロジの編集方法

- サポートされないファンクション索引

- トポロジの例(PL/SQL)

- トポロジ・データから作成したトポロジ

- 空間ジオメトリから作成したトポロジ

- Spatial and Graphおよび関連する機能のREADMEファイル

2 トポロジの編集

- トポロジ・データを編集する方法

- TopoMapオブジェクト

- トポロジ・パラメータの編集方法の指定

- GET_xxxトポロジ・ファンクションの使用

- キャッシュを明示的に使用した編集処理(PL/SQL API)

- Java APIを使用した編集処理

- トポロジの編集のエラー処理

- 入力パラメータのエラー

- すべての例外

- ノードでの操作の実行

- ノードの追加

- ノードの移動

- 許可および禁止されたノードの移動の他の例

- ノードの削除

- 不要ノードの削除

- エッジでの操作の実行

- エッジの追加

- エッジの移動

- エッジの削除

- エッジの更新

3 SDO_TOPOパッケージ・サブプログラム

- SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER

- SDO_TOPO.CREATE_TOPOLOGY

- SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER

- SDO_TOPO.DROP_TOPOLOGY

- SDO_TOPO.GET_FACE_BOUNDARY

- SDO_TOPO.GET_TOPO_OBJECTS

- SDO_TOPO.INITIALIZE_AFTER_IMPORT

- SDO_TOPO.INITIALIZE_METADATA

- SDO_TOPO.PREPARE_FOR_EXPORT

- SDO_TOPO.RELATE

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

- SDO_TOPO_MAP.ADD_EDGE

- SDO_TOPO_MAP.ADD_ISOLATED_NODE

- SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY

- SDO_TOPO_MAP.ADD_LOOP

- SDO_TOPO_MAP.ADD_NODE

- SDO_TOPO_MAP.ADD_POINT_GEOMETRY

- SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY

- SDO_TOPO_MAP.CHANGE_EDGE_COORDS

- SDO_TOPO_MAP.CLEAR_TOPO_MAP

- SDO_TOPO_MAP.COMMIT_TOPO_MAP

- SDO_TOPO_MAP.CREATE_EDGE_INDEX

- SDO_TOPO_MAP.CREATE_FACE_INDEX

- SDO_TOPO_MAP.CREATE_FEATURE

- SDO_TOPO_MAP.CREATE_TOPO_MAP

- SDO_TOPO_MAP.DROP_TOPO_MAP

- SDO_TOPO_MAP.GET_CONTAINING_FACE

- SDO_TOPO_MAP.GET_EDGE_ADDITIONS

- SDO_TOPO_MAP.GET_EDGE_CHANGES

- SDO_TOPO_MAP.GET_EDGE_COORDS

- SDO_TOPO_MAP.GET_EDGE_DELETIONS

- SDO_TOPO_MAP.GET_EDGE_NODES

- SDO_TOPO_MAP.GET_FACE_ADDITIONS

- SDO_TOPO_MAP.GET_FACE_CHANGES

- SDO_TOPO_MAP.GET_FACE_BOUNDARY

- SDO_TOPO_MAP.GET_FACE_DELETIONS

- SDO_TOPO_MAP.GET_NEAREST_EDGE

- SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE

- SDO_TOPO_MAP.GET_NEAREST_NODE

- SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE

- SDO_TOPO_MAP.GET_NODE_ADDITIONS

- SDO_TOPO_MAP.GET_NODE_CHANGES

- SDO_TOPO_MAP.GET_NODE_COORD

- SDO_TOPO_MAP.GET_NODE_DELETIONS

- SDO_TOPO_MAP.GET_NODE_FACE_STAR

- SDO_TOPO_MAP.GET_NODE_STAR

- SDO_TOPO_MAP.GET_TOPO_NAME

- SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID

- SDO_TOPO_MAP.LIST_TOPO_MAPS

- SDO_TOPO_MAP.LOAD_TOPO_MAP

- SDO_TOPO_MAP.MOVE_EDGE

- SDO_TOPO_MAP.MOVE_ISOLATED_NODE

- SDO_TOPO_MAP.MOVE_NODE

- SDO_TOPO_MAP.REMOVE_EDGE

- SDO_TOPO_MAP.REMOVE_NODE

- SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES

- SDO_TOPO_MAP.ROLLBACK_TOPO_MAP

- SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP

- SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP

- SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE

- SDO_TOPO_MAP.UPDATE_TOPO_MAP

- SDO_TOPO_MAP.VALIDATE_TOPO_MAP

- SDO_TOPO_MAP.VALIDATE_TOPOLOGY

第II部 ネットワーク・データ・モデル

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

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

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

- Spatialによる操作の実行

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

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

- サブパス

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

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

- 道路ネットワークの例

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

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

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

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

- ネットワークの階層

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

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

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

- LODUserDataIOのwriteUserDataメソッドの実装

- LODUserDataIOのreadUserDataメソッドの実装

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

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

- ネットワーク制約

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

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

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

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

- ネットワークの分析

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

- 計算済の分析結果

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

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

- ノード表

- リンク表

- パス表

- パスリンク表

- サブパス表

- パーティション表

- パーティションBLOB表

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

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

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

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

- フィーチャ表

- フィーチャ要素関係表

- フィーチャ階層表

- ネットワーク・データ・モデル・グラフのメタデータ・ビュー

- xxx_SDO_NETWORK_METADATAビュー

- xxx_SDO_NETWORK_CONSTRAINTSビュー

- xxx_SDO_NETWORK_USER_DATAビュー

- xxx_SDO_NETWORK_FEATUREビュー

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

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

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

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

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

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

- ユーザー指定の実装

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

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

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

- ネットワークの例

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

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

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

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

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

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

- ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース

- Spatial and Graphおよび関連する機能のREADMEファイル

6 SDO_NETパッケージ・サブプログラム

- SDO_NET.ADD_CHILD_FEATURE

- SDO_NET.ADD_CHILD_FEATURES

- SDO_NET.ADD_FEATURE

- SDO_NET.ADD_FEATURE_ELEMENT

- SDO_NET.ADD_FEATURE_ELEMENTS

- SDO_NET.ADD_FEATURE_LAYER

- SDO_NET.COMPUTE_PATH_GEOMETRY

- SDO_NET.COPY_NETWORK

- SDO_NET.CREATE_LINK_TABLE

- SDO_NET.CREATE_LOGICAL_NETWORK

- SDO_NET.CREATE_LRS_NETWORK

- SDO_NET.CREATE_LRS_TABLE

- SDO_NET.CREATE_NODE_TABLE

- SDO_NET.CREATE_PARTITION_TABLE

- SDO_NET.CREATE_PATH_LINK_TABLE

- SDO_NET.CREATE_PATH_TABLE

- SDO_NET.CREATE_SDO_NETWORK

- SDO_NET.CREATE_SUBPATH_TABLE

- SDO_NET.CREATE_TOPO_NETWORK

- SDO_NET.DELETE_CHILD_FEATURES

- SDO_NET.DELETE_CHILD_FEATURES_AT

- SDO_NET.DELETE_DANGLING_FEATURES

- SDO_NET.DELETE_DANGLING_LINKS

- SDO_NET.DELETE_DANGLING_NODES

- SDO_NET.DELETE_FEATURE_ELEMENTS

- SDO_NET.DELETE_FEATURE_ELEMENTS_AT

- SDO_NET.DELETE_FEATURES

- SDO_NET.DELETE_LINK

- SDO_NET.DELETE_NODE

- SDO_NET.DELETE_PATH

- SDO_NET.DELETE_PHANTOM_FEATURES

- SDO_NET.DELETE_SUBPATH

- SDO_NET.DEREGISTER_CONSTRAINT

- SDO_NET.DROP_FEATURE_LAYER

- SDO_NET.DROP_NETWORK

- SDO_NET.FIND_CONNECTED_COMPONENTS

- SDO_NET.GENERATE_NODE_LEVELS

- SDO_NET.GENERATE_PARTITION_BLOB

- SDO_NET.GENERATE_PARTITION_BLOBS

- SDO_NET.GET_CHILD_FEATURE_IDS

- SDO_NET.GET_CHILD_LINKS

- SDO_NET.GET_CHILD_NODES

- SDO_NET.GET_DANGLING_FEATURES

- SDO_NET.GET_DANGLING_LINKS

- SDO_NET.GET_DANGLING_NODES

- SDO_NET.GET_FEATURE_ELEMENTS

- SDO_NET.GET_FEATURE_LAYER_ID

- SDO_NET.GET_FEATURES_ON_LINKS

- SDO_NET.GET_FEATURES_ON_NODES

- SDO_NET.GET_GEOMETRY_TYPE

- SDO_NET.GET_IN_LINKS

- SDO_NET.GET_INVALID_LINKS

- SDO_NET.GET_INVALID_NODES

- SDO_NET.GET_INVALID_PATHS

- SDO_NET.GET_ISOLATED_NODES

- SDO_NET.GET_LINK_COST_COLUMN

- SDO_NET.GET_LINK_DIRECTION

- SDO_NET.GET_LINK_GEOM_COLUMN

- SDO_NET.GET_LINK_GEOMETRY

- SDO_NET.GET_LINK_TABLE_NAME

- SDO_NET.GET_LINKS_IN_PATH

- SDO_NET.GET_LRS_GEOM_COLUMN

- SDO_NET.GET_LRS_LINK_GEOMETRY

- SDO_NET.GET_LRS_NODE_GEOMETRY

- SDO_NET.GET_LRS_TABLE_NAME

- SDO_NET.GET_NETWORK_TYPE

- SDO_NET.GET_NO_OF_HIERARCHY_LEVELS

- SDO_NET.GET_NO_OF_LINKS

- SDO_NET.GET_NO_OF_NODES

- SDO_NET.GET_NODE_DEGREE

- SDO_NET.GET_NODE_GEOM_COLUMN

- SDO_NET.GET_NODE_GEOMETRY

- SDO_NET.GET_NODE_IN_DEGREE

- SDO_NET.GET_NODE_OUT_DEGREE

- SDO_NET.GET_NODE_TABLE_NAME

- SDO_NET.GET_OUT_LINKS

- SDO_NET.GET_PARENT_FEATURE_IDS

- SDO_NET.GET_PARTITION_SIZE

- SDO_NET.GET_PATH_GEOM_COLUMN

- SDO_NET.GET_PATH_TABLE_NAME

- SDO_NET.GET_PERCENTAGE

- SDO_NET.GET_PHANTOM_FEATURES

- SDO_NET.GET_PT

- SDO_NET.IS_HIERARCHICAL

- SDO_NET.IS_LINK_IN_PATH

- SDO_NET.IS_LOGICAL

- SDO_NET.IS_NODE_IN_PATH

- SDO_NET.IS_SPATIAL

- SDO_NET.LOAD_CONFIG

- SDO_NET.LOGICAL_PARTITION

- SDO_NET.LOGICAL_POWERLAW_PARTITION

- SDO_NET.LRS_GEOMETRY_NETWORK

- SDO_NET.NETWORK_EXISTS

- SDO_NET.POST_XML

- SDO_NET.REGISTER_CONSTRAINT

- SDO_NET.SDO_GEOMETRY_NETWORK

- SDO_NET.SET_LOGGING_LEVEL

- SDO_NET.SET_MAX_JAVA_HEAP_SIZE

- SDO_NET.SPATIAL_PARTITION

- SDO_NET.TOPO_GEOMETRY_NETWORK

- SDO_NET.UPDATE_FEATURE

- SDO_NET.UPDATE_FEATURE_ELEMENT

- SDO_NET.VALIDATE_LINK_SCHEMA

- SDO_NET.VALIDATE_LRS_SCHEMA

- SDO_NET.VALIDATE_NETWORK

- SDO_NET.VALIDATE_NODE_SCHEMA

- SDO_NET.VALIDATE_PARTITION_SCHEMA

- SDO_NET.VALIDATE_PATH_SCHEMA

- SDO_NET.VALIDATE_SUBPATH_SCHEMA

索引

図一覧

- 1-1 単純なトポロジ

- 1-2 グリッド線と目盛りを追加した単純なトポロジ

- 1-3 トポロジ内のフィーチャ

- 1-4 トポロジ・ジオメトリ・レイヤー階層

- 1-5 フィーチャ表とトポロジ表間のマッピング

- 1-6 ノード、エッジおよびフェイス

- 2-1 TopoMapオブジェクトのキャッシュを使用したトポロジの編集(PL/SQL API)

- 2-2 TopoMapオブジェクトのキャッシュを使用したトポロジの編集(Java API)

- 2-3 連結ノードの追加

- 2-4 ノードの追加に及ぼすis_new_shape_point値の影響

- 2-5 連結ノードの移動前のトポロジ

- 2-6 連結ノードの移動後のトポロジ

- 2-7 許可されないノードの移動

- 2-8 ノードの移動例用のトポロジ

- 2-9 連結ノードの削除

- 2-10 不要ノードの削除

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

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

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

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

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

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

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

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

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

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

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

表一覧

- 1-1 <topology-name>_EDGE$表内の列

- 1-2 エッジ表のID列値

- 1-3 <topology-name>_NODE$表内の列

- 1-4 <topology-name>_FACE$表内の列

- 1-5 <topology-name>_RELATION$表内の列

- 1-6 <topology-name>_HISTORY$表内の列

- 1-7 SDO_TOPO_GEOMETRY型の属性

- 1-8 xxx_SDO_TOPO_INFOビューの列

- 1-9 xxx_SDO_TOPO_METADATAビューの列

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

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

- 5-3 ノード表の列

- 5-4 リンク表の列

- 5-5 パス表の列

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

- 5-7 サブパス表の列

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

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

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

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

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

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

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

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

- 5-16 xxx_SDO_NETWORK_METADATAビューの列

- 5-17 xxx_SDO_NETWORK_CONSTRAINTSビューの列

- 5-18 xxx_SDO_NETWORK_USER_DATAビューの列

- 5-19 xxx_SDO_NETWORK_FEATUREビューの列

はじめに

『Oracle Spatial and Graphトポロジおよびネットワーク・データ・モデル開発者ガイド』では、Oracle Spatial and Graph (単にSpatial and Graphと表記する場合もあります)のトポロジ・データ・モデル・グラフ機能およびネットワーク・データ・モデルの使用方法およびリファレンス情報を示します。

対象読者

このマニュアルは、トポロジ内のノード、エッジおよびフェイス、またはネットワーク内のノード、リンクおよびパスに関するデータを管理する必要があるユーザーを対象としています。

『Oracle Spatial and Graph開発者ガイド』に記載されている空間の主な概念、データ型および操作を理解しておく必要があります。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティへの取り組みについては、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)にアクセスしてください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info、聴覚に障害があるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

詳細は、『Oracle Spatial and Graph開発者ガイド』を参照してください。

表記規則

このドキュメントでは次の表記規則を使用します。

表記規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダー変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』のこのリリースでの変更点

この章の内容は次のとおりです。

- Oracle Database 12c リリース1 (12.1)での変更点

Oracle Database 12cリリース1 (12.1)での変更点

次に、Oracle Database 12cリリース1 (12.1)の『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』での変更点を示します。

新機能

このリリースの新機能は次のとおりです。

- ネットワーク・データ・モデルでのフィーチャ・モデリング

- マルチモーダル・ネットワークおよび時間モデリングのサポート

- SDO_NET.LOGICAL_POWERLAW_PARTITIONの新しいpart_size_toleranceパラメータ

ネットワーク・データ・モデルでのフィーチャ・モデリング

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

フィーチャ・モデリングの詳細は、次の項を参照してください。

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

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

- フィーチャ・モデリングに関連する次の新しいPL/SQLサブプログラム(各サブプログラムについては「SDO_NETパッケージ・サブプログラム」を参照)

SDO_NET.ADD_CHILD_FEATURE
SDO_NET.ADD_CHILD_FEATURES
SDO_NET.ADD_FEATURE
SDO_NET.ADD_FEATURE_ELEMENT
SDO_NET.ADD_FEATURE_ELEMENTS
SDO_NET.ADD_FEATURE_LAYER
SDO_NET.DELETE_CHILD_FEATURES
SDO_NET.DELETE_CHILD_FEATURES_AT
SDO_NET.DELETE_DANGLING_FEATURES
SDO_NET.DELETE_DANGLING_LINKS
SDO_NET.DELETE_DANGLING_NODES
SDO_NET.DELETE_FEATURE_ELEMENTS
SDO_NET.DELETE_FEATURE_ELEMENTS_AT
SDO_NET.DELETE_FEATURES
SDO_NET.DELETE_PHANTOM_FEATURES
SDO_NET.DROP_FEATURE_LAYER
SDO_NET.GET_CHILD_FEATURE_IDS
SDO_NET.GET_DANGLING_FEATURES
SDO_NET.GET_DANGLING_LINKS
SDO_NET.GET_DANGLING_NODES
SDO_NET.GET_FEATURE_ELEMENTS
SDO_NET.GET_FEATURE_LAYER_ID
SDO_NET.GET_FEATURES_ON_LINKS
SDO_NET.GET_FEATURES_ON_NODES
SDO_NET.GET_PARENT_FEATURE_IDS
SDO_NET.GET_PHANTOM_FEATURES
SDO_NET.POST_XML
SDO_NET.UPDATE_FEATURE
SDO_NET.UPDATE_FEATURE_ELEMENT

マルチモーダル・ネットワークおよび時間モデリングのサポート

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

マルチモーダル・ネットワークおよび時間モデリングのサポートおよび分析の詳細は、次の項を参照してください。

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

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

SDO_NET.LOGICAL_POWERLAW_PARTITIONの新しいpart_size_toleranceパラメータ

SDO_NET.LOGICAL_POWERLAW_PARTITIONプロシージャに、パーティション・サイズの許可された許容差(max_num_nodesの割合として表される)を指定するpart_size_toleranceという新しいパラメータが追加されました。

インメモリーのJava APIおよびSDO_NET_MEMパッケージのサポート終了

すでに非推奨として発表されているインメモリーのJava APIおよび関連するSDO_NET_MEM PL/SQLパッケージは、このマニュアルから削除されています。(これらの機能に関するドキュメントは、リリース11.2のマニュアルに残されています。)かわりにロード・オンデマンド方式を使用することをお薦めします。

その他の変更

Spatial製品の名前は、Oracle SpatialからOracle Spatial and Graph (Spatial and Graphとも呼ばれます)に変更されました。

ネットワーク・データ・モデリング機能の名前は、ネットワーク・データ・モデル・グラフに変更されました。

第I部 トポロジ・データ・モデル

このマニュアルは、次の2部で構成されています。

- 第I部では、Oracle Spatial and Graphのトポロジ・データ・モデル機能の概念、使用方法およびリファレンス情報を示します。

- 「ネットワーク・データ・モデル」では、Oracle Spatial and Graphのネットワーク・データ・モデル・グラフ機能の概念、使用方法およびリファレンス情報を示します。

第I部は、次の章で構成されています。

- トポロジ・データ・モデルの概要

- トポロジの編集

- SDO_TOPOパッケージ・サブプログラム

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

1 トポロジ・データ・モデルの概要

Oracle Spatial and Graphのトポロジ・データ・モデル機能を使用すると、トポロジ内のノード、エッジおよびフェイス関するデータを管理できます。たとえば、米国の国勢調査の地理データは、ノード、チェーンおよびポリゴンで提供されており、このデータは、Spatial and Graphのトポロジ・データ・モデル機能で表現できます。Oracle Spatial and Graphの表およびメタデータ・ビューには、位相要素およびジオメトリ・レイヤーに関する情報を格納できます。その後、その位相要素を参照する特定の空間操作(たとえば、特定のポリゴン・エンティティ(公園など)と空間的に相互作用するチェーン(通りなど)の検索)を実行できます。

この章では、トポロジ・データ・モデル機能をサポートする空間データ構造およびデータ型について説明します。また、この構造の移入および操作の手順も示します。この章に示す情報を利用して、トポロジ・データをSpatial and Graphで使用可能な形式に変換するプログラムを作成できます。

注意:

この章では、Oracle Spatial and Graphに関連するいくつかのトポロジ用語について説明しますが、ユーザーがトポロジの基本的な概念を十分に理解していると想定しています。

また、ユーザーは、『Oracle Spatial and Graph開発者ガイド』に記載されているSpatial and Graphの主な概念、データ型および操作を理解しておく必要があります。

この章には次の項が含まれます。

- トポロジ・データを使用するための主な手順

- トポロジ・データ・モデルの概念

- トポロジ・ジオメトリおよびトポロジ・ジオメトリ・レイヤー

- トポロジ・ジオメトリ・レイヤー階層

- トポロジ・データ・モデル表

- トポロジ・データ型

- トポロジのメタデータ・ビュー

- トポロジのApplication Program Interface

- トポロジ・データのエクスポートおよびインポート

- 複数のスキーマが関係している場合のトポロジの使用方法および編集方法

- サポートされないファンクション索引

- トポロジの例(PL/SQL)

- Spatial and Graphおよび関連する機能のREADMEファイル

トポロジ・データを使用するための主な手順

この項では、トポロジ・データを使用するための主な手順の概要を示します。また、重要な概念、構造および操作を示します(詳細は他の項を参照してください)。

具体的な主要手順は、2つある基本的な方法のいずれを採用するかによって異なります。どちらの方法を採用するかは、トポロジの作成に使用するデータの種類によって決定します。

- エッジ、ノードおよびフェイスに関するデータを使用する(ただし空間ジオメトリ・データは使用しない)場合は、「トポロジ・データから作成したトポロジの使用」に示す手順を実行します。

- トポロジのフィーチャとなる空間のジオメトリからトポロジを作成する場合は、「空間ジオメトリから作成したトポロジの使用」に示す手順を実行します。

トポロジ・データ・モデルのPL/SQL APIおよびJava APIを使用すると、トポロジを更新(たとえば、エッジ、ノードまたはフェイスに関するデータを変更)できます。ほとんどの編集操作用のPL/SQL APIは、SDO_TOPO_MAPパッケージ(「SDO_TOPO_MAPパッケージ・サブプログラム」を参照)です。Java APIの詳細は、「トポロジ・データ・モデルのJavaインタフェース」を参照してください。

トポロジ・データから作成したトポロジの使用

トポロジ・データから作成したトポロジを使用するための主な手順は次のとおりです。

1. SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して、トポロジを作成します。これによって、<topology-name>_EDGE$表、<topology-name>_NODE$表、<topology-name>_FACE$表および<topology-name>_HISTORY$表が作成されます。(これらの表は、それぞれ「エッジ情報表」、「ノード情報表」、「フェイス情報表」および「履歴情報表」を参照してください。)

2. 手順1で作成したノード表、エッジ表およびフェイス表にトポロジ・データをロードします。これは、通常、バルク・ロード・ユーティリティを使用して実行しますが、SQLのINSERT文を使用して実行することもできます。

3. トポロジ内のトポロジ・ジオメトリ・レイヤーのタイプごとに1つのフィーチャ表を作成します。たとえば、都市データ・トポロジには、土地区画、通りおよび道路標識用の個別のフィーチャ表が含まれる場合があります。

4. 各フィーチャ表に対してSDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャを使用して、フィーチャ表をトポロジに関連付けます。これによって、<topology-name>_RELATION$表が作成されます。(この表の詳細は、「関係情報表」を参照してください。)

5. SDO_TOPO.INITIALIZE_METADATAプロシージャを使用して、トポロジ・メタデータを初期化します。(このプロシージャによって、<topology-name>_EDGE$表、<topology-name>_NODE$表および<topology-name>_FACE$表に空間索引が作成され、<topology-name>_EDGE$表および<topology-name>_NODE$表にBツリー索引が追加で作成されます。)

6. SDO_TOPO_GEOMETRYのコンストラクタを使用して、フィーチャ表をロードします。(このコンストラクタの詳細は、「SDO_TOPO_GEOMETRYのコンストラクタ」を参照してください。)

7. トポロジ・データを(たとえば、「トポロジ演算子」で説明するトポロジ演算子の1つを使用して)問い合せます。

8. オプションで、PL/SQL Application Program Interface(API)またはJava APIを使用してトポロジ・データを編集します。

これらの主な手順のPL/SQLでの実行例を、「トポロジ・データから作成したトポロジの使用」に示します。

空間ジオメトリから作成したトポロジの使用

空間ジオメトリからトポロジを作成するには、最初に、Oracle Spatial and Graphで使用できるデータを準備するための一般的な操作を実行する必要があります(『Oracle Spatial and Graph開発者ガイド』を参照)。

1. 空間表を作成します。

2. 空間メタデータ(USER_SDO_GEOM_METADATAビュー)を更新します。

3. データを空間表にロードします。

4. 空間データを検証します。

5. 空間索引を作成します。

Oracle Spatial and Graphのジオメトリから作成したトポロジを使用するための主な手順は次のとおりです。

1. SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して、トポロジを作成します。これによって、<topology-name>_EDGE$表、<topology-name>_NODE$表、<topology-name>_FACE$表および<topology-name>_HISTORY$表が作成されます。(これらの表は、それぞれ「エッジ情報表」、「ノード情報表」、「フェイス情報表」および「履歴情報表」を参照してください。)

2. ユニバース・フェイス(「トポロジ・データ・モデルの概念」で定義されているF0)を作成します。

3. トポロジ内のトポロジ・ジオメトリ・レイヤーのタイプごとに1つのフィーチャ表を作成します。たとえば、都市データ・トポロジには、土地区画、通りおよび道路標識用の個別のフィーチャ表が含まれる場合があります。

4. 各フィーチャ表に対してSDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャを使用して、フィーチャ表をトポロジに関連付けます。これによって、<topology-name>_RELATION$表が作成されます。(この表の詳細は、「関係情報表」を参照してください。)

5. SDO_TOPO.INITIALIZE_METADATAプロシージャを使用して、トポロジ・メタデータを初期化します。(このプロシージャによって、<topology-name>_EDGE$表、<topology-name>_NODE$表および<topology-name>_FACE$表に空間索引が作成され、<topology-name>_EDGE$表および<topology-name>_NODE$表にBツリー索引が追加で作成されます。)

6. TopoMapオブジェクトを作成し、トポロジ全体をキャッシュにロードします。

7. 空間表からデータを挿入し、SDO_TOPO_MAP.CREATE_FEATUREファンクションを使用して、フィーチャ表をロードします。

8. トポロジ・データを(「トポロジ演算子」で説明するトポロジ演算子の1つを使用して)問い合せます。

9. オプションで、PL/SQL Application Program Interface(API)またはJava APIを使用してトポロジ・データを編集します。

これらの主な手順のPL/SQLでの実行例を、「空間ジオメトリから作成したトポロジ」に示します。

トポロジ・データ・モデルの概念

トポロジとは、空間内のオブジェクトに関する数学の1つの分野です。位相関係には、包含、内部、覆う、覆われる、接触、境界が交差する重なりなどがあります。位相関係は、座標空間が(ねじりや伸張などで)変形しても変化しません。(位相的でない関係には、長さ、2物間の距離、面積などがあります。)

トポロジの基本的な要素は、ノード、エッジおよびフェイスです。

ノードは点で表現され、孤立したものを表すか、またはエッジの境界を示すために使用されます。2つ以上のエッジの連結部は、孤立していないノードです。ノードには、そのノードの空間位置を表す1組の座標値が関連付けられます。ノードとして表現できる地理エンティティには、通りの開始点と終了点、史跡、空港(非常に広域な地図の場合)などがあります。

エッジは、開始ノード(基点)と終了ノード(終点)の2つのノードで定義されます。1つのエッジには、1つのジオメトリ・オブジェクトが関連付けられます。このオブジェクトは、通常、エッジの空間表現を表す一連の座標です。エッジには複数の頂点が含まれる場合があり、それらによって線ストリングが表現されます。(トポロジでは円弧はサポートされていません。)エッジとして表現できる地理エンティティには、通りや川の区画があります。

座標の順序によって、エッジの方向が決まります。方向は、位相関係を判断する際に重要です。正の方向は基礎となるエッジの方向で、負の方向はそれとは逆の方向です。エッジの各方向は、有向エッジと呼ばれます。各有向エッジは、そのエッジの他方の有向エッジのミラー・イメージです。正の有向エッジの開始ノードは、負の有向エッジの終了ノードです。エッジは2つのフェイスの境界でもあります。このエッジは両方のフェイスへの参照を含んでいます。フェイスの連続した周囲の各有向エッジは、それぞれ左側の次のエッジへの参照を含んでいます。ポリゴンに対応しているフェイスは、その外側の境界の有向エッジごとに1つの参照を含んでいます。また、孤立ノードや孤立エッジが存在する場合、フェイスは各孤立要素の境界上の1つの有向エッジへの参照を含んでいます。フェイスとして表現できる地理エンティティには、公園、湖、郡、州などがあります。

図1-1に、ノード、エッジおよびフェイスを含む単純なトポロジを示します。各エッジ上の矢印は、エッジの正の方向(正確には、エッジの正の方向の基準となる線ストリング・ジオメトリまたは曲線ジオメトリの方向)を示しています。

図1-1 単純なトポロジ

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

- E 要素(E1、E2など)はエッジ、F 要素(F0、F1など)はフェイス、N 要素(N1、N2など)はノードです。

- F0(フェイス0(ゼロ))は、すべてのトポロジに作成されます。これは、トポロジ内の他のすべてのものを含むユニバース・フェイスです。このユニバース・フェイスには、ジオメトリは関連付けられません。F0のフェイスID値は-1(負の1)です。

- 各点ジオメトリ、およびエッジの各開始ノードと各終了ノードに対して、1つのノードが作成されます。たとえば、フェイスF1には、E1というエッジ(閉じたエッジ)が1つのみ存在します。このエッジには、開始ノードと終了ノードとして同じノード(N1)が含まれています。F1には、開始ノードN21と終了ノードN22で構成されたエッジE25も含まれています。

- 孤立ノード(島ノード)は、フェイス内で孤立しているノードです。たとえば、ノードN4はフェイスF2内の孤立ノードです。

- 孤立エッジ(島エッジ)は、フェイス内で孤立しているエッジです。たとえば、エッジE25はフェイスF1内の孤立エッジです。

- ループ・エッジは、同じノードを開始ノードと終了ノードとして使用するエッジです。たとえば、エッジE1は、ノードN1から開始してノードN1で終了するループ・エッジです。

- エッジ上には孤立ノードは含まれません。エッジ上にノードを追加することで、エッジを2つに分割できます。たとえば、ノードN16とN18の間が最初は単一のエッジであった場合、ノードN17を追加したことによってE6とE7の2つのエッジが作成されています。

- 位相関係に関する情報は、特別なエッジ情報表、フェイス情報表およびノード情報表に格納されます。たとえば、エッジ情報表には、エッジE9およびE10に関する次の情報が格納されます。(各エッジの矢印の方向に注意してください。)次のエッジと前のエッジは、エッジの左と右のフェイスに基づいています。
エッジE9の場合、開始ノードはN15で、終了ノードはN14です。左の次のエッジはE19、左の前のエッジは-E21、右の次のエッジは-E22、右の前のエッジはE20です。左のフェイスはF3で、右のフェイスはF6です。

エッジE10の場合、開始ノードはN13で、終了ノードはN14です。左の次のエッジは-E20、左の前のエッジはE18、右の次のエッジはE17、右の前のエッジは-E19です。左のフェイスはF7で、右のフェイスはF4です。

エッジに関連するデータの、図および説明を含むその他の例については、「エッジ情報表」を参照してください。

図1-2に、図1-1と同じトポロジにグリッドおよびX軸とY軸の目盛りを追加したものを示します。図1-2は、「SDO_TOPOパッケージ・サブプログラム」および「SDO_TOPO_MAPパッケージ・サブプログラム」のいくつかの例の出力を理解するのに役立ちます。

図1-2 グリッド線と目盛りを追加した単純なトポロジ

トポロジ・データ・モデルの許容差

許容差は、空間データに精度レベルを関連付けるために使用します。許容差は、(たとえば、丸めの誤差の調整のために、)2つの点が一致しない場合でも、2点が同一の点とみなされる最大距離に影響します。許容差には、0(ゼロ)より大きい正の数字を指定する必要があります。

ただし、トポロジ・データ・モデルの許容差には、実行されている操作によって異なる2つの意味があり、一方の意味は従来のOracle Spatial and Graphの許容差の定義であり、もう一方の意味は固定許容差10E-15です。

- SDO_TOPO.CREATE_TOPOLOGYプロシージャへのコールに指定される許容差は、従来のOracle Spatial and Graphの定義を参照します(『Oracle Spatial and Graph開発者ガイド』を参照)。この許容差は、索引がノード表、エッジ表およびフェイス表に作成される場合と、これらの表を問い合せるために空間演算子が使用される場合に使用されます。

- トポロジの編集操作中、内部計算(エッジの交差点の検出など)に使用される許容差は、常に(Java倍精度演算に基づく)10E-15です。この許容差は、SDO_TOPO_MAP.VALIDATE_TOPO_MAPファンクションおよびSDO_TOPO_MAP.VALIDATE_TOPOLOGYファンクションによる妥当性チェックの実行中に使用されます

したがって、たとえば、あるエッジ・ジオメトリがSDO_TOPO_MAP.VALIDATE_TOPO_MAPファンクションまたはSDO_TOPO_MAP.VALIDATE_TOPOLOGYファンクションによって有効とみなされていても、そのエッジ・ジオメトリがSDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションに渡されると、有効でない可能性があります。

トポロジ・ジオメトリおよびトポロジ・ジオメトリ・レイヤー

トポロジ ・ジオメトリ(フィーチャともいう)は、実際のオブジェクトの空間表現です。たとえば、Main Street(大通り)やWalden State Park(ウォールデン州立公園)というトポロジ・ジオメトリが存在する場合があります。ジオメトリは、位相要素(ノード、エッジおよびフェイス)のセットとして格納され、位相要素はプリミティブとも呼ばれます。各トポロジ・ジオメトリには、(レコードのインポートまたはロード時にSpatial and Graphが割り当てた)一意のIDが関連付けられています。

トポロジ・ジオメトリ・レイヤーは、複数のトポロジ・ジオメトリ・タイプの集合で構成することもできますが、一般的には特定のタイプで構成されています(コレクション・レイヤーについては、「コレクション・レイヤー」を参照してください)。たとえば、Main Streetトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーは、Streets (通り)とすることができます。また、Walden State Parkトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーは、State Parks (州立公園)とすることができます。各トポロジ・ジオメトリ・レイヤーには、(Spatial and Graphが割り当てた)一意のIDが関連付けられています。各トポロジ・ジオメトリ・レイヤーのデータは、フィーチャ表に格納されます。たとえば、CITY_STREETSというフィーチャ表には、Streetsトポロジ・ジオメトリ・レイヤー内のすべてのトポロジ・ジオメトリ(個々の道路および通り)に関する情報が含まれています。

各トポロジ・ジオメトリ(フィーチャ)は、SDO_TOPO_GEOMETRY型のオブジェクト(「SDO_TOPO_GEOMETRY型」を参照)として定義します。このオブジェクトでは、トポロジのトポロジ・ジオメトリ・タイプ、トポロジ・ジオメトリID、トポロジ・ジオメトリ・レイヤーIDおよびトポロジIDを定義します。

トポロジ・メタデータは、Spatial and Graphによって自動的にUSER_SDO_TOPO_METADATAビューおよびALL_SDO_TOPO_METADATAビュー(「xxx_SDO_TOPO_METADATAビュー」を参照)に保持されます。USER_SDO_TOPO_INFOビューおよびALL_SDO_TOPO_INFOビュー(「xxx_SDO_TOPO_INFOビュー」を参照)には、このトポロジ・メタデータのサブセットが含まれます。

フィーチャ

多くの場合、トポロジ内にはフィーチャより多くの位相要素(ノード、エッジおよびフェイス)が含まれます。たとえば、1つの道路フィーチャが多くのエッジで構成されたり、公園などの1つの領域フィーチャが多くのフェイスで構成される場合があります。また、点フィーチャにノードが関連付けられない場合もあります。図1-3に、「トポロジ・データ・モデルの概念」の図1-1に示したトポロジに関連付けられた点フィーチャ、線フィーチャおよび領域フィーチャを示します。

図1-3 トポロジ内のフィーチャ

図1-3に示すトポロジ内のフィーチャの種類は次のとおりです。

- 点フィーチャ(道路標識): 黒い丸S1、S2、S3およびS4として示しています。

- 線フィーチャ(道路または通り): 破線R1、R2、R3およびR4として示しています。

- 領域フィーチャ(土地区画): 矩形P1、P2、P3、P4およびP5として示しています。
土地区画P5の領域には、グレーの領域は含まれません。(つまり、P5はフェイスF1を含みますが、フェイスF9は含みません。これらのフェイスは、「トポロジ・データ・モデルの概念」の図1-1で示しています。)

「トポロジ・データから作成したトポロジ」の例1-12では、これらのフィーチャを定義します。

コレクション・レイヤー

コレクション・レイヤーは、異なるトポロジ・ジオメトリ・タイプの位相要素を含めることのできるトポロジ・ジオメトリ・レイヤーです。たとえば、「トポロジの例(PL/SQL)」の例のCITY_DATAトポロジを使用すると、特定の土地区画、通りおよび道路標識の要素を含むコレクション・レイヤーを作成できます。

コレクション・レイヤーを作成するには、基本的に他のタイプのレイヤーを作成するのと同じ手順を実行します。次の例のように、レイヤーのフィーチャ表を作成します。

CREATE TABLE collected_features ( -- Selected heterogeneous features
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

次の例のように、SDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャのコール時に、topo_geometry_layer_typeパラメータにCOLLECTIONを指定して、フィーチャ表をトポロジに関連付けます。

EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', COLLECTED_FEATURES', 'FEATURE', 'COLLECTION');

コレクション・レイヤーのフィーチャ表をロードするには、例1-1に示すように、必要な行を挿入します。

例1-1 コレクション・レイヤーのフィーチャ表のロード

-- Take R5 from the CITY_STREETS layer.
INSERT INTO collected_features VALUES(
'C_R5',
SDO_TOPO_GEOMETRY('CITY_DATA',
2,  -- tg_type = line/multiline
4,  -- tg_layer_id
SDO_TOPO_OBJECT_ARRAY(
SDO_TOPO_OBJECT(20, 2),
SDO_TOPO_OBJECT(-9, 2)))
);

-- Take S3 from the TRAFFIC_SIGNS layer.
INSERT INTO collected_features VALUES(
'C_S3',
SDO_TOPO_GEOMETRY('CITY_DATA',
1,  -- tg_type = point/multipoint
4,  -- topo layer id
SDO_TOPO_OBJECT_ARRAY(
SDO_TOPO_OBJECT(6, 1)))
);

-- Take P3 from the LAND_PARCELS layer.
INSERT INTO collected_features VALUES(
'C_P3',
SDO_TOPO_GEOMETRY('CITY_DATA',
3,  -- tg_type = (multi)polygon
4,
SDO_TOPO_OBJECT_ARRAY(
SDO_TOPO_OBJECT(5, 3),
SDO_TOPO_OBJECT(8, 3)))
);

-- Create a collection from a polygon and a point.
INSERT INTO collected_features VALUES(
'C1',
SDO_TOPO_GEOMETRY('CITY_DATA',
4,  -- tg_type = collection
4,
SDO_TOPO_OBJECT_ARRAY(
SDO_TOPO_OBJECT(5, 3),
SDO_TOPO_OBJECT(6, 1)))
);

-- Create a collection from a polygon and a line.
INSERT INTO collected_features VALUES(
'C2',
SDO_TOPO_GEOMETRY('CITY_DATA',
4,  -- tg_type = collection
4,
SDO_TOPO_OBJECT_ARRAY(
SDO_TOPO_OBJECT(8, 3),
SDO_TOPO_OBJECT(10, 2)))
);

-- Create a collection from a line and a point.
INSERT INTO collected_features VALUES(
'C3',
SDO_TOPO_GEOMETRY('CITY_DATA',
4,  -- tg_type = collection
4,
SDO_TOPO_OBJECT_ARRAY(
SDO_TOPO_OBJECT(-5, 2),
SDO_TOPO_OBJECT(10, 1)))
);

トポロジ・ジオメトリ・レイヤー階層

一部のトポロジには、トポロジ・ジオメトリ・レイヤー(フィーチャ・レイヤー)が1つ以上の親子関係を持つトポロジ階層が含まれます。つまり、最上位レベルのレイヤーは階層の1つ下のレベルの子レイヤーのフィーチャで構成され、その子レイヤーはさらに1つ下のレベルの子レイヤーのフィーチャで構成されます(以降のレイヤーも同様です)。たとえば、土地利用トポロジには、次のトポロジ・ジオメトリ・レイヤーが階層の個別のレベルとして含まれる場合があります。

- 最上位レベルは州です。このレベルは、その子レイヤーである郡のフィーチャで構成されます。

- 州の1つ下のレベルは郡です。このレベルは、その子レイヤーである地域のフィーチャで構成されます。

- 郡の1つ下のレベルは地域です。このレベルは、その子レイヤーである区域のフィーチャで構成されます。

- 地域の1つ下のレベルは区域です。このレベルは、その子レイヤーである土地区画のフィーチャで構成されます。

- 土地区画は、階層の最下位レベルです。

トポロジ内のトポロジ・ジオメトリ・レイヤーがこの階層関係を持つ場合、すべてのトポロジ・ジオメトリ・レイヤーを単一レベルで(階層を使用せずに)指定するより、それらのレイヤーを階層としてモデル化する方が大幅に効率的です。たとえば、郡のSDO_TOPO_GEOMETRYオブジェクトを構成する場合、郡内のすべての地域のすべての区域のすべての土地区画を指定するよりも、郡内の地域のみを指定する方がより効率的です。

階層内の最も低いレベル(最も小さい種類のフィーチャを含むトポロジ・ジオメトリ・レイヤー)はレベル0 (ゼロ)で、これより高いレベルは順にレベル1、レベル2のように番号が付けられます。階層内で隣接するレベルのトポロジ・ジオメトリ・レイヤーには、親子関係があります。上位レベルの各トポロジ・ジオメトリ・レイヤーは、1つ下のレベルのレイヤーに対する親レイヤーになります。1つ下のレベルのレイヤーは、上位レベルのレイヤーの子レイヤーになります。親レイヤーは子レイヤーを1つのみ持つことができますが、子レイヤーは1つ以上の親レイヤーを持つことができます。前述の例では、郡レイヤーは子レイヤーとして地域のみを持つことができますが、地域レイヤーは親レイヤーとして郡および水道地域を持つことができます。

注意:

トポロジ・ジオメトリ・レイヤーの階層は、「ネットワークの階層」に示すネットワーク階層に類似しています。ただし、これらの階層には大きな違いがあるため、混同しないように注意してください。たとえば、トポロジ・ジオメトリ・レイヤー階層の最下位レベルは0 (ゼロ)ですが、ネットワーク階層の最下位レベルは1です。また、トポロジ・ジオメトリ・レイヤー階層内の1つの親が持つ子は常に1つで、1つの子は複数の親を持つことができますが、ネットワーク階層では、1つの親は複数の子を持つことができ、1つの子が持つ親は常に1つです。

図1-4に、前述の例のトポロジ・ジオメトリ・レイヤー階層を示します。階層の各レベルには、レベル番号と、そのレベルのトポロジ・ジオメトリ・レイヤーを示しています。

図1-4 トポロジ・ジオメトリ・レイヤー階層

例1-2 トポロジ・ジオメトリ・レイヤー階層のモデル化

トポロジ・ジオメトリ・レイヤーを階層としてモデル化するには、SDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャをコールして、親トポロジ・ジオメトリ・レイヤーをトポロジに追加するときに、child_layer_idパラメータに子レイヤーを指定します。最初に最下位レベル(レベル0 (ゼロ))のトポロジ・ジオメトリ・レイヤーを追加し、次にレベル1のレイヤーを追加してレベル0のレイヤーをその子として指定します。次に、レベル2のレイヤーを追加してレベル1のレイヤーをその子として指定します。他のレイヤーも同様に指定します。例1-2に、5つのトポロジ・ジオメトリ・レイヤーを追加して、5レベルの階層を作成する例を示します。

-- Create the topology. (Null SRID in this example.)
EXECUTE SDO_TOPO.CREATE_TOPOLOGY('LAND_USE_HIER', 0.00005);

-- Create feature tables.
CREATE TABLE land_parcels ( -- Land parcels (selected faces)
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE block_groups (
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE tracts (
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE counties (
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE states (
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

-- (Other steps not shown here, such as populating the feature tables
-- and initializing the metadata.)
. . .
-- Associate feature tables with the topology; include hierarchy information.

DECLARE
land_parcels_id NUMBER;
block_groups_id NUMBER;
tracts_id NUMBER;
counties_id NUMBER;
BEGIN
SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('LAND_USE_HIER', 'LAND_PARCELS',
'FEATURE','POLYGON');
SELECT tg_layer_id INTO land_parcels_id FROM user_sdo_topo_info
WHERE topology = 'LAND_USE_HIER' AND table_name = 'LAND_PARCELS';
SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('LAND_USE_HIER', 'BLOCK_GROUPS',
'FEATURE','POLYGON', NULL, land_parcels_id);
SELECT tg_layer_id INTO block_groups_id FROM user_sdo_topo_info
WHERE topology = 'LAND_USE_HIER' AND table_name = 'BLOCK_GROUPS';
SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('LAND_USE_HIER', 'TRACTS',
'FEATURE','POLYGON', NULL, block_groups_id);
SELECT tg_layer_id INTO tracts_id FROM user_sdo_topo_info
WHERE topology = 'LAND_USE_HIER' AND table_name = 'TRACTS';
SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('LAND_USE_HIER', 'COUNTIES',
'FEATURE','POLYGON', NULL, tracts_id);
SELECT tg_layer_id INTO counties_id FROM user_sdo_topo_info
WHERE topology = 'LAND_USE_HIER' AND table_name = 'COUNTIES';
SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('LAND_USE_HIER', 'STATES',
'FEATURE','POLYGON', NULL, counties_id);
END;/

レベル0(ゼロ)より上の各レベル内では、各レイヤーに、(例1-2で作成したような)1つ下のレベルのフィーチャから作成されたフィーチャ、位相要素(フェイス、ノードおよびエッジ)から作成されたフィーチャまたはこれらの組合せを含めることができます。たとえば、地域レイヤーには、区域から作成した地域またはフェイスから作成した地域、あるいはその両方を含めることができます。ただし、レイヤー内の各フィーチャは、1つ下のレベルのフィーチャまたは位相要素のいずれかのみから作成されている必要があります。たとえば、特定の地域を区域から構成することもフェイスから構成することもできますが、区域とフェイスを組み合せて構成することはできません。

階層内のレベルのフィーチャ表に対してトポロジ・ジオメトリ・オブジェクトの挿入または更新を行うには、SDO_TOPO_GEOMETRYコンストラクタの適切な形式を使用します。フィーチャ表については、「トポロジ・ジオメトリおよびトポロジ・ジオメトリ・レイヤー」を参照してください。SDO_TOPO_GEOMETRYのコンストラクタについては、「SDO_TOPO_GEOMETRYのコンストラクタ」を参照してください。

関係情報表内のTOPO_ID属性およびTOPO_TYPE属性は、トポロジ・ジオメトリ・レイヤー階層を持つトポロジ内の親レイヤーの場合は特別な意味を持つことに注意してください。「関係情報表」の表1-5のこれらの属性の説明を参照してください。

トポロジ・データ・モデル表

Spatial and Graphのトポロジ機能を使用するには、最初に特別なエッジ表、ノード表およびフェイス表にデータを挿入する必要があり、これらの表は、トポロジの作成時にSpatial and Graphによって作成されます。エッジ表、ノード表およびフェイス表については、それぞれ「エッジ情報表」、「ノード情報表」および「フェイス情報表」を参照してください。

Spatial and Graphは、各トポロジの関係情報(<topology-name>_RELATION$)表を自動的に管理し、この表は、フィーチャ表がトポロジに初めて関連付けられたとき(トポロジを指定するSDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャを初めてコールしたとき)に作成されます。関係情報表については、「関係情報表」を参照してください。

図1-5に、フィーチャ表内の情報をノード表、エッジ表またはフェイス表内の情報に関連付ける際の、関係情報表の役割を示します。

図1-5 フィーチャ表とトポロジ表間のマッピング

図1-5に示すとおり、フィーチャ表とトポロジのノード表、エッジ表およびフェイス表間のマッピングは、<topology-name>_RELATION$表を介して行われます。具体的には、次のとおりです。

- 各フィーチャ表には、SDO_TOPO_GEOMETRY型の列が含まれます。この型には、TG_LAYER_ID属性(レイヤーの作成時にOracle Spatial and Graphによって割り当てられる一意のID)およびTG_ID属性(レイヤー内の各フィーチャに割り当てられる一意のID)が含まれます。これらの2つの列内の値に対応する値が、<topology-name>_RELATION$表内のTG_LAYER_ID列およびTG_ID列に存在します。

- 各フィーチャに対応する行が、<topology-name>_RELATION$表内に1つ以上存在します。

- フィーチャのTG_LAYER_ID値とTG_ID値を指定すると、<topology-name>_RELATION$表内のTOPO_ID値(ノード、エッジまたはフェイスのID)と<topology-name>_NODE$表、<topology-name>_EDGE$表または<topology-name>_FACE$表内の対応するID値を一致させることによって、そのフィーチャに関連付けられた一連のノード、フェイスおよびエッジが判断されます。

次の考慮事項は、スキーマ、表、および任意のOracle Spatial and Graphメタデータ・ビューに格納されている列名に適用されます。たとえば、これらの注意事項は、エッジ表、ノード表、フェイス表、関係情報表および履歴情報表の名前に適用されます。また、これらの表内の任意の列の名前や、「トポロジ・メタデータ・ビュー」で説明するトポロジ・メタデータ・ビューに格納されるこれらの表のスキーマにも適用されます。

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

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

エッジ情報表

トポロジ内のエッジに関する情報は、<topology-name>_EDGE$表に格納する必要があります。<topology-name>は、SDO_TOPO.CREATE_TOPOLOGYプロシージャへのコールに指定した、そのトポロジの名前です。各エッジ情報表には、表1-1に示す列が含まれます。

表1-1 <topology-name>_EDGE$表内の列

_EDGE表内の列" title="<topology-name>_EDGE$表内の列" width="100%">

列名

データ型

説明

EDGE_ID

NUMBER

このエッジの一意のID番号です。

START_NODE_ID

NUMBER

このエッジの開始ノードのID番号です。

END_NODE_ID

NUMBER

このエッジの終了ノードのID番号です。

NEXT_LEFT_EDGE_ID

NUMBER

このエッジの左の次のエッジのID番号(符号付き)です。

PREV_LEFT_EDGE_ID

NUMBER

このエッジの左の前のエッジのID番号(符号付き)です。

NEXT_RIGHT_EDGE_ID

NUMBER

このエッジの右の次のエッジのID番号(符号付き)です。

PREV_RIGHT_EDGE_ID

NUMBER

このエッジの右の前のエッジのID番号(符号付き)です。

LEFT_FACE_ID

NUMBER

このエッジの左のフェイスのID番号です。

RIGHT_FACE_ID

NUMBER

このエッジの右のフェイスのID番号です。

GEOMETRY

SDO_GEOMETRY

このエッジを表すジオメトリ・オブジェクト(線ストリング)で、正の有向エッジの自然な順序に従って座標を示します。

NEXT_LEFT_EDGE_ID値とNEXT_RIGHT_EDGE_ID値は、それぞれ左と右のフェイスの周囲を反時計回りに図示した場合の、次の有向エッジを示します。PREV_LEFT_EDGE_ID値とPREV_RIGHT_EDGE_ID値は、それぞれ左と右のフェイスの周囲を反時計回りに図示した場合の、前の有向エッジを示します。LEFT_FACE_ID値は正の有向エッジの左にあるフェイスを示し、RIGHT_FACE_ID値は負の有向エッジの左にあるフェイスを示します。数値IDの場合、符号は示されているターゲット・エッジの方向を表します。

図1-6に、エッジ情報表内の様々なID列間の関係を表すノード、エッジおよびフェイスを示します。(図1-6では、太い線はエッジを表し、矢印付きの細い線は各エッジの方向を表します。)

図1-6 ノード、エッジおよびフェイス

表1-2に、図1-6のエッジE4およびE8のエッジ情報表内のID列値を示します。(表1-2では、わかりやすくするために、ID列値をE4やN1などのアルファベット文字で示していますが、実際のID列には数値(指定された各オブジェクトに関連付けられた数値ID)のみが含まれます。)

表1-2 エッジ表のID列値

EDGE_ID

START_NODE_ID

END_NODE_ID

NEXT_LEFT_EDGE_ID

PREV_LEFT_EDGE_ID

NEXT_RIGHT_EDGE_ID

PREV_RIGHT_EDGE_ID

LEFT_FACE_ID

RIGHT_FACE_ID

E4

N1

N2

-E5

E3

E2

-E6

F1

F2

E8

N4

N3

-E8

-E8

E8

E8

F2

F2

次に、図1-6および表1-2について説明します。

- エッジE4の開始ノードはN1で、終了ノードはN2です。エッジE4の左の次のエッジはE5ですが、E5の方向はエッジE4と逆であるため、E4の左の次のエッジは-E5(負のE5)として格納されます。

- エッジE4の左の前のエッジはE3です。E3はエッジE4と同じ方向であるため、エッジE4の左の前のエッジはE3として格納されます。

- 右の次のフェイスは、E4の負の有向エッジを使用して判断します。これは、エッジ方向を逆にして、次の左のエッジと前の左のエッジを取ると考えることができます。この場合、右の次のエッジはE2で、右の前のエッジは-E6 (エッジE6の方向は、エッジE4の負の方向と逆)です。エッジE4の場合、左のフェイスはF1で、右のフェイスはF2です。

- エッジE1およびE7は、エッジE4の左端のエッジでも右端のエッジでもありません。このため、エッジE1およびE7は、エッジE4に関連付けられたエッジ表の行に表示されません。

ノード情報表

トポロジ内のノードに関する情報は、<topology-name>_NODE$表に格納する必要があります。<topology-name>は、SDO_TOPO.CREATE_TOPOLOGYプロシージャへのコールに指定した、そのトポロジの名前です。各ノード情報表には、表1-3に示す列が含まれます。

表1-3 <topology-name>_NODE$表内の列

_NODE$表内の列" title="<topology-name>_NODE$表内の列" width="100%">

列名

データ型

説明

NODE_ID

NUMBER

このノードの一意のID番号です。

EDGE_ID

NUMBER

このノードに関連付けられたエッジ(存在する場合)のID番号(符号付き)です。

FACE_ID

NUMBER

このノードに関連付けられたフェイス(存在する場合)のID番号です。

GEOMETRY

SDO_GEOMETRY

このノードを表すジオメトリ・オブジェクト(点)です。

各ノードでは、EDGE_ID値またはFACE_ID値のいずれかがNULLである必要があります。

- EDGE_ID値がNULLである場合、ノードは孤立ノードです(つまり、フェイス内で孤立しています)。

- FACE_ID値がNULLである場合、ノードは孤立ノードではなく、エッジの開始ノードまたは終了ノードです。

フェイス情報表

トポロジ内のフェイスに関する情報は、<topology-name>_FACE$表に格納する必要があります。<topology-name>は、SDO_TOPO.CREATE_TOPOLOGYプロシージャへのコールに指定した、そのトポロジの名前です。各フェイス情報表には、表1-4に示す列が含まれます。

表1-4 <topology-name>_FACE$表内の列

_FACE$表内の列" title="<topology-name>_FACE$表内の列" width="100%">

列名

データ型

説明

FACE_ID

NUMBER

このフェイスの一意のID番号です。

BOUNDARY_EDGE_ID

NUMBER

このフェイスの境界エッジのID番号です。この番号の符号(キーとして使用する場合は無視されます)は、この境界コンポーネントに使用されている方向を示します(正の番号はエッジの左を表し、負の番号はエッジの右を表します)。

ISLAND_EDGE_ID_LIST

SDO_LIST_TYPE

このフェイス内の孤立エッジ(存在する場合)です。(SDO_LIST_TYPE型の詳細は、「SDO_LIST_TYPE型」を参照してください。)

ISLAND_NODE_ID_LIST

SDO_LIST_TYPE

このフェイス内の孤立ノード(存在する場合)です。(SDO_LIST_TYPE型の詳細は、「SDO_LIST_TYPE型」を参照してください。)

MBR_GEOMETRY

SDO_GEOMETRY

このフェイスを囲む最小境界矩形(MBR)です。(ユニバース・フェイスの場合を除き、これは必須です。)MBRは、最適化された矩形(左下の角と右上の角のみが指定されている矩形)として格納する必要があります。SDO_TOPO.INITIALIZE_METADATAプロシージャによって、この列に空間索引が作成されます。

関係情報表

位相要素を処理すると、各オブジェクトの情報が、Spatial and Graphによって自動的に<topology-name>_RELATION$表に保持され(<topology-name>はトポロジの名前)、この表は、各トポロジに1つ存在します。表内の各行では、トポロジ・ジオメトリが、トポロジ・ジオメトリ・レイヤーおよびトポロジに関して一意に識別されます。各関係情報表には、表1-5に示す列が含まれます。

表1-5 <topology-name>_RELATION$表内の列

_RELATION$表内の列" title="<topology-name>_RELATION$表内の列" width="100%">

列名

データ型

説明

TG_LAYER_ID

NUMBER

トポロジ・ジオメトリが属するトポロジ・ジオメトリ・レイヤーのID番号です。

TG_ID

NUMBER

トポロジ・ジオメトリのID番号です。

TOPO_ID

NUMBER

トポロジ・ジオメトリ・レイヤー階層を含まないトポロジの場合は、トポロジ・ジオメトリ内の位相要素のID番号です。

トポロジ・ジオメトリ・レイヤー階層を含むトポロジの場合は、Oracleで使用するために予約されています。

TOPO_TYPE

NUMBER

トポロジ・ジオメトリ・レイヤー階層を含まないトポロジの場合、1はノード、2はエッジ、3はフェイスを表します。

トポロジ・ジオメトリ・レイヤー階層を含むトポロジの場合は、Oracleで使用するために予約されています。

TOPO_ATTRIBUTE

VARCHAR2

Oracleで使用するために予約されています。

履歴情報表

トポロジの履歴情報表には、他の情報表には記録されない編集操作に関する情報が格納されます。したがって、履歴情報表はトポロジの変更を包括的に記録したものではありません。履歴情報表にノード、エッジまたはフェイスの編集操作の行が含まれるのは、トポロジに1つ以上のフィーチャ表が関連付けられ、さらに次の条件のいずれかに該当する場合のみです。

- 操作の結果として、既存のフェイスまたはエッジが分割される場合。

- 操作の結果として、2つのフェイスまたは2つのエッジがマージされて1つのフェイスまたはエッジが作成される場合。

これらの操作の情報は、Spatial and Graphによって自動的に<topology-name>_HISTORY$表に保持され(<topology-name>はトポロジの名前)、この表は、各トポロジに1つ存在します。1つの編集操作(SDO_TOPO_MAP.ADD_POLYGON_GEOMETRYファンクションの使用など)によって複数の行が追加される場合もありますが、表内の各行は位相要素に対する1つの編集操作を一意に識別します。(トポロジの編集の詳細は、「トポロジの編集」を参照してください。)各履歴情報表には、表1-6に示す列が含まれます。

表1-6 <topology-name>_HISTORY$表内の列

_HISTORY$表内の列" title="<topology-name>_HISTORY$表内の列" width="100%">

列名

データ型

説明

TOPO_TX_ID

NUMBER

SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャへのコールか、JavaメソッドのloadWindowまたはloadTopologyへのコールによって開始されたトランザクションのID番号です。各トランザクションは、複数の編集操作で構成される場合があります。現行の更新可能なTopoMapオブジェクトのトランザクションのID番号を取得するには、SDO_TOPO_MAP.GET_TOPO_TRANSACTION_IDファンクションをコールします。

TOPO_SEQUENCE

NUMBER

トランザクションでの編集操作に割り当てられた順序番号です。

TOPOLOGY

VARCHAR2

編集されるオブジェクトを含むトポロジのIDです。

TOPO_ID

NUMBER

トポロジ・ジオメトリ内の位相要素のID番号です。

TOPO_TYPE

NUMBER

位相要素のタイプです。1はノード、2はエッジ、3はフェイスを表します。

TOPO_OP

VARCHAR2

位相要素に対して実行された編集操作のタイプです。Iは挿入、Dは削除を表します。

PARENT_ID

NUMBER

挿入操作の場合、現行の位相要素の導出元の親位相要素のIDです。削除操作の場合、結果の位相要素のIDです。

次の例を参考にしてください。

- 1つのノードを追加してE2を分割し、エッジE3を生成します。この場合、新しいエッジのTOPO_ID値はE3のID、TOPO_TYPE値は2、PARENT_ID値はE2のID、TOPO_OP値はIになります。

- 1つのノードを削除してエッジE6とE7をマージし、E7のみにします。この場合、TOPO_ID値はE6のID、TOPO_TYPE値は2、PARENT_ID値はE7のID、TOPO_OP値はDになります。

履歴情報表に対する編集操作の影響をより詳細に示すために、テスト・プロシージャを作成し、単純なトポロジに対して各種編集操作を実行し、トポロジの履歴情報表への影響を調査しました。このプロシージャで実行した主な手順は次のとおりです。

1. ユニバース・フェイスを使用して非測地トポロジを作成および初期化し、そのトポロジに線フィーチャ・レイヤーと領域フィーチャ・レイヤーを追加しました。

2. 4つの孤立ノードとこれらの孤立ノードを接続する4つのエッジを追加して、矩形領域を作成しました。これにより、(矩形で構成されている)フェイスが作成されました。また、親がユニバース・フェイスであるこの新しいフェイスの挿入操作に対して履歴情報表に1つの行が追加されました。
次の文に、この挿入によって追加された履歴情報表の行を示します。

SELECT topo_id, topo_type, topo_op, parent_id
FROM hist_test_history$ ORDER BY topo_tx_id, topo_sequence, topology;

TOPO_ID  TOPO_TYPE TOP  PARENT_ID
---------- ---------- --- ----------
1          3 I           -1

1 row selected.

3. 2つのノードとこれらのノードを接続する垂直のエッジを追加して、2つのエッジ(上下のエッジ)とフェイスを分割することによって、矩形のフェイスを(横に並んだ)2つの小さな矩形フェイスに分割します。履歴情報表には、2つの新しいエッジ(新しい各エッジの親は分割された既存のエッジ)のそれぞれの挿入操作および新しいフェイス(親は分割された元の矩形フェイス)の挿入操作に対する3つの行が追加されています。
次の文に、これまでに追加された履歴情報表の行を示します。この手順で追加された行は太字で示しています。

SELECT topo_id, topo_type, topo_op, parent_id
FROM hist_test_history$ ORDER BY topo_tx_id, topo_sequence, topology;

TOPO_ID  TOPO_TYPE TOP  PARENT_ID
---------- ---------- --- ----------
1          3 I           -1
6          2 I            2
7          2 I            4
2          3 I            1

4 rows selected.

4. (既存のノードを使用して)左の小さな矩形フェイスに対角線のエッジを追加し、手順3で追加された垂直のエッジを削除しています。履歴情報表には、エッジを追加した結果として作成された新しいフェイスの挿入操作(新しい各フェイスの親は分割された左の小さな矩形フェイス)と、エッジを削除した際の削除操作(結果として生成されるフェイスはマージされた親フェイスの1つから位相オブジェクトIDを取得)に対する2つの行が追加されています。
次の文に、これまでに追加された履歴情報表の行を示します。この手順で追加された行は太字で示しています。

SELECT topo_id, topo_type, topo_op, parent_id
FROM hist_test_history$ ORDER BY topo_tx_id, topo_sequence, topology;

TOPO_ID  TOPO_TYPE TOP  PARENT_ID
---------- ---------- --- ----------
1          3 I           -1
6          2 I            2
7          2 I            4
2          3 I            1
3          3 I            2
1          3 D            2

6 rows selected.

トポロジ・データ型

トポロジ・データ・モデルに関連付けられる主なデータ型は、トポロジ・ジオメトリを表すSDO_TOPO_GEOMETRYです。SDO_TOPO_GEOMETRY型には、複数のコンストラクタとメンバー・ファンクションが含まれます。この項では、トポロジ・モデルの型、コンストラクタおよびメンバー・ファンクションについて説明します。

SDO_TOPO_GEOMETRY型

トポロジ・ジオメトリの記述は、ユーザーが定義した表のSDO_TOPO_GEOMETRYオブジェクト型の1列に、1行で格納されます。SDO_TOPO_GEOMETRYオブジェクト型の定義は次のとおりです。

CREATE TYPE sdo_topo_geometry AS OBJECT
(tg_type      NUMBER,
tg_id        NUMBER,
tg_layer_id  NUMBER,
topology_id  NUMBER);

SDO_TOPO_GEOMETRY型には、表1-7に示す属性が含まれます。

表1-7 SDO_TOPO_GEOMETRY型の属性

属性

説明

TG_TYPE

トポロジ・ジオメトリのタイプです。1は点または複数の点、2は線ストリングまたは複数の線で構成されるストリング、3はポリゴンまたは複数のポリゴン、4は異種の集合です。

TG_ID

トポロジ・ジオメトリの一意のID番号(Spatial and Graphが生成)です。

TG_LAYER_ID

トポロジ・ジオメトリが属するトポロジ・ジオメトリ・レイヤーのID番号です。(この番号は、Spatial and Graphが生成し、トポロジ・ジオメトリ・レイヤー内で一意です。)

TOPOLOGY_ID

トポロジの一意のID番号(Spatial and Graphが生成)です。

トポロジ内の各トポロジ・ジオメトリは、TG_ID値とTG_LAYER_ID値の組合せによって一意に識別されます。

属性名は、SDO_TOPO_GEOMETRY型のオブジェクトに対する問合せ内で使用できます。例1-3に、「トポロジの例(PL/SQL)」の例1-12で定義するCITY_STREETS表のFEATURE列の各属性を問い合せるSELECT文を示します。

例1-3 問合せ内でのSDO_TOPO_GEOMETRY属性の使用

SELECT s.feature.tg_type FROM city_streets s;
SELECT s.feature.tg_id FROM city_streets s;
SELECT s.feature.tg_layer_id FROM city_streets s;
SELECT s.feature.topology_id FROM city_streets s;

SDO_TOPO_GEOMETRYのコンストラクタ

SDO_TOPO_GEOMETRY型には、トポロジ・ジオメトリ・オブジェクトの挿入および更新のためのコンストラクタが存在します。このコンストラクタは、使用するオブジェクトの種類に応じて、次の2つのタイプに分類されます。

- 最下位レベルの位相要素(ノード、エッジおよびフェイス)を指定するコンストラクタ。これらのコンストラクタには、SDO_TOPO_OBJECT_ARRAY型の属性を1つ以上含め、SDO_TGL_OBJECT_ARRAY型の属性を含めません。

- 子レベルの要素を指定するコンストラクタ。これらのコンストラクタには、SDO_TGL_OBJECT_ARRAY型の属性を1つ以上含め、SDO_TOPO_OBJECT_ARRAY型の属性を含めません。

対象のトポロジにトポロジ・ジオメトリ・レイヤー階層が含まれない場合、または実行する操作が階層内の最下位レベル(レベル0(ゼロ))に影響を及ぼす場合、トポロジ・ジオメトリ・オブジェクトを挿入および更新するには、最下位レベルの位相要素(ノード、エッジおよびフェイス)を指定するコンストラクタを使用する必要があります。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)

対象のトポロジにトポロジ・ジオメトリ・レイヤー階層が含まれ、実行する操作が階層内の最下位レベル以外のレベルに影響を及ぼす場合、トポロジ・ジオメトリ・オブジェクトを挿入および更新するには、2つのタイプのコンストラクタのいずれかまたは両方を使用できます。つまり、挿入または更新されるトポロジ・ジオメトリ・オブジェクトごとに、次のいずれかを使用できます。

- (たとえば、フェイスから地域を作成するために)最下位レベルの位相要素で構成されているトポロジ・ジオメトリ・オブジェクトを挿入および更新するには、少なくとも1つのSDO_TOPO_OBJECT_ARRAY型の属性を含み、SDO_TGL_OBJECT_ARRAY型の属性を含まない形式を使用します。

- (たとえば、区域から地域を作成するために)1つ下のレベルのフィーチャで構成されているトポロジ・ジオメトリ・オブジェクトを挿入および更新するには、少なくとも1つのSDO_TGL_OBJECT_ARRAY型の属性を含み、SDO_TOPO_OBJECT_ARRAY型の属性を含まない形式を使用します。

この項では、使用可能なSDO_TOPO_GEOMETRYのコンストラクタについて説明します。

注意:

型定義(tg_type、tg_id、tg_layer_id、topology_id)と同じ属性を使用する追加のSDO_TOPO_GEOMETRYコンストラクタは、Oracle内部のみで使用します。

挿入操作用のコンストラクタ: 位相要素の指定

SDO_TOPO_GEOMETRY型の次のコンストラクタは、位相要素(フェイス、ノードまたはエッジ)を指定する挿入操作に使用します。トポロジにトポロジ・ジオメトリ・レイヤー階層が含まれない場合、または実行する操作が階層内の最下位レベル(レベル0 (ゼロ))に影響を及ぼす場合は、これらの形式の1つを使用して、新しいトポロジ・ジオメトリ・オブジェクトを作成する必要があります。また、実行する操作が階層内のレベル0 (ゼロ)より高いレベルに影響を及ぼす場合は、これらの形式の1つを使用して新しいトポロジ・ジオメトリ・オブジェクトを作成できます。

SDO_TOPO_GEOMETRY (topology     VARCHAR2,
tg_type      NUMBER,
tg_layer_id  NUMBER,
topo_ids     SDO_TOPO_OBJECT_ARRAY)

SDO_TOPO_GEOMETRY (topology      VARCHAR2,
table_name    VARCHAR2,
column_name   VARCHAR2,
tg_type       NUMBER,
topo_ids      SDO_TOPO_OBJECT_ARRAY)

SDO_TOPO_OBJECT_ARRAY型は、SDO_TOPO_OBJECTオブジェクトのVARRAYとして定義されています。

SDO_TOPO_OBJECT型には、次の2つの属性が含まれます。

(topo_id NUMBER, topo_type NUMBER)

TG_TYPE属性値およびTOPO_IDS属性値は、指定したトポロジの<topology-name>_RELATION$表(「関係情報表」を参照)の値の範囲内である必要があります。

例1-4に、SDO_TOPO_GEOMETRYの2つの形式のコンストラクタの例を示します。各コンストラクタは、「トポロジの例(PL/SQL)」の例1-12で定義するLAND_PARCELS表にトポロジ・ジオメトリを挿入します。

例1-4 SDO_TOPO_OBJECT_ARRAYを含むコンストラクタを使用した挿入

INSERT INTO land_parcels VALUES ('P1', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (3, 3), -- face_id = 3
SDO_TOPO_OBJECT (6, 3))) -- face_id = 6
);

INSERT INTO land_parcels VALUES ('P1A', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
'LAND_PARCELS', -- Table name
'FEATURE', -- Column name
3, -- Topology geometry type (polygon/multipolygon)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (3, 3), -- face_id = 3
SDO_TOPO_OBJECT (6, 3))) -- face_id = 6
);

挿入操作用のコンストラクタ: 下位レベルのフィーチャの指定

SDO_TOPO_GEOMETRY型の次のコンストラクタは、階層の1つ下のレベルのフィーチャを指定する挿入操作に使用します。実行する操作が階層内のレベル0(ゼロ)より高いレベルに影響を及ぼす場合は、これらの形式の1つを使用して、新しいトポロジ・ジオメトリ・オブジェクトを作成できます。

SDO_TOPO_GEOMETRY (topology     VARCHAR2,
tg_type      NUMBER,
tg_layer_id  NUMBER,
topo_ids     SDO_TGL_OBJECT_ARRAY)

SDO_TOPO_GEOMETRY (topology      VARCHAR2,
table_name    VARCHAR2,
column_name   VARCHAR2,
tg_type       NUMBER,
topo_ids      SDO_TGL_OBJECT_ARRAY)

SDO_TGL_OBJECT_ARRAY型は、SDO_TGL_OBJECTオブジェクトのVARRAYとして定義されています。

SDO_TGL_OBJECT型には、次の2つの属性が含まれます。

(tgl_id NUMBER, tg_id NUMBER)

例1-5に、トポロジ・ジオメトリ・レイヤー階層内の区域レベルのフィーチャ表であるBLOCK_GROUPS表に行を挿入するSDO_TOPO_GEOMETRYのコンストラクタを示します。区域レベルは、階層の最下位レベルである土地区画レベルの親レベルです。

例1-5 SDO_TGL_OBJECT_ARRAYを含むコンストラクタを使用した挿入

INSERT INTO block_groups VALUES ('BG1', -- Feature name
SDO_TOPO_GEOMETRY('LAND_USE_HIER',
3, -- Topology geometry type (polygon/multipolygon)
2, -- TG_LAYER_ID for block groups (from ALL_SDO_TOPO_METADATA)
SDO_TGL_OBJECT_ARRAY (
SDO_TGL_OBJECT (1, 1), -- land parcel ID = 1
SDO_TGL_OBJECT (1, 2))) -- land parcel ID = 2
);

更新操作用のコンストラクタ: 位相要素の指定

SDO_TOPO_GEOMETRY型の次のコンストラクタは、位相要素(フェイス、ノードまたはエッジ)を指定する更新操作に使用します。トポロジにトポロジ・ジオメトリ・レイヤー階層が含まれない場合、または実行する操作が階層内の最下位レベル(レベル0 (ゼロ))に影響を及ぼす場合は、これらの形式の1つを使用して、トポロジ・ジオメトリ・オブジェクトを更新する必要があります。また、実行する操作が階層内のレベル0 (ゼロ)より高いレベルに影響を及ぼす場合は、これらの形式の1つを使用してトポロジ・ジオメトリ・オブジェクトを更新できます。

SDO_TOPO_GEOMETRY (topology         VARCHAR2,
tg_type          NUMBER,
tg_layer_id      NUMBER,
add_topo_ids     SDO_TOPO_OBJECT_ARRAY,
delete_topo_ids  SDO_TOPO_OBJECT_ARRAY)

SDO_TOPO_GEOMETRY (topology         VARCHAR2,
table_name       VARCHAR2,
column_name      VARCHAR2,
tg_type          NUMBER,
add_topo_ids     SDO_TOPO_OBJECT_ARRAY,
delete_topo_ids  SDO_TOPO_OBJECT_ARRAY)

たとえば、これらのコンストラクタ形式の1つを使用して、線形フィーチャにエッジを追加したり、不要になったエッジをフィーチャから削除することができます。

SDO_TOPO_OBJECT_ARRAY型の定義、およびTG_TYPE属性値とTOPO_IDS属性値の要件の詳細は、「挿入操作用のコンストラクタ: 位相要素の指定」を参照してください。

ADD_TOPO_IDS属性とDELETE_TOPO_IDS属性の両方に値を指定するか、または一方の属性に値を指定して他方の属性にNULLを指定できます。ただし、ADD_TOPO_IDSとDELETE_TOPO_IDSの両方にNULL値を指定することはできません。

例1-6に、SDO_TOPO_GEOMETRYの2つの形式のコンストラクタの例を示します。各コンストラクタは、「トポロジの例(PL/SQL)」の例1-12で定義するLAND_PARCELS表のCITY_DATAトポロジから2つのフェイスを削除します。

例1-6 SDO_TOPO_OBJECT_ARRAYを含むコンストラクタを使用した更新

UPDATE land_parcels l SET l.feature = SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
NULL, -- No topological elements to be added
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (3, 3), -- face_id = 3
SDO_TOPO_OBJECT (6, 3))) -- face_id = 6
WHERE l.feature_name = 'P1';

UPDATE land_parcels l SET l.feature = SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
'LAND_PARCELS', -- Table name
'FEATURE', -- Column name
3, -- Topology geometry type (polygon/multipolygon)
NULL, -- No topological elements to be added
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (3, 3), -- face_id = 3
SDO_TOPO_OBJECT (6, 3))) -- face_id = 6
WHERE l.feature_name = 'P1A';

更新操作用のコンストラクタ: 下位レベルのフィーチャの指定

SDO_TOPO_GEOMETRY型の次のコンストラクタは、階層の1つ下のレベルのフィーチャを指定する更新操作に使用します。実行する操作が階層内のレベル0(ゼロ)より高いレベルに影響を及ぼす場合は、これらの形式の1つを使用して、トポロジ・ジオメトリ・オブジェクトを更新できます。

SDO_TOPO_GEOMETRY (topology         VARCHAR2,
tg_type          NUMBER,
tg_layer_id      NUMBER,
add_topo_ids     SDO_TGL_OBJECT_ARRAY,
delete_topo_ids  SDO_TGL_OBJECT_ARRAY)

SDO_TOPO_GEOMETRY (topology         VARCHAR2,
table_name       VARCHAR2,
column_name      VARCHAR2,
tg_type          NUMBER,
add_topo_ids     SDO_TGL_OBJECT_ARRAY,
delete_topo_ids  SDO_TGL_OBJECT_ARRAY)

たとえば、これらのコンストラクタ形式の1つを使用して、線形フィーチャにエッジを追加したり、不要になったエッジをフィーチャから削除することができます。

SDO_TGL_OBJECT_ARRAY型の定義、およびその属性値の要件の詳細は、「挿入操作用のコンストラクタ: 下位レベルのフィーチャの指定」を参照してください。

ADD_TOPO_IDS属性とDELETE_TOPO_IDS属性の両方に値を指定するか、または一方の属性に値を指定して他方の属性にNULLを指定できます。ただし、ADD_TOPO_IDSとDELETE_TOPO_IDSの両方にNULL値を指定することはできません。

例1-7に、SDO_TOPO_GEOMETRYの2つの形式のコンストラクタの例を示します。各コンストラクタは、トポロジ・ジオメトリ・レイヤー階層内の区域レベルのフィーチャ表であるBLOCK_GROUPS表内のCITY_DATAトポロジの(同じ定義を持つが、第1の形式ではBG1および第2の形式ではBG1Aという名前の付いた)フィーチャから、ID値が2である土地区域を削除します。区域レベルは、階層の最下位レベルである土地区画レベルの親レベルです。

例1-7 SDO_TGL_OBJECT_ARRAYを含むコンストラクタを使用した更新

UPDATE block_groups b SET b.feature = SDO_TOPO_GEOMETRY(
'LAND_USE_HIER',
3, -- Topology geometry type (polygon/multipolygon)
2, -- TG_LAYER_ID for block groups (from ALL_SDO_TOPO_METADATA)
null, -- No IDs to add
SDO_TGL_OBJECT_ARRAY (
SDO_TGL_OBJECT (1, 2)) -- land parcel ID = 2
)
WHERE b.feature_name = 'BG1';

UPDATE block_groups b SET b.feature = SDO_TOPO_GEOMETRY(
'LAND_USE_HIER',
'BLOCK_GROUPS', -- Feature table
'FEATURE', -- Feature column
3, -- Topology geometry type (polygon/multipolygon)
null, -- No IDs to add
SDO_TGL_OBJECT_ARRAY (
SDO_TGL_OBJECT (1, 2)) -- land parcel ID = 2
)
WHERE b.feature_name = 'BG1A';

GET_GEOMETRYメンバー・ファンクション

SDO_TOPO_GEOMETRY型には、GET_GEOMETRYという1つのメンバー・ファンクションが含まれます。このファンクションを使用して、トポロジ・ジオメトリ・オブジェクトのSDO_GEOMETRYオブジェクトを戻すことができます。

例1-8では、GET_GEOMETRYメンバー・ファンクションを使用して、P1という土地区画に関連付けられたトポロジ・ジオメトリ・オブジェクトのSDO_GEOMETRYオブジェクトを戻します。

例1-8 GET_GEOMETRYメンバー・ファンクション

SELECT l.feature_name, l.feature.get_geometry()
FROM land_parcels l WHERE l.feature_name = 'P1';

FEATURE_NAME
------------------------------
L.FEATURE.GET_GEOMETRY()(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO,
--------------------------------------------------------------------------------
P1
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 3, 1), SDO_ORDINATE_ARRAY(
21, 14, 21, 22, 9, 22, 9, 14, 9, 6, 21, 6, 21, 14))

GET_TGL_OBJECTSメンバー・ファンクション

SDO_TOPO_GEOMETRY型には、GET_TGL_OBJECTSというメンバー・ファンクションが含まれます。このファンクションを使用して、トポロジ・ジオメトリ・レイヤー階層を含むトポロジで階層レベルが0 (ゼロ)より上のジオメトリ・レイヤー内のトポロジ・ジオメトリ・オブジェクトのSDO_TOPO_OBJECT_ARRAYオブジェクトを戻すことができます。(レイヤーの階層レベルが0 (ゼロ)の場合またはトポロジにトポロジ・ジオメトリ・レイヤー階層が含まれていない場合は、このメソッドはNULL値を戻します。)

SDO_TGL_OBJECT_ARRAY型の詳細は、「挿入操作用のコンストラクタ: 下位レベルのフィーチャの指定」を参照してください。

例1-9では、GET_TGL_OBJECTSメンバー・ファンクションを使用して、BG2という名前の区域に関連付けられているトポロジ・ジオメトリ・オブジェクトのSDO_TOPO_OBJECT_ARRAYオブジェクトを戻します。

例1-9 GET_TGL_OBJECTSメンバー・ファンクション

SELECT bg.feature_name, bg.feature.get_tgl_objects()
FROM block_groups bg WHERE bg.feature_name = 'BG2';

FEATURE_NAME
------------------------------
BG.FEATURE.GET_TGL_OBJECTS()(TGL_ID, TG_ID)
--------------------------------------------------------------------------------
BG2
SDO_TGL_OBJECT_ARRAY(SDO_TGL_OBJECT(1, 3), SDO_TGL_OBJECT(1, 4))

GET_TOPO_ELEMENTSメンバー・ファンクション

SDO_TOPO_GEOMETRY型には、GET_TOPO_ELEMENTSという1つのメンバー・ファンクションが含まれます。このファンクションを使用して、トポロジ・ジオメトリ・オブジェクトのSDO_TOPO_OBJECT_ARRAYオブジェクトを戻すことができます。

SDO_TOPO_OBJECT_ARRAY型の詳細は、「挿入操作用のコンストラクタ: 位相要素の指定」を参照してください。

例1-8では、GET_TOPO_ELEMENTSメンバー・ファンクションを使用して、P1という土地区画に関連付けられたトポロジ・ジオメトリ・オブジェクトのSDO_TOPO_OBJECT_ARRAYオブジェクトを戻します。

例1-10 GET_TOPO_ELEMENTSメンバー・ファンクション

SELECT l.feature_name, l.feature.get_topo_elements()
FROM land_parcels l WHERE l.feature_name = 'P1';

FEATURE_NAME
------------------------------
L.FEATURE.GET_TOPO_ELEMENTS()(TOPO_ID, TOPO_TYPE)
--------------------------------------------------------------------------------
P1
SDO_TOPO_OBJECT_ARRAY(SDO_TOPO_OBJECT(3, 3), SDO_TOPO_OBJECT(6, 3))

SDO_LIST_TYPE型

SDO_LIST_TYPE型は、フェイス内の孤立エッジのEDGE_ID値および孤立ノードのNODE_ID値を格納するために使用します。SDO_LIST_TYPE型の定義は次のとおりです。

CREATE TYPE sdo_list_type as VARRAY(2147483647) OF NUMBER;

SDO_EDGE_ARRAY型およびSDO_NUMBER_ARRAY型

SDO_EDGE_ARRAY型は、ノードの移動操作によって影響を受ける、そのノードに接したエッジの座標を指定するために使用します。SDO_EDGE_ARRAY型の定義は次のとおりです。

CREATE TYPE sdo_edge_array as VARRAY(1000000) OF MDSYS.SDO_NUMBER_ARRAY;

SDO_NUMBER_ARRAY型は、Spatial and Graphが配列に使用する汎用型です。SDO_NUMBER_ARRAY型の定義は次のとおりです。

CREATE TYPE sdo_number_array as VARRAY(1048576) OF NUMBER;

トポロジのメタデータ・ビュー

各スキーマ(ユーザー)に対して、xxx_SDO_TOPO_INFOおよびxxx_SDO_TOPO_METADATAという2つの一連のトポロジ・メタデータ・ビューが存在します(xxxはUSERまたはALLです)。これらのビューは、ユーザーに対して読取り専用であり、Spatial and Graphによって作成および管理されます。

xxx_SDO_TOPO_METADATAビューには最も詳細な情報が格納され、各xxx_SDO_TOPO_INFOビューには対応するxxx_SDO_TOPO_METADATAビュー内の情報のサブセットが格納されます。

xxx_SDO_TOPO_INFOビュー

次のビューには、トポロジに関する基本情報が含まれます。

- USER_SDO_TOPO_INFOには、ユーザーが所有するすべてのフィーチャ表のトポロジ情報が含まれます。

- ALL_SDO_TOPO_INFOには、ユーザーがSELECT権限を持つすべてのフィーチャ表に関するトポロジ情報が含まれます。

表1-8に示すとおり、USER_SDO_TOPO_INFOビューとALL_SDO_TOPO_INFOビューには同じ列が含まれます。列をビュー定義の順に示します。

表1-8 xxx_SDO_TOPO_INFOビューの列

列名

データ型

目的

OWNER

VARCHAR2

トポロジの所有者です。

TOPOLOGY

VARCHAR2

トポロジ名です。

TOPOLOGY_ID

NUMBER

トポロジのID番号です。

TOLERANCE

NUMBER

トポロジ内のトポロジ・ジオメトリに関連付けられた許容差を指定します。(許容差については、「トポロジ・データ・モデルの許容差」を参照してください。)

SRID

NUMBER

トポロジ内のすべてのトポロジ・ジオメトリ・レイヤーに関連付けられた座標系(空間参照システム)です。座標系が関連付けられていない場合はNULLです。座標系が関連付けられている場合、MDSYS.CS_SRS表(『Oracle Spatial and Graph開発者ガイド』を参照)のSRID列の値が含まれます。

TABLE_SCHEMA

VARCHAR2

トポロジ・ジオメトリ・レイヤー列を含む表を所有するスキーマの名前です。

TABLE_NAME

VARCHAR2

トポロジ・ジオメトリ・レイヤー列を含む表の名前です。

COLUMN_NAME

VARCHAR2

トポロジ・ジオメトリ・レイヤー・データを含む列の名前です。

TG_LAYER_ID

NUMBER

トポロジ・ジオメトリ・レイヤーのID番号です。

TG_LAYER_TYPE

VARCHAR2

POINT、LINE、CURVE、POLYGONまたはCOLLECTIONのいずれかです。(LINEとCURVEの意味は同じです。)

TG_LAYER_LEVEL

NUMBER

このトポロジ・ジオメトリ・レイヤーの階層レベル番号です。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)

CHILD_LAYER_ID

NUMBER

トポロジ・ジオメトリ・レイヤー階層内のこのレイヤーの子レイヤーであるトポロジ・ジオメトリ・レイヤーのID番号です。このレイヤーに子レイヤーがない場合、またはトポロジにトポロジ・ジオメトリ・レイヤー階層が含まれない場合、NULLです。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)

DIGITS_RIGHT_OF_DECIMAL

NUMBER

既存のトポロジにフィーチャを追加する際に、任意の座標位置を表すために小数点の右側で使用できる桁数です。追加されるすべてのフィーチャ(Java APIまたは同等のPL/SQLサブプログラムでaddLinearGeometryメソッド、addPolygonGeometryメソッドまたはaddPointGeometryメソッドへの引数として渡されるフィーチャ)は、自動的にこの小数点の右側の桁数に切り捨てられます。デフォルトは16です。

xxx_SDO_TOPO_METADATAビュー

次のビューには、トポロジに関する詳細情報が含まれます。

- USER_SDO_TOPO_METADATAには、ユーザーが所有するすべての表のトポロジ情報が含まれます。

- ALL_SDO_TOPO_METADATAには、ユーザーがSELECT権限を持つすべての表に関するトポロジ情報が含まれます。

表1-9に示すとおり、USER_SDO_TOPO_METADATAビューとALL_SDO_TOPO_METADATAビューには同じ列が含まれます。列をビュー定義の順に示します。

表1-9 xxx_SDO_TOPO_METADATAビューの列

列名

データ型

目的

OWNER

VARCHAR2

トポロジの所有者です。

TOPOLOGY

VARCHAR2

トポロジ名です。

TOPOLOGY_ID

NUMBER

トポロジのID番号です。

TOLERANCE

NUMBER

トポロジ内のトポロジ・ジオメトリに関連付けられた許容差を指定します。(許容差については、「トポロジ・データ・モデルの許容差」を参照してください。)

SRID

NUMBER

トポロジ内のすべてのトポロジ・ジオメトリ・レイヤーに関連付けられた座標系(空間参照システム)です。座標系が関連付けられていない場合はNULLです。座標系が関連付けられている場合、MDSYS.CS_SRS表(『Oracle Spatial and Graph開発者ガイド』を参照)のSRID列の値が含まれます。

TABLE_SCHEMA

VARCHAR2

トポロジ・ジオメトリ・レイヤー列を含む表を所有するスキーマの名前です。

TABLE_NAME

VARCHAR2

トポロジ・ジオメトリ・レイヤー列を含む表の名前です。

COLUMN_NAME

VARCHAR2

トポロジ・ジオメトリ・レイヤー・データを含む列の名前です。

TG_LAYER_ID

NUMBER

トポロジ・ジオメトリ・レイヤーのID番号です。

TG_LAYER_TYPE

VARCHAR2

POINT、LINE、CURVE、POLYGONまたはCOLLECTIONのいずれかです。(LINEとCURVEの意味は同じです。)

TG_LAYER_LEVEL

NUMBER

このトポロジ・ジオメトリ・レイヤーの階層レベル番号です。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)

CHILD_LAYER_ID

NUMBER

トポロジ・ジオメトリ・レイヤー階層内のこのレイヤーの子レイヤーであるトポロジ・ジオメトリ・レイヤーのID番号です。このレイヤーに子レイヤーがない場合、またはトポロジにジオメトリ・レイヤー階層が含まれない場合、NULLです。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)

NODE_SEQUENCE

VARCHAR2

使用可能な次のノードID番号を含む順序の名前です。

EDGE_SEQUENCE

VARCHAR2

使用可能な次のエッジID番号を含む順序の名前です。

FACE_SEQUENCE

VARCHAR2

使用可能な次のフェイスID番号を含む順序の名前です。

TG_SEQUENCE

VARCHAR2

使用可能な次のトポロジ・ジオメトリID番号を含む順序の名前です。

DIGITS_RIGHT_OF_DECIMAL

NUMBER

既存のトポロジにフィーチャを追加する際に、任意の座標位置を表すために小数点の右側で使用できる桁数です。追加されるすべてのフィーチャ(Java APIまたは同等のPL/SQLサブプログラムでaddLinearGeometryメソッド、addPolygonGeometryメソッドまたはaddPointGeometryメソッドへの引数として渡されるフィーチャ)は、自動的にこの小数点の右側の桁数に切り捨てられます。デフォルトは16です。

トポロジのApplication Program Interface

トポロジ・データ・モデルのApplication Program Interface (API)は、次のもので構成されます。

- SDO_TOPOパッケージ(「SDO_TOPOパッケージ・サブプログラム」を参照)およびSDO_TOPO_MAPパッケージ(「SDO_TOPO_MAPパッケージ・サブプログラム」を参照)に含まれるPL/SQLファンクションおよびプロシージャ

- PL/SQLトポロジ演算子(「トポロジ演算子」を参照)

- Java API (「トポロジ・データ・モデルのJavaインタフェース」を参照)

トポロジ演算子

トポロジ・データ・モデルPL/SQL APIを使用して、次を除くOracle Spatial and Graphの演算子を使用できます。

- SDO_RELATE(ただし、maskパラメータを使用しないSDO_RELATEの簡易演算子は使用できます)

- SDO_NN

- SDO_NN_DISTANCE

- SDO_WITHIN_DISTANCE

トポロジ・データ・モデルで空間演算子を使用するには、Spatialの演算子の使用方法およびリファレンス情報(『Oracle Spatial and Graph開発者ガイド』を参照)を理解しておく必要があります。この項では、トポロジでの空間演算子の使用に適用される追加情報または相違点についてのみ説明します。この項で特に指定されていないかぎり、『Oracle Spatial and Graph開発者ガイド』に記載されている演算子関連の情報は、トポロジ・データで演算子を使用する場合に適用されます。

トポロジで空間演算子を使用する場合、最初の2つのパラメータの形式には次のいずれかを使用できます。

- 2つのトポロジ・ジオメトリ・オブジェクト(SDO_TOPO_GEOMETRY型)
たとえば、次の文は、P3という名前の土地区画フィーチャと相互作用するすべての通りを検出します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを使用しています。)

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_ANYINTERACT (c.feature, l.feature) = 'TRUE';

FEATURE_NAME
------------------------------
R1

- 第1のパラメータとしてのトポロジ・ジオメトリ・オブジェクト(SDO_TOPO_GEOMETRY型)および第2のパラメータとしての空間ジオメトリ(SDO_GEOMETRY型)
たとえば、次の文は、P3という名前の土地区画フィーチャの境界と同じポリゴンになったジオメトリ・オブジェクトと相互作用するすべての通りを検出します。(この例では、「空間ジオメトリから作成したトポロジの使用」の定義およびデータを使用しています。)

SELECT c.feature_name FROM city_streets c
WHERE SDO_ANYINTERACT (c.feature,
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(35,6, 47,6, 47,14, 47,22, 35,22, 35,14, 35,6))) = 'TRUE';

FEATURE_NAME
------------------------------
R1

- 第1のパラメータとしてのトポロジ・ジオメトリ・オブジェクト(SDO_TOPO_GEOMETRY型)および第2のパラメータとしてのトポロジ・オブジェクト配列オブジェクト(SDO_TOPO_OBJECT_ARRAY型)
たとえば、次の文は、P3という名前の土地区画フィーチャと同じになったSDO_TOPO_OBJECT_ARRAYオブジェクトと相互作用するすべての通りを検出します。(この例では、「空間ジオメトリから作成したトポロジの使用」の定義およびデータを使用しています。)

SELECT c.feature_name FROM city_streets c WHERE
SDO_ANYINTERACT (c.feature,
SDO_TOPO_OBJECT_ARRAY (SDO_TOPO_OBJECT (5, 3), SDO_TOPO_OBJECT (8, 3)))
= 'TRUE';

FEATURE_NAME
------------------------------
R1

例1-11では、通りのフィーチャとP3という名前の土地区画との特別な関係をチェックする、別のトポロジ演算子を示しています。最初の文はSDO_FILTER演算子を示しています。残りの文は、演算子名にマスクが含まれているSDO_RELATEの簡易演算子を示しています。この例の簡易演算子では、SDO_ANYINTERACT、SDO_OVERLAPBDYINTERSECTおよびSDO_OVERLAPSのみが、結果として生成されるフィーチャ・データを戻します。(「フィーチャ」の図1-3が示すように、P3という名前の土地区画フィーチャと相互作用する唯一の通りはR1です。)例1-11のすべての文では、最初の2つのパラメータがトポロジ・ジオメトリ・オブジェクトである形式を使用しています。

例1-11 トポロジ演算子

-- SDO_FILTER
SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_FILTER (c.feature, l.feature) = 'TRUE';

FEATURE_NAME
------------------------------
R1

-- SDO_RELATE convenience operators
SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_ANYINTERACT (c.feature, l.feature) = 'TRUE';

FEATURE_NAME
------------------------------
R1

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_CONTAINS (c.feature, l.feature) = 'TRUE';

no rows selected

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_COVEREDBY (c.feature, l.feature) = 'TRUE';

no rows selected

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_COVERS (c.feature, l.feature) = 'TRUE';

no rows selected

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_EQUAL (c.feature, l.feature) = 'TRUE';

no rows selected

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_INSIDE (c.feature, l.feature) = 'TRUE';

no rows selected

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_ON (c.feature, l.feature) = 'TRUE';

no rows selected

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_OVERLAPBDYINTERSECT (c.feature, l.feature) = 'TRUE';

FEATURE_NAME
------------------------------
R1

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_OVERLAPBDYDISJOINT (c.feature, l.feature) = 'TRUE';

no rows selected

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_OVERLAPS (c.feature, l.feature) = 'TRUE';

FEATURE_NAME
------------------------------
R1

SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_TOUCH (c.feature, l.feature) = 'TRUE';

no rows selected

「SDO_TOPOパッケージ・サブプログラム」のSDO_TOPO.RELATEファンクションの「使用上の注意」も参照してください。

トポロジ・データ・モデルのJavaインタフェース

トポロジ・データ・モデルのJavaクライアント・インタフェースは、次のクラスで構成されます。

- TopoMap: エッジ、ノードおよびフェイスを格納するクラスです。キャッシュと基礎となるデータベース表の両方でトポロジの一貫性を保持しながら要素を追加および削除するためのメソッドを提供します。

- Edge: エッジ用のクラスです。

- Face: フェイス用のクラスです。

- Node: ノード用のクラスです。

- Point2DD: 点用のクラスです。

- CompGeom: 静的な計算ジオメトリのメソッド用クラスです。

- InvalidTopoOperationException: 無効なトポロジ操作の場合の例外用のクラスです。

- TopoValidationException: トポロジの検証が正常に実行されなかった場合の例外用のクラスです。

- TopoEntityNotFoundException: エンティティが検出されなかった場合の例外用のクラスです。

- TopoDataException: 無効な入力の場合の例外用のクラスです。

トポロジ・データ・モデル・クラスの詳細なリファレンス情報、およびJava APIの使用方法については、『Oracle Spatial and Graph Java API Reference』のJavadoc生成のAPIドキュメントを参照してください。

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

トポロジ・データのエクスポートおよびインポート

あるデータベースからトポロジをエクスポートし、そのトポロジを別のデータベースに同じ名前、構造およびデータを持つ新しいトポロジとしてインポートできます。ただし、ターゲット・データベースには、エクスポートされるトポロジと同じ名前を持つトポロジが存在していないことが前提となります。あるデータベースからトポロジ・データをエクスポートし、そのデータを別のデータベースにインポートするには、この項に示す手順を実行します。

注意:

この手順は、トポロジ・データがトランスポータブル表領域を使用して転送されるかどうかに関係なく必要です。(トランスポータブル表領域および表領域を別のデータベースに転送する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。)

エクスポートするトポロジ・データを格納しているデータベースで、次の手順を実行します。

1. トポロジの所有者としてデータベースに接続します。

2. SDO_TOPO.PREPARE_FOR_EXPORTプロシージャ(「SDO_TOPOパッケージ・サブプログラム」を参照)を実行し、<topology-name>_EXP$という形式の名前を使用してトポロジのエクスポート情報表を作成します。(この表には、USER_SDO_TOPO_INFOビューおよびALL_SDO_TOPO_INFOビューと同じ列が含まれます。これらの列の詳細は、「xxx_SDO_TOPO_INFOビュー」の表1-8を参照してください。
たとえば、エクスポート用にサンプル・トポロジのCITY_DATAを用意すると、CITY_DATA_EXP$表が作成されます。

3. フィーチャ表および<topology-name>_EDGE$表、<topology-name>_FACE$表、<topology-name>_HISTORY$表、<topology-name>_NODE$表、<topology-name>_RELATION$表、<topology-name>_EXP$表など、トポロジに関連したすべての表をエクスポートします。フィーチャ表の名前(存在する場合)はトポロジ・メタデータに格納されます。
これによって、.dmpの拡張子を持つファイル(city_data.dmpなど)が作成されます。

トポロジ・データをインポートするデータベースでは、次の手順を実行します。

1. ターゲット・データベース(ソース・データベースからエクスポートされるトポロジと同じ名前、構造およびデータを持つトポロジを作成するデータベース)に接続します。作成されるトポロジを所有するスキーマのユーザーとして接続します。

2. ターゲット・データベースに、.dmpファイルのトポロジと同じ名前を持つトポロジが格納されていないことを確認します。

3. トポロジ・データのエクスポート時に作成した.dmpファイルから表をインポートします。indexes=Nオプションを指定します。

4. ソース・データベース内のトポロジに使用したスキーマとは別のスキーマにトポロジ表をインポートした場合は、<topology-name>_EXP$表内のすべての行でOWNER列とTABLE_SCHEMA列の値を更新して、現在(ターゲット)のデータベースの表所有者とスキーマ名を反映します。

5. SDO_TOPO.INITIALIZE_AFTER_IMPORTプロシージャを実行します。このプロシージャは、必要に応じてトポロジの作成および他の操作を行い、トポロジを使用できるようにします。

複数のスキーマが関係している場合のトポロジの使用方法および編集方法

この項では、複数のデータベース・ユーザー(スキーマ)が関係する場合のトポロジの使用および編集に関する要件とガイドラインを説明します。

複数のスキーマが関係している場合のトポロジの使用方法

次の注意事項は、あるユーザーがトポロジを所有し、別のユーザーがトポロジ・ジオメトリ・レイヤー表を所有している場合に適用されます。これらの注意事項では、ユーザーAがCITY_DATAトポロジを所有し、ユーザーBがCITY_STREETSトポロジ・ジオメトリ・レイヤー表を所有していると想定しています。

- トポロジの所有者はトポロジを作成し、メタデータを初期化する必要があります。この例では、ユーザーAがこれらの操作を行う必要があります。

- トポロジに対してレイヤーを追加または削除できるのは、トポロジの所有者のみです。したがって、別のユーザーが所有する表をトポロジに追加する場合、またはこのような表をトポロジから削除する場合は、表名をスキーマ名で修飾する必要があります。たとえば、ユーザーAが、ユーザーBの所有するCITY_STREETS表をCITY_DATAトポロジに追加する場合は、次の文を使用します。

EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'B.CITY_STREETS', 'FEATURE', 'LINE');

ユーザーAが、ユーザーBの所有するCITY_STREETS表をCITY_DATAトポロジから削除する場合は、次の文を使用します。

EXECUTE SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER('CITY_DATA', 'B.CITY_STREETS', 'FEATURE');

- トポロジの所有者は、トポロジ・ジオメトリ・レイヤー表の所有者に、ノード、エッジおよびフェイスの情報表に対するSELECTまたはREAD権限を付与する必要があります。たとえば、ユーザーAは、CITY_DATA_NODE$表、CITY_DATA_EDGE$表およびCITY_DATA_FACE$表に対するSELECT権限をユーザーBに付与する必要があります。

- トポロジ・ジオメトリ・レイヤー表の所有者は、その表に対するSELECT権限およびINDEX権限をトポロジの所有者に付与する必要があります。たとえば、ユーザーBは、CITY_STREETS表に対するSELECT権限およびINDEX権限をユーザーAに付与する必要があります。
また、トポロジ・ジオメトリ・レイヤー表の所有者は、その表にアクセスする必要のある他のユーザーに適切な権限を付与する必要があります。読取り専用アクセスの場合は、表に対するSELECT権限をユーザーに付与し、読取り/書込みアクセスの場合には、INSERT権限、SELECT権限およびUPDATE権限を付与します。

複数のスキーマが関係している場合のトポロジの編集方法

次の注意事項は、あるユーザーがトポロジを所有し、別のユーザーがそのトポロジを編集する場合に適用されます。これらの注意事項では、ユーザーAがCITY_DATAトポロジを所有し、ユーザーBがそのトポロジを編集すると想定しています。

- トポロジの所有者はトポロジを編集するユーザーに、ノード、エッジ、フェイスおよび関係の情報表に対するINSERT権限、SELECT権限およびUPDATE権限を付与する必要があります。また、トポロジのプリミティブのID番号の生成に使用するノード、エッジおよびフェイスの順序に対するSELECT権限も付与する必要があります。たとえば、ユーザーＡは、次の権限をユーザーBに付与します。これらの権限では、表名は$で終わり、順序名は_Sで終わります。

GRANT insert,select,update ON city_data_node$ TO b;
GRANT insert,select,update ON city_data_edge$ TO b;
GRANT insert,select,update ON city_data_face$ TO b;
GRANT insert,select,update ON city_data_relation$ TO b;
GRANT select ON city_data_node_s TO b;
GRANT select ON city_data_edge_s TO b;
GRANT select ON city_data_face_s TO b;

- トポロジを所有しないユーザーがそのトポロジを編集する場合、所有者のスキーマ名は、入力パラメータとしてトポロジ名を受け入れるファンクションおよびプロシージャでトポロジ名を使用して指定する必要があります。たとえば、ユーザーBはトポロジを単にCITY_DATAとしてではなく、A.CITY_DATAとして指定する必要があります。

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

サポートされないファンクション索引

SDO_TOPO_GEOMETRY型の列には、ファンクション索引を作成できません。(ファンクション索引の詳細は、『Oracle Database開発ガイド』および『Oracle Database管理者ガイド』を参照してください。)

トポロジの例(PL/SQL)

この項では、トポロジ・データ・モデル操作を実行する簡単なPL/SQLの例を示します。この例では、この章で説明した概念を示しています。また、「SDO_TOPOパッケージ・サブプログラム」と「SDO_TOPO_MAPパッケージ・サブプログラム」に示すSDO_TOPOファンクションおよびプロシージャとSDO_TOPO_MAPファンクションおよびプロシージャ、さらにSDO_ANYINTERACTトポロジ演算子(「トポロジ演算子」を参照)を使用しています。

いずれの例も、「トポロジ・データ・モデルの概念」の図1-1に示す「都市データ」トポロジと、「フィーチャ」の図1-3に示すフィーチャに基づいています。ただし、作成されたトポロジは同一ではなく、これは、Spatial and Graphのジオメトリから作成されたトポロジ(例1-13)には、トポロジ・データ(例1-12)から作成されたトポロジに対して定義されているエッジ、ノードおよびフェイスがすべて含まれているわけではないためです。

トポロジ・データから作成したトポロジ

例1-12では、エッジ、ノードおよびフェイスの各データから作成したトポロジを使用します。

例1-12 トポロジ・データから作成したトポロジ

------------------------------
-- Main steps for using the Topology Data Model with a topology
-- built from edge, node, and face data
------------------------------
-- 1. Create a topology.
-- 2. Load (normally bulk-load) topology data (node, edge, and face tables).
-- 3. Create feature tables.
-- 4. Associate feature tables with the topology.
-- 5. Initialize topology metadata.
-- 6. Load feature tables using the SDO_TOPO_GEOMETRY constructor.
-- 7. Query the data.
-- 8. Optionally, edit data using the PL/SQL or Java API.

-- 1. Create the topology. (Null SRID in this example.)
EXECUTE SDO_TOPO.CREATE_TOPOLOGY('CITY_DATA', 0.00005);

-- 2. Load topology data (node, edge, and face tables).
--  Use INSERT statements here instead of a bulk-load utility.

-- 2A. Insert data into <topology_name>_EDGE$ table.

-- E1
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(1, 1, 1, 1, 1, -1, -1, 1, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(8,30, 16,30, 16,38, 3,38, 3,30, 8,30)));
-- E2
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(2, 2, 2, 3, -3, -2, -2, 2, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(25,30, 31,30, 31,40, 17,40, 17,30, 25,30)));
-- E3
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(3, 2, 3, -3, 2, 2, 3, 2, 2,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(25,30, 25,35)));
-- E4
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(4, 5, 6, -5, -4, 4, 5, -1, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(36,38, 38,35, 41,34, 42,33, 45,32, 47,28, 50,28, 52,32,
57,33)));
-- E5
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(5, 7, 6, -4, -5, 5, 4, -1, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(41,40, 45,40, 47,42, 62,41, 61,38, 59,39, 57,36,
57,33)));
-- E6
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(6, 16, 17, 7, 21, -21, 19, -1, 3,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,22, 21,22)));
-- E7
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(7, 17, 18, 8, 6, -19, 17, -1, 4,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(21,22, 35,22)));
-- E8
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(8, 18, 19, -15, 7, -17, 15, -1, 5,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(35,22, 47,22)));
-- E9
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(9, 15, 14, 19, -21, -22, 20, 3, 6,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,14, 21,14)));
-- E10
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(10, 13, 14, -20, 18, 17, -19, 7, 4,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(35,14, 21,14)));
-- E11
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(11, 13, 12, 15, -17, -18, 16, 5, 8,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(35,14, 47,14)));
-- E12
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(12, 8, 9, 20, -22, 22, -13, 6, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,6, 21,6)));
-- E13
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(13, 9, 10, 18, -20, -12, -14, 7, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(21,6, 35,6)));
-- E14
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(14, 10, 11, 16, -18, -13, -16, 8, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(35,6, 47,6)));
-- E15
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(15, 12, 19, -8, 11, -16, 8, 5, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(47,14, 47,22)));
-- E16
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(16, 11, 12, -11, 14, -14, -15, 8, -1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(47,6, 47,14)));
-- E17
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(17, 13, 18, -7, -10, 11, -8, 4, 5,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(35,14, 35,22)));
-- E18
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(18, 10, 13, 10, 13, 14, -11, 7, 8,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(35,6, 35,14)));
-- E19
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(19, 14, 17, -6, 9, -10, -7, 3, 4,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(21,14, 21,22)));
-- E20
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(20, 9, 14, -9, 12, 13, 10, 6, 7,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(21,6, 21,14)));
-- E21
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(21, 15, 16, 6, 22, 9, -6, -1, 3,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,14, 9,22)));
-- E22
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(22, 8, 15, 21, -12, 12, -9, -1, 6,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,6, 9,14)));
-- E25
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(25, 21, 22, -25, -25, 25, 25, 1, 1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,35, 13,35)));
-- E26
INSERT INTO city_data_edge$ (edge_id, start_node_id, end_node_id,
next_left_edge_id, prev_left_edge_id, next_right_edge_id,
prev_right_edge_id, left_face_id, right_face_id, geometry)
VALUES(26, 20, 20, 26, 26, -26, -26, 9, 1,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(4,31, 7,31, 7,34, 4,34, 4,31)));

-- 2B. Insert data into <topology_name>_NODE$ table.

-- N1
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(1, 1, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8,30,NULL), NULL, NULL));
-- N2
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(2, 2, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(25,30,NULL), NULL, NULL));
-- N3
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(3, -3, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(25,35,NULL), NULL, NULL));
-- N4
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(4, NULL, 2,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(20,37,NULL), NULL, NULL));
-- N5
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(5, 4, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(36,38,NULL), NULL, NULL));
-- N6
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(6, -4, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(57,33,NULL), NULL, NULL));
-- N7
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(7, 5, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(41,40,NULL), NULL, NULL));
-- N8
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(8, 12, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(9,6,NULL), NULL, NULL));
-- N9
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(9, 20, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(21,6,NULL), NULL, NULL));
-- N10
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(10, 18, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(35,6,NULL), NULL, NULL));
-- N11
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(11, -14, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(47,6,NULL), NULL, NULL));
-- N12
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(12, 15, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(47,14,NULL), NULL, NULL));
-- N13
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(13, 17, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(35,14,NULL), NULL, NULL));
-- N14
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(14, 19, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(21,14,NULL), NULL, NULL));
-- N15
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(15, 21, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(9,14,NULL), NULL, NULL));
-- N16
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(16, 6, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(9,22,NULL), NULL, NULL));
-- N17
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(17, 7, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(21,22,NULL), NULL, NULL));
-- N18
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(18, 8, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(35,22,NULL), NULL, NULL));
-- N19
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(19, -15, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(47,22,NULL), NULL, NULL));
-- N20
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(20, 26, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(4,31,NULL), NULL, NULL));
-- N21
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(21, 25, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(9,35,NULL), NULL, NULL));
-- N22
INSERT INTO city_data_node$ (node_id, edge_id, face_id, geometry)
VALUES(22, -25, NULL,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(13,35,NULL), NULL, NULL));

-- 2C. Insert data into <topology_name>_FACE$ table.

-- F0 (id = -1, not 0)
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(-1, NULL, SDO_LIST_TYPE(-1, -2, 4, 6),
SDO_LIST_TYPE(), NULL);
-- F1
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(1, 1, SDO_LIST_TYPE(25, -26), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(3,30, 15,38)));
-- F2
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(2, 2, SDO_LIST_TYPE(), SDO_LIST_TYPE(4),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(17,30, 31,40)));
-- F3
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(3, 19, SDO_LIST_TYPE(), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(9,14, 21,22)));
-- F4
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(4, 17, SDO_LIST_TYPE(), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(21,14, 35,22)));
-- F5
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(5, 15, SDO_LIST_TYPE(), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(35,14, 47,22)));
-- F6
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(6, 20, SDO_LIST_TYPE(), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(9,6, 21,14)));
-- F7
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(7, 10, SDO_LIST_TYPE(), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(21,6, 35,14)));
-- F8
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(8, 16, SDO_LIST_TYPE(), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(35,6, 47,14)));
-- F9
INSERT INTO city_data_face$ (face_id, boundary_edge_id,
island_edge_id_list, island_node_id_list, mbr_geometry)
VALUES(9,26,SDO_LIST_TYPE(), SDO_LIST_TYPE(),
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,31, 7,34)));

-- 3. Create feature tables.

CREATE TABLE land_parcels ( -- Land parcels (selected faces)
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE city_streets ( -- City streets (selected edges)
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE traffic_signs ( -- Traffic signs (selected nodes)
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

-- 4. Associate feature tables with the topology.
--    Add the three topology geometry layers to the CITY_DATA topology.
--    Any order is OK.

EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'LAND_PARCELS','FEATURE', 'POLYGON');
EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'TRAFFIC_SIGNS','FEATURE', 'POINT');
EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'CITY_STREETS', 'FEATURE','LINE');

--  As a result, Spatial and Graph generates a unique TG_LAYER_ID for each layer in
--  the topology metadata (USER/ALL_SDO_TOPO_METADATA).

-- 5. Initialize topology metadata.
EXECUTE SDO_TOPO.INITIALIZE_METADATA('CITY_DATA');

-- 6. Load feature tables using the SDO_TOPO_GEOMETRY constructor.

-- Each topology feature can consist of one or more objects (face, edge, node)
-- of an appropriate type. For example, a land parcel can consist of one face,
-- or two or more faces, as specified in the SDO_TOPO_OBJECT_ARRAY.

-- There are typically fewer features than there are faces, nodes, and edges.
-- In this example, the only features are these:
-- Area features (land parcels): P1, P2, P3, P4, P5
-- Point features (traffic signs): S1, S2, S3, S4
-- Linear features (roads/streets): R1, R2, R3, R4

-- 6A. Load LAND_PARCELS table.

-- P1
INSERT INTO land_parcels VALUES ('P1', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (3, 3), -- face_id = 3
SDO_TOPO_OBJECT (6, 3))) -- face_id = 6
);
-- P2
INSERT INTO land_parcels VALUES ('P2', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (4, 3), -- face_id = 4
SDO_TOPO_OBJECT (7, 3))) -- face_id = 7
);
-- P3
INSERT INTO land_parcels VALUES ('P3', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (5, 3), -- face_id = 5
SDO_TOPO_OBJECT (8, 3))) -- face_id = 8
);
-- P4
INSERT INTO land_parcels VALUES ('P4', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (2, 3))) -- face_id = 2
);
-- P5 (Includes F1, but not F9.)
INSERT INTO land_parcels VALUES ('P5', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
1, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (1, 3))) -- face_id = 1
);

-- 6B. Load TRAFFIC_SIGNS table.

-- S1
INSERT INTO traffic_signs VALUES ('S1', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
1, -- Topology geometry type (point)
2, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (14, 1))) -- node_id = 14
);
-- S2
INSERT INTO traffic_signs VALUES ('S2', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
1, -- Topology geometry type (point)
2, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (13, 1))) -- node_id = 13
);
-- S3
INSERT INTO traffic_signs VALUES ('S3', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
1, -- Topology geometry type (point)
2, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (6, 1))) -- node_id = 6
);
-- S4
INSERT INTO traffic_signs VALUES ('S4', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
1, -- Topology geometry type (point)
2, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (4, 1))) -- node_id = 4
);

-- 6C. Load CITY_STREETS table.
-- (Note: "R" in feature names is for "Road", because "S" is used for signs.)

-- R1
INSERT INTO city_streets VALUES ('R1', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
2, -- Topology geometry type (line string)
3, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (9, 2),
SDO_TOPO_OBJECT (-10, 2),
SDO_TOPO_OBJECT (11, 2))) -- edge_ids = 9, -10, 11
);
-- R2
INSERT INTO city_streets VALUES ('R2', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
2, -- Topology geometry type (line string)
3, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (4, 2),
SDO_TOPO_OBJECT (-5, 2))) -- edge_ids = 4, -5
);
-- R3
INSERT INTO city_streets VALUES ('R3', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
2, -- Topology geometry type (line string)
3, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (25, 2))) -- edge_id = 25
);
-- R4
INSERT INTO city_streets VALUES ('R4', -- Feature name
SDO_TOPO_GEOMETRY(
'CITY_DATA', -- Topology name
2, -- Topology geometry type (line string)
3, -- TG_LAYER_ID for this topology (from ALL_SDO_TOPO_METADATA)
SDO_TOPO_OBJECT_ARRAY (
SDO_TOPO_OBJECT (3, 2))) -- edge_id = 3
);

-- 7. Query the data.

SELECT a.feature_name, a.feature.tg_id, a.feature.get_geometry()
FROM land_parcels a;

/* Window is city_streets */
SELECT  a.feature_name, b.feature_name
FROM city_streets b,
land_parcels a
WHERE  b.feature_name like 'R%' AND
sdo_anyinteract(a.feature, b.feature) = 'TRUE'
ORDER BY b.feature_name, a.feature_name;

-- Find all streets that have any interaction with land parcel P3.
-- (Should return only R1.)
SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_ANYINTERACT (c.feature, l.feature) = 'TRUE';

-- Find all land parcels that have any interaction with traffic sign S1.
-- (Should return P1 and P2.)
SELECT l.feature_name FROM land_parcels l, traffic_signs t
WHERE t.feature_name = 'S1' AND
SDO_ANYINTERACT (l.feature, t.feature) = 'TRUE';

-- Get the geometry for land parcel P1.
SELECT l.feature_name, l.feature.get_geometry()
FROM land_parcels l WHERE l.feature_name = 'P1';

-- Get the boundary of face with face_id 3.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 3) FROM DUAL;

-- Get the topological elements for land parcel P2.
-- CITY_DATA layer, land parcels (tg_ layer_id = 1), parcel P2 (tg_id = 2)
SELECT SDO_TOPO.GET_TOPO_OBJECTS('CITY_DATA', 1, 2) FROM DUAL;

空間ジオメトリから作成したトポロジ

例1-13では、Oracle Spatial and Graphのジオメトリ・データから作成したトポロジを使用します。

例1-13 空間ジオメトリから作成したトポロジ

------------------------------
-- Main steps for using the Topology Data Model with a topology
-- built from Spatial and Graph geometry data
------------------------------
-- 1. Create the topology.
-- 2. Insert the universe face (F0). (id = -1, not 0)
-- 3. Create feature tables.
-- 4. Associate feature tables with the topology.
-- 5. Initialize topology metadata.
-- 6. Create a TopoMap object and load the whole topology into
--     cache for updating.
-- 7. Load feature tables, inserting data from the spatial tables and
--     using SDO_TOPO_MAP.CREATE_FEATURE.
-- 8. Query the data.
-- 9. Optionally, edit the data using the PL/SQL or Java API.

-- Preliminary work for this example (things normally done to use
-- data with Oracle Spatial and Graph):
-- * Create the spatial tables.
-- * Update the spatial metadata (USER_SDO_GEOM_METADATA).
-- * Load data into the spatial tables.
-- * Validate the spatial data (validate the layers).
-- * Create the spatial indexes.

-- Create spatial tables of geometry features: names and geometries.

CREATE TABLE city_streets_geom ( -- City streets/roads
name VARCHAR2(30) PRIMARY KEY,
geometry SDO_GEOMETRY);

CREATE TABLE traffic_signs_geom ( -- Traffic signs
name VARCHAR2(30) PRIMARY KEY,
geometry SDO_GEOMETRY);

CREATE TABLE land_parcels_geom ( -- Land parcels
name VARCHAR2(30) PRIMARY KEY,
geometry SDO_GEOMETRY);

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'CITY_STREETS_GEOM',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('X', 0, 65, 0.005),
SDO_DIM_ELEMENT('Y', 0, 45, 0.005)
),
NULL -- SRID
);

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'TRAFFIC_SIGNS_GEOM',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('X', 0, 65, 0.005),
SDO_DIM_ELEMENT('Y', 0, 45, 0.005)
),
NULL -- SRID
);

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'LAND_PARCELS_GEOM',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('X', 0, 65, 0.005),
SDO_DIM_ELEMENT('Y', 0, 45, 0.005)
),
NULL -- SRID
);

-- Load these tables (names and geometries for city streets/roads,
-- traffic signs, and land parcels).

-- Insert data into city street line geometries.

-- R1
INSERT INTO city_streets_geom VALUES('R1',
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,14, 21,14, 35,14, 47,14)));

-- R2
INSERT INTO city_streets_geom VALUES('R2',
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(36,38, 38,35, 41,34, 42,33, 45,32, 47,28, 50,28, 52,32,
57,33, 57,36, 59,39, 61,38, 62,41, 47,42, 45,40, 41,40)));

-- R3
INSERT INTO city_streets_geom VALUES('R3',
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(9,35, 13,35)));

-- R4
INSERT INTO city_streets_geom VALUES('R4',
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(25,30, 25,35)));

-- Insert data into traffic sign point geometries.

-- S1
INSERT INTO traffic_signs_geom VALUES('S1',
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(21,14,NULL), NULL, NULL));

-- S2
INSERT INTO traffic_signs_geom VALUES('S2',
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(35,14,NULL), NULL, NULL));

-- S3
INSERT INTO traffic_signs_geom VALUES('S3',
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(57,33,NULL), NULL, NULL));

-- S4
INSERT INTO traffic_signs_geom VALUES('S4',
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(20,37,NULL), NULL, NULL));

-- Insert data into land parcel polygon geometries.

-- P1
INSERT INTO land_parcels_geom VALUES('P1',
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(9,6, 21,6, 21,14, 21,22, 9,22, 9,14, 9,6)));

-- P2
INSERT INTO land_parcels_geom VALUES('P2',
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(21,6, 35,6, 35,14, 35,22, 21,22, 21,14, 21,6)));

-- P3
INSERT INTO land_parcels_geom VALUES('P3',
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(35,6, 47,6, 47,14, 47,22, 35,22, 35,14, 35,6)));

-- P4
INSERT INTO land_parcels_geom VALUES('P4',
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(17,30, 31,30, 31,40, 17,40, 17,30)));

-- P5 (polygon with a hole; exterior ring and one interior ring)
INSERT INTO land_parcels_geom VALUES('P5',
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1, 11,2003,1),
SDO_ORDINATE_ARRAY(3,30, 16,30, 16,38, 3,38, 3,30, 4,31, 4,34, 7,34, 7,31, 4,31)));

-- Validate the layers.
create table val_results (sdo_rowid ROWID, result VARCHAR2(2000));
call SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('CITY_STREETS_GEOM','GEOMETRY','VAL_RESULTS');
SELECT * from val_results;
truncate table val_results;
call SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('TRAFFIC_SIGNS_GEOM','GEOMETRY','VAL_RESULTS');
SELECT * from val_results;
truncate table val_results;
call SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('LAND_PARCELS_GEOM','GEOMETRY','VAL_RESULTS');
SELECT * from val_results;
drop table val_results;

-- Create the spatial indexes.
CREATE INDEX city_streets_geom_idx ON city_streets_geom(geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
CREATE INDEX traffic_signs_geom_idx ON traffic_signs_geom(geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
CREATE INDEX land_parcels_geom_idx ON land_parcels_geom(geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

-- Start the main steps for using the Topology Data Model with a
-- topology built from spatial geometry data.

-- 1. Create the topology. (Null SRID in this example.)
EXECUTE SDO_TOPO.CREATE_TOPOLOGY('CITY_DATA', 0.00005);

-- 2. Insert the universe face (F0). (id = -1, not 0)
INSERT INTO CITY_DATA_FACE$ values (
-1, NULL, SDO_LIST_TYPE(), SDO_LIST_TYPE(), NULL);

COMMIT;

-- 3. Create feature tables.

CREATE TABLE city_streets ( -- City streets/roads
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE traffic_signs ( -- Traffic signs
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

CREATE TABLE land_parcels ( -- Land parcels
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

-- 4. Associate feature tables with the topology.
--    Add the three topology geometry layers to the CITY_DATA topology.
--    Any order is OK.

EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'CITY_STREETS', 'FEATURE','LINE');
EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'TRAFFIC_SIGNS','FEATURE', 'POINT');
EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'LAND_PARCELS','FEATURE', 'POLYGON');

--  As a result, Spatial and Graph generates a unique TG_LAYER_ID for each layer in
--  the topology metadata (USER/ALL_SDO_TOPO_METADATA).

-- 5. Initialize topology metadata.
EXECUTE SDO_TOPO.INITIALIZE_METADATA('CITY_DATA');

-- 6. Create a TopoMap object and load the whole topology into cache for updating.

EXECUTE SDO_TOPO_MAP.CREATE_TOPO_MAP('CITY_DATA', 'CITY_DATA_TOPOMAP');
EXECUTE SDO_TOPO_MAP.LOAD_TOPO_MAP('CITY_DATA_TOPOMAP', 'true');

-- 7. Load feature tables, inserting data from the spatial tables and
--    using SDO_TOPO_MAP.CREATE_FEATURE.

BEGIN
FOR street_rec IN (SELECT name, geometry FROM city_streets_geom) LOOP
INSERT INTO city_streets VALUES(street_rec.name,
SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'CITY_STREETS', 'FEATURE',
street_rec.geometry));
END LOOP;

FOR sign_rec IN (SELECT name, geometry FROM traffic_signs_geom) LOOP
INSERT INTO traffic_signs VALUES(sign_rec.name,
SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'TRAFFIC_SIGNS', 'FEATURE',
sign_rec.geometry));
END LOOP;

FOR parcel_rec IN (SELECT name, geometry FROM land_parcels_geom) LOOP
INSERT INTO land_parcels VALUES(parcel_rec.name,
SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'LAND_PARCELS', 'FEATURE',
parcel_rec.geometry));
END LOOP;
END;
/

CALL SDO_TOPO_MAP.COMMIT_TOPO_MAP();
CALL SDO_TOPO_MAP.DROP_TOPO_MAP('CITY_DATA_TOPOMAP');

-- 8. Query the data.

SELECT a.feature_name, a.feature.tg_id, a.feature.get_geometry()
FROM land_parcels a;

SELECT a.feature_name, a.feature.tg_id, a.feature.get_geometry()
FROM city_streets a;

SELECT a.feature_name, a.feature.tg_id, a.feature.get_geometry()
FROM traffic_signs a;

SELECT sdo_topo.get_face_boundary('CITY_DATA', face_id), face_id
FROM city_data_face$;

SELECT sdo_topo.get_face_boundary('CITY_DATA', face_id), face_id
FROM city_data_face$;

SELECT sdo_topo.get_face_boundary('CITY_DATA', face_id, 'TRUE'), face_id
FROM city_data_face$;

-- Get topological elements.
SELECT a.FEATURE_NAME,
sdo_topo.get_topo_objects('CITY_DATA', a.feature.TG_LAYER_ID, a.feature.TG_ID)
FROM land_parcels a;

SELECT a.FEATURE_NAME,
sdo_topo.get_topo_objects('CITY_DATA', a.feature.TG_LAYER_ID, a.feature.TG_ID)
FROM city_streets a;

SELECT a.FEATURE_NAME,
sdo_topo.get_topo_objects('CITY_DATA', a.feature.TG_LAYER_ID, a.feature.TG_ID)
FROM traffic_signs a;

SELECT sdo_topo.get_topo_objects('CITY_DATA', sdo_geometry(2003,null, null,
sdo_elem_info_array(1,1003,3),
sdo_ordinate_array(1,1, 20,20)))
FROM DUAL;

SELECT sdo_topo.get_topo_objects('CITY_DATA', sdo_geometry(2003,null, null,
sdo_elem_info_array(1,1003,3),
sdo_ordinate_array(17,30, 31,40)))
FROM DUAL;

-- Find all city streets interacting with a query window.
SELECT c.feature_name FROM city_streets c WHERE
SDO_ANYINTERACT(
c.feature,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1003, 3),
SDO_ORDINATE_ARRAY(5,5, 30,40)))
= 'TRUE';

-- Find all streets that have any interaction with land parcel P3.
-- (Should return only R1.)
SELECT c.feature_name FROM city_streets c, land_parcels l
WHERE l.feature_name = 'P3' AND
SDO_ANYINTERACT (c.feature, l.feature) = 'TRUE';

-- Find all land parcels that have any interaction with traffic sign S1.
-- (Should return P1 and P2.)
SELECT l.feature_name FROM land_parcels l, traffic_signs t
WHERE t.feature_name = 'S1' AND
SDO_ANYINTERACT (l.feature, t.feature) = 'TRUE';

-- Get the geometry for land parcel P1.
SELECT l.feature_name, l.feature.get_geometry()
FROM land_parcels l WHERE l.feature_name = 'P1';

-- Query SDO_TOPO_GEOMETRY attributes,
SELECT s.feature.tg_type FROM city_streets s;
SELECT s.feature.tg_id FROM city_streets s;
SELECT s.feature.tg_layer_id FROM city_streets s;
SELECT s.feature.topology_id FROM city_streets s;

-- Topology-specific functions

-- Get the boundary of face with face_id 3.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 3) FROM DUAL;
-- Try 'TRUE' as third parameter.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 3, 'TRUE') FROM DUAL;
-- Get the boundary of face with face_id 2.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 2) FROM DUAL;
-- Try 'TRUE' as third parameter.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 2, 'TRUE') FROM DUAL;
-- Get the boundary of face with face_id 1.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 1) FROM DUAL;
-- Specify 'TRUE' for the all_edges parameter.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 1, 'TRUE') FROM DUAL;

-- CITY_DATA layer, land parcels (tg_ layer_id = 1), parcel P2 (tg_id = 2)
SELECT SDO_TOPO.GET_TOPO_OBJECTS('CITY_DATA', 1, 2) FROM DUAL;

-- 10. Optionally, edit the data using the PL/SQL or Java API.

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

2 トポロジの編集

この章では、トポロジ内のノードおよびエッジのデータを編集する方法について説明します。編集操作には、ノードとエッジの追加、移動および削除と、エッジの座標の更新が含まれます。

この章では、トポロジ・データを編集する2つの方法について説明し、そのうちの一方の方法(特殊なキャッシュを作成して使用する方法)が、ほとんどの場合にもう一方の方法より適している理由を説明します。また、主な編集操作の実行結果および影響についても説明します。この章の内容は次のとおりです。

- トポロジ・データを編集する方法

- ノードでの操作の実行

- エッジでの操作の実行

この章では、主にMDSYS.SDO_TOPO_MAPパッケージに含まれるPL/SQL Application Program Interface (API) (「SDO_TOPO_MAPパッケージ・サブプログラム」を参照)について説明します。ただし、クライアント側のJava APIを使用してトポロジの編集操作を実行することもできます。Java APIの概要は、「トポロジ・データ・モデルのJavaインタフェース」およびJavadoc生成のドキュメントを参照してください。

トポロジ・データを編集するには、常にPL/SQL APIまたはJava APIを使用します。ノード、エッジまたはフェイスの情報表を直接変更して編集操作を実行しないでください。

複数のスキーマが関係している場合のトポロジの編集上の注意事項は、「複数のスキーマが関係している場合のトポロジの編集方法」を参照してください。

トポロジ・データを編集する方法

トポロジを編集する必要がある場合は、PL/SQL APIまたはJava APIを使用します。いずれの場合も、Oracle Spatial and Graphではインメモリー・トポロジ・キャッシュ(具体的にはTopoMapオブジェクト(TopoMapオブジェクトを参照))が使用されます。

- PL/SQL APIを使用する場合、キャッシュを明示的に作成および使用するか、またはSpatial and Graphにキャッシュを自動的に作成および使用させることができます。

- Java APIを使用する場合、キャッシュを明示的に作成および使用する必要があります。

Spatial and Graphにキャッシュを自動的に作成および管理させる方が、自分でキャッシュを作成および使用する場合より実行する手順が少ないため簡単です。ただし、Spatial and Graphにキャッシュを作成および管理させるとデータベース・アクティビティおよびディスク・アクセスが増加するため、多くの位相要素を編集する必要がある場合は非効率的です。

TopoMapオブジェクト

TopoMapオブジェクトは、トポロジに関連付けられたインメモリー・キャッシュに関連付けられます。キャッシュを明示的に作成および使用してトポロジを編集する場合、トポロジに関連付けるTopoMapオブジェクトを作成し、そのトポロジのすべてまたは一部をキャッシュにロードし、オブジェクトを編集し、定期的にトポロジを更新してデータベースに変更を書き込み、キャッシュ内の変更をコミットしてキャッシュをクリアする必要があります。

この方法では、Spatial and Graphにキャッシュを自動的に作成および使用させる場合より多くの手順が必要ですが、一般的に数百または数千の位相要素に影響を及ぼすほとんどのトポロジ編集セッションでは、処理速度および効率が大幅に向上します。ほとんどの説明および図では、この方法を使用しています。

SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャのコール時のallow_updatesパラメータの値によって、TopoMapオブジェクトを更新可能または読取り専用に指定できます。

- 読取り専用のTopoMapオブジェクトを使用すると、位相要素(プリミティブ)はロードされますが、ロックされません。

- 更新可能なTopoMapオブジェクトを使用すると、位相要素(プリミティブ)はロードされてからロックされます。更新可能なTopoMapオブジェクトの矩形ウィンドウを指定した場合は、指定したウィンドウ内にある位相要素のみを編集できます。(TopoMapオブジェクトには、ユーザーが直接編集できないロックされた位相要素が含まれる場合もありますが、必要に応じてOracle Spatial and Graphによって間接的に変更できます。)
更新可能なTopoMapオブジェクトの使用時に発生する事柄の詳細は、SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャの「使用上の注意」を参照してください。

次のプロシージャによって、更新可能なTopoMapオブジェクトが読取り専用に設定されます。

- SDO_TOPO_MAP.COMMIT_TOPO_MAP

- SDO_TOPO_MAP.ROLLBACK_TOPO_MAP

- SDO_TOPO_MAP.CLEAR_TOPO_MAP

1回のユーザー・セッションに存在できる更新可能なTopoMapオブジェクトは常に1つのみです。ただし、複数の異なるユーザー・セッションで、同じトポロジに基づいた複数の更新可能なTopoMapオブジェクトを使用することはできます。これには、編集ウィンドウに、他の更新可能なTopoMapオブジェクト内にある位相要素が含まれていないことが条件となります。読取り専用のTopoMapオブジェクトは、複数のユーザー・セッション内およびユーザー・セッション間で複数設定できます。

編集ウィンドウ(SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャのコール時に指定)が重ならないかぎり、複数のユーザーが同時に1つのトポロジを編集できます。

トポロジ・パラメータの編集方法の指定

トポロジを編集する多くのSDO_TOPO_MAPパッケージ・ファンクションおよびプロシージャ(SDO_TOPO_MAP.ADD_NODE、SDO_TOPO_MAP.MOVE_EDGEなど)では、トポロジ名またはNULL値のいずれかを最初のパラメータtopologyに指定して、編集方法を指定します。

- トポロジ名を指定した場合、Spatial and Graphによってユーザー・セッションに更新可能なTopoMapオブジェクトが存在するかどうかが確認され、更新可能なTopoMapオブジェクトが存在しない場合、Spatial and Graphは内部TopoMapオブジェクトを作成し、そのキャッシュを使用して編集操作を実行し、変更をコミットして(または、例外が発生した場合は、処理の開始時点のセーブポイントまで変更をロールバックして)TopoMapオブジェクトを削除します。(更新可能なTopoMapオブジェクトがすでに存在する場合、例外が発生します。)たとえば、次の文ではMY_TOPOトポロジから、ノードID値が99のノードが削除されます。

CALL SDO_TOPO_MAP.REMOVE_NODE('MY_TOPO', 99);

- NULL値を指定した場合、Spatial and Graphによってユーザー・セッションに更新可能なTopoMapオブジェクトが存在するかどうかが確認され、更新可能なTopoMapオブジェクトが存在する場合、Spatial and GraphはTopoMapオブジェクトのキャッシュで操作を実行します。(更新可能なTopoMapオブジェクトが存在しない場合、例外が発生します。)たとえば、次の文では、現行の更新可能なTopoMapオブジェクトから、ノードID値が99のノードが削除されます。

CALL SDO_TOPO_MAP.REMOVE_NODE(null, 99);

GET_xxxトポロジ・ファンクションの使用

トポロジの情報を取得するSDO_TOPO_MAPパッケージ・ファンクションには、最初の2つのパラメータとしてtopologyおよびtopo_mapを取るものがあります。このようなファンクションには、SDO_TOPO_MAP.GET_EDGE_COORDS、SDO_TOPO_MAP.GET_NODE_STARなどがあります。これらのファンクションを使用するには、次のように一方のパラメータに有効な値を指定し、もう一方のパラメータにNULL値を指定します。

- topologyパラメータに有効な値を指定した場合、Spatial and Graphによって指定したトポロジの情報が取得されます。Spatialは内部TopoMapオブジェクトを作成し、そのキャッシュを使用して操作を実行し、TopoMapオブジェクトを削除します。たとえば、次の文では、CITY_DATAトポロジから、ID値が1のエッジのエッジ座標が戻されます。

SELECT SDO_TOPO_MAP.GET_EDGE_COORDS('CITY_DATA', null, 1) FROM DUAL;

- topologyパラメータにNULL値を指定し、topo_mapパラメータに有効な値を指定した場合、Spatial and Graphによって指定したTopoMapオブジェクト(更新可能または読取り専用のいずれか)が使用され、指定したトポロジの情報が取得されます。たとえば、次の文では、CITY_DATA_TOPOMAP TopoMapオブジェクトから、ID値が1のエッジのエッジ座標が戻されます。

SELECT SDO_TOPO_MAP.GET_EDGE_COORDS(null, 'CITY_DATA_TOPOMAP', 1) FROM DUAL;

- topologyとtopo_mapの両方のパラメータにNULLまたは無効な値を指定した場合、例外が発生します。

トポロジの編集操作の情報を取得するSDO_TOPO_MAPパッケージ・ファンクションには、パラメータを取らないものがあります。このようなファンクションには、SDO_TOPO_MAP.GET_FACE_ADDITIONS、SDO_TOPO_MAP.GET_NODE_CHANGESなどがあります。これらのファンクションでは、現行の更新可能なTopoMapオブジェクトが使用されます。更新可能なTopoMapオブジェクトが存在しない場合、例外が発生します。たとえば、次の文では、現行の更新可能なTopoMapオブジェクトに追加されたノードのノードID値を持つSDO_NUMBER_ARRAYオブジェクト(「SDO_EDGE_ARRAY型およびSDO_NUMBER_ARRAY型」を参照)が戻されます。

SELECT SDO_TOPO_MAP.GET_NODE_ADDITIONS FROM DUAL;

キャッシュを明示的に使用した編集処理(PL/SQL API)

図2-1に、PL/SQL APIを使用し、TopoMapオブジェクトおよびそれに関連付けられたキャッシュを明示的に使用して位相要素を編集する処理の推奨手順を示します。

図2-1 TopoMapオブジェクトのキャッシュを使用したトポロジの編集(PL/SQL API)

図2-1に示した基本的な手順は次のとおりです。

1. SDO_TOPO_MAP.CREATE_TOPO_MAPプロシージャを使用してTopoMapオブジェクトを作成します。
これによって、指定したトポロジに関連付けられたオブジェクトを編集するためのインメモリー・キャッシュが作成されます。

2. SDO_TOPO_MAP.LOAD_TOPO_MAPファンクションまたはプロシージャを使用して、トポロジ全体または矩形ウィンドウを、トポロジからTopoMapオブジェクトのキャッシュに更新用としてロードします。
インメモリーRツリー索引が、ロードするエッジおよびフェイスに作成されるように指定できます。これらの索引ではメモリー・リソースがいくらか消費され、索引の作成および定期的な再作成に時間がかかりますが、セッションで多くの位相要素を編集する場合は、これらの索引によってパフォーマンスが大幅に向上します。(また、読取り専用のTopoMapオブジェクトを使用する問合せのパフォーマンスも向上します。)

3. 様々なトポロジの編集操作(たとえば、1000個のノードの追加)を実行します。
定期的にSDO_TOPO_MAP.VALIDATE_TOPO_MAPファンクションをコールして、キャッシュを検証します。

SDO_TOPO_MAP.CREATE_EDGE_INDEXおよびSDO_TOPO_MAP.CREATE_FACE_INDEXプロシージャを使用して、TopoMapオブジェクト内のエッジおよびフェイスの既存のインメモリーRツリー索引を再作成できます。また、索引が存在しない場合は、新しい索引を作成できます。索引のパフォーマンスを最適化するには、位相要素を数多く編集したときに、これらの索引を定期的に再作成する必要があります。

キャッシュ内の編集を廃棄する場合は、SDO_TOPO_MAP.CLEAR_TOPO_MAPプロシージャをコールします。コミットしていない更新がある場合は、このプロシージャは失敗します。コミットされていない更新が存在しない場合は、このプロシージャによってキャッシュ内のデータが消去され、キャッシュが読取り専用に設定されます。

4. SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、トポロジを更新します。

5. トポロジの編集操作が終了するまで、必要に応じて手順3および4(オブジェクトの編集、キャッシュの検証、Rツリー索引の再作成およびトポロジの更新)を繰り返します。

6. SDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャをコールして、トポロジの変更をコミットします。(SDO_TOPO_MAP.COMMIT_TOPO_MAPプロシージャによって、変更のコミット前に、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャの操作が自動的に実行されます。)コミット操作後、キャッシュは読取り専用(更新不可)になります。ただし、同じTopoMapオブジェクトを使用して追加の編集操作を実行する場合、そのオブジェクトを再びロードして使用できます(必要に応じてキャッシュをクリアしてから、手順2から5を繰り返します)。
追加の編集操作を実行するには、SDO_TOPO_MAP.CLEAR_TOPO_MAPプロシージャをコールしてTopoMapオブジェクトのキャッシュをクリアして、手順2に戻ります。

SDO_TOPO_MAP.ROLLBACK_TOPO_MAPプロシージャをコールすると、コミットされていないすべてのトポロジの変更をいつでも廃棄できます。ロールバック操作後、キャッシュがクリアされます。

7. SDO_TOPO_MAP.DROP_TOPO_MAPプロシージャをコールして、TopoMapオブジェクトを削除します。
このプロシージャによって、TopoMapオブジェクトが削除され、そのオブジェクトが使用していたすべてのリソースが解放されます。(TopoMapオブジェクトを削除しなかった場合、ユーザー・セッションの終了時にそのオブジェクトが自動的に削除されます。)また、コミットされていないキャッシュ内のトポロジの変更がロールバックされます。

アプリケーションが異常終了した場合、データベースにコミットされていないすべての変更は廃棄されます。

非常に多くのトポロジの編集操作を実行する予定の場合、それらの操作を複数の編集セッションに分割できます。各セッションで、前述の手順1から7を実行します。

Java APIを使用した編集処理

図2-2に、クライアント側のJava APIを使用して位相要素を編集する処理の推奨手順を示します。Java APIの概要は、「トポロジ・データ・モデルのJavaインタフェース」およびJavadoc生成のドキュメントを参照してください。Java APIでは、TopoMapオブジェクトとそれに関連付けられたキャッシュを作成および管理する必要があります。

図2-2 TopoMapオブジェクトのキャッシュを使用したトポロジの編集(Java API)

図2-2に示した基本的な手順は次のとおりです。

1. TopoMapクラスのコンストラクタを使用してトポロジとデータベースの接続を指定し、TopoMapオブジェクトを作成します。
これによって、指定したトポロジに関連付けられたオブジェクトを編集するためのインメモリー・キャッシュが作成されます。

2. TopoMapクラスのloadTopologyまたはloadWindowメソッドを使用して、トポロジ全体または矩形ウィンドウを、トポロジからTopoMapオブジェクトのキャッシュに更新用にロードします。
インメモリーRツリー索引が、影響を受けるエッジおよびエッジのフェイスに作成されるように指定できます。これらの索引ではメモリー・リソースがいくらか消費され、索引の作成および定期的な再作成に時間がかかりますが、データベース接続中に多くの位相要素を編集する場合は、これらの索引によってパフォーマンスが大幅に向上します。

3. 様々なトポロジの編集操作(たとえば、1000個のノードの追加)を実行し、TopoMapクラスのupdateTopologyメソッドをコールしてトポロジを更新します。
定期的にTopoMapクラスのvalidateCacheメソッドをコールして、キャッシュを検証します。

TopoMapオブジェクトのロード時(手順2)にインメモリーRツリー索引を作成した場合、TopoMapクラスのcreateEdgeIndexおよびcreateFaceIndexメソッドをコールして、索引を定期的に(たとえば、100個のノードを追加するたびに)再作成できます。索引のパフォーマンスを最適化するには、位相要素を数多く編集したときに、これらの索引を定期的に再作成する必要があります。

トポロジを更新せずに、最終更新以降に実行したキャッシュ内の編集操作を廃棄する場合、TopoMapクラスのclearCacheメソッドをコールします。コミットしていない更新がある場合は、clearCacheメソッドは失敗します。コミットされていない更新が存在しない場合は、このメソッドによってキャッシュ内のデータが消去され、キャッシュが読取り専用に設定されます。

4. TopoMapクラスのupdateTopologyメソッドをコールして、トポロジを更新します。

5. トポロジの編集操作が終了するまで、必要に応じて手順3および4(オブジェクトの編集、キャッシュの検証、Rツリー索引の再作成およびトポロジの更新)を繰り返します。

6. TopoMapクラスのcommitDBメソッドをコールして、トポロジの変更をコミットします。(commitDBメソッドによって、変更のコミット前に、updateTopologyメソッドが自動的にコールされます。)コミット操作後、キャッシュは読取り専用(更新不可)になります。ただし、同じTopoMapオブジェクトを使用して追加の編集操作を実行する場合、そのオブジェクトを再びロードして使用できます(必要に応じてキャッシュをクリアしてから、手順2から5を繰り返します)。
追加の編集操作を実行するには、TopoMapクラスのclearCacheメソッドをコールしてTopoMapオブジェクトのキャッシュをクリアして、手順2に戻ります。

TopoMapクラスのrollbackDBメソッドをコールすると、コミットされていないすべてのトポロジの変更をいつでも廃棄できます。ロールバック操作後、キャッシュがクリアされます。

7. TopoMapオブジェクトをNULLに設定してTopoMapオブジェクトを削除します。これにより、そのオブジェクトに対してガベージ・コレクションが実行可能となり、そのオブジェクトが使用していたすべてのリソースが解放されます。(TopoMapオブジェクトを削除しなかった場合、アプリケーションの終了時にそのオブジェクトに対するガベージ・コレクションが自動的に実行されます。)
アプリケーションが異常終了した場合、データベースにコミットされていないすべての変更は廃棄されます。

非常に多くのトポロジの編集操作を実行する予定の場合、それらの操作を複数の編集セッションに分割できます。各セッションで、前述の手順1から7を実行します。

トポロジの編集のエラー処理

この項では、次の状況について説明します。

- 入力パラメータのエラー

- すべての例外

入力パラメータのエラー

PL/SQLサブプログラムSDO_TOPO_MAPまたはJavaクラスTopoMapのパブリック・メソッドをコールすると、入力パラメータの値が検証され、TopoMapオブジェクトが使用または作成されて編集または読取り専用操作が実行されます。入力エラーがあった場合、oracle.spatial.topo.TopoDataException例外がスローされます。基礎となるTopoMapオブジェクトで操作が実行される際に、別のエラーが発生する場合があります。

SQLまたはPL/SQLからメソッドをコールすると、次のエラー・メッセージが表示されます。

ORA-29532: Java call terminated by uncaught Java exception:
<specific error message text>

次のPL/SQLの例では、TopoDataException例外を処理する方法を示します。

DECLARE
topo_data_error EXCEPTION;
PRAGMA EXCEPTION_INIT(topo_data_error, -29532);
BEGIN
sdo_topo_map.create_topo_map(null, null, 100, 100, 100);
EXCEPTION
WHEN topo_data_error THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;/

前述の例の出力を次に示します。

ORA-29532: Java call terminated by uncaught Java exception:oracle.spatial.topo.TopoDataException: invalid TopoMap name

すべての例外

PL/SQLサブプログラムSDO_TOPO_MAPまたはそれらに関連付けられたJavaクラスTopoMap内のメソッド(SDO_TOPO_MAP.ADD_EDGE(addEdge)、SDO_TOPO_MAP.ADD_ISOLATED_NODE(addIsolatedNode)、SDO_TOPO_MAP.ADD_LOOP(addLoop)、SDO_TOPO_MAP.ADD_NODE(addNode)、SDO_TOPO_MAP.ADD_POINT_GEOMETRY(addPointGeometry)、SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY(addPolygonGeometry)、SDO_TOPO_MAP.CHANGE_EDGE_COORDS(changeEdgeCoords)、SDO_TOPO_MAP.MOVE_ISOLATED_NODE(moveIsolatedNode)、SDO_TOPO_MAP.MOVE_NODE(moveNode)、SDO_TOPO_MAP.MOVE_EDGE (moveEdge)、SDO_TOPO_MAP.REMOVE_EDGE (removeEdge)、SDO_TOPO_MAP.REMOVE_NODE (removeNode)およびSDO_TOPO_MAP.UPDATE_TOPO_MAP(updateTopology))のコール時に例外が発生すると、次の操作が自動的に実行されます。

- トランザクションがロールバックされます。

- TopoMapオブジェクトのキャッシュがクリアされます。

- TopoMapオブジェクトが読取り専用になります。

ノードでの操作の実行

この項では、ノードの追加、移動および削除の影響、およびPL/SQL APIを使用してこれらの操作を実行する方法について説明します。

ノードの追加

連結ノードを追加すると、現在のエッジ上の点にノードが追加されます。また、この操作によって元のエッジが2つのエッジに分割されます。Spatial and Graphによって元のエッジの定義が自動的に調整され、新しいエッジが作成されます(新しいエッジに、トポロジ内のエッジで一意のID値が割り当てられます)。

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

図2-3に、エッジE1へのノード(N3)の追加を示します。

図2-3 連結ノードの追加

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

- エッジE1が、元のエッジの開始点とノード(N3)の追加点の間に再定義されます。

- エッジE2が作成されます。開始点はノードN3の点で、終了点は元のエッジの終了点です。

- 元のエッジに線形フィーチャが定義されていた場合、線形フィーチャは結果として生成された両方のエッジに自動的に再定義され、エッジは分割され、トポロジの履歴情報表(「履歴情報表」を参照)に記録が追加されます。たとえば、図2-3の元のエッジE1に大通りという名前の通りが定義されていた場合、ノードN3の追加後、大通りがエッジE1とE2の両方に定義されます。

図2-4に、より複雑なノードの追加例を示します。この例では、追加されたノードが元のエッジの新しい形状点であるかどうか(つまり、SDO_TOPO_MAP.ADD_NODEファンクションのis_new_shape_pointパラメータの値)に応じて結果が異なります。

図2-4 ノードの追加に及ぼすis_new_shape_point値の影響

次に、図2-4について説明します。

- 1つ目の図では、元のエッジ(E1)がノードN1から開始してN2で終了し、中間に2つの形状点があります。

- 2つ目の図では、新しいノード(N3)が追加されていますが、このノードは元のエッジの形状点ではなく、新しい形状点です(つまり、is_new_shape_point=>'TRUE'です)。新しいノードは、pointパラメータで指定した場所に追加され、coord_indexパラメータで指定した頂点より後(この場合、coord_index=>1となるため最初の頂点の後)に追加されます。新しいノードは、エッジE1の終了ノード、および新しいエッジE2の開始ノードとなり、エッジE2はノードN2で終了します。

- 3つ目の図では、新しいノード(N3)が追加されていますが、このノードは元のエッジの形状点であるため、新しい形状点ではありません(つまり、is_new_shape_point=>'FALSE'です)。追加されたノードが新しい形状点ではないため、ノードはcoord_indexパラメータ(この場合はcoord_index=>2)で指定された頂点に追加されます。2つ目の図で示すように、新しいノードは、エッジE1の終了ノード、および新しいエッジE2の開始ノードとなり、エッジE2はノードN2で終了します。

ノードの移動

連結ノードを新しい位置に移動すると、ノードに接するすべてのエッジの点が、ノードとともに移動します。ノードの移動によって影響を受けるすべてのエッジの頂点を指定する必要があります。移動したノードに接する各点(開始点または終了点)は、ノードの新しい位置と同じ座標を持つ必要があり、影響を受ける各エッジのもう一方の点(移動したノードではない点)は、変わらないままである必要があります。

連結ノードを移動するには、SDO_TOPO_MAP.MOVE_NODEプロシージャを使用します。孤立ノードを移動するには、SDO_TOPO_MAP.MOVE_ISOLATED_NODEプロシージャを使用します。

図2-5に、ノードN1を移動する前の元のトポロジを示します。

図2-5 連結ノードの移動前のトポロジ

図2-6に、ノードN1を移動した後の元のトポロジの2つの状態を示します。一方では、リシェイプが実行されていません。つまり、移動の影響を受けるすべてのエッジが直線として指定されています。もう一方では、リシェイプが行われています。この場合、影響を受ける1つ以上のエッジが、複数の頂点のある線セグメントとして指定されています。

図2-6 連結ノードの移動後のトポロジ

次に、図2-6に示す両方の状態について説明します。

- トポロジは変更されません。つまり、ノード、エッジおよびフェイスの数およびそれらの関係(近接性、接続性など)は変更されません。

- ノード、エッジおよびフェイスに定義されたすべてのフィーチャは、そのまま保持されます。

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

移動の結果として次のことが発生する場合は、ノードを移動できません。

- ノードに接するエッジがその他のエッジと交差する。たとえば、図2-6に示す元のトポロジが、ノードN1のすぐ右上を通る別のエッジE20を含むとします。ノードN1の移動によってエッジE3、E4、E6、E8またはE9がエッジE20と交差する場合、その移動操作は実行されません。

- 現在隣接していないフェイスにノードが移動される。たとえば、図2-6に示す元のトポロジの外側にノードN1を移動する場合、その移動操作は実行されません。

- 孤立フェイスの反対側にノードが移動される。この移動では、フェイスの周りのエッジの関係または順序、および各エッジの左右のフェイスのうち、1つ以上のものが変更されるため、この移動は許可されません。図2-7に、許可されないノードの移動(孤立フェイスF1の反対側へのノードN1の反転)を示します。

図2-7 許可されないノードの移動

許可および禁止されたノードの移動の他の例

この項では、許可または禁止されたノードの移動操作の他の例を示します。すべての例で、図2-8に示すトポロジを参照します。

図2-8 ノードの移動例用のトポロジ

次に、図2-8に示すトポロジについて説明します。

- 点P1、P2、P3およびP4へのノードN1の移動が試行されます。(これらの点は単なる位置であり、既存のノードではありません。)

- 移動操作の前後のいずれにも、エッジに形状点はありません。

- 新しい頂点がエッジE1、E2、E3およびE4に指定されますが、エッジの開始点および終了点のID値は同じままです。

図2-8に示すトポロジを使用した、ノードの移動操作の試行とその結果を次に示します。

- ノードN1の点P1への移動: ノードN1に接する4つのエッジのうち1つ以上がエッジE5と交差するため、許可されません。(移動を実行すると、エッジE3がエッジE5と必ず交差します。)

- ノードN1の点P2への移動: 許可されます。

- ノードN1の点P3への移動: 許可されます。ただし、この操作によって孤立ノードN2がフェイスF2からフェイスF1に変更されるため、アプリケーションでノードN1の移動がロールバックされるか、または拒否される場合があります。同様に、ノードの移動によって孤立エッジまたは孤立フェイスが1つのフェイスから別のフェイスに変更される場合、アプリケーションでノードの移動操作がロールバックされるか、または拒否される場合があります。

- ノードN1の点P4への移動: ノードは元の(現在の)位置と隣接するフェイス内の点に移動する必要があるため、許可されません。

ノードの削除

個々のノード(孤立ノードまたは連結ノード)を削除することができます(この項を参照)。また、トポロジ内のすべての不要ノードも削除することができます(「不要ノードの削除」を参照)。

連結ノードを削除すると、そのノードが削除され、ノードに接していたエッジが1つのエッジにマージされます。(Spatial and Graphは、複雑な規則(このマニュアルでは説明していません)を適用して、結果として生成されるエッジのID値および方向を決定します。)

連結ノードまたは孤立ノードを削除するには、SDO_TOPO_MAP.REMOVE_NODEプロシージャを使用します。

図2-9に、エッジE1およびE2に接するノード(N1)の削除を示します。

図2-9 連結ノードの削除

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

- エッジE1が、元のエッジE1およびE2を表していた線セグメントで構成されるように再定義されます。

- エッジE2が削除されます。

- 両方の元のエッジに線形フィーチャが定義されていた場合、線形フィーチャは結果として生成されたエッジに自動的に再定義され、トポロジの履歴情報表(「履歴情報表」を参照)に記録が追加されます。たとえば、図2-9の元のエッジE1およびE2に大通りという名前の通りが定義されていた場合、ノードN1の削除後に大通りがエッジE1に定義されます。

次の1つ以上の条件に該当する場合、ノードは削除できません。

- 点フィーチャがノードに定義されている。たとえば、メトロポリタン美術館という名前の点フィーチャが図2-9のノードN1に定義されていた場合、ノードN1は削除できません。この場合、ノードを削除する前に、ノード上の点フィーチャの定義を削除する必要があります。

- 元のエッジのいずれかに定義されている線形フィーチャが、両方のエッジに定義されていない。たとえば、大通りという名前の線形フィーチャが、図2-9のエッジE1に定義されていたがエッジE2には定義されていなかった場合、ノードN1は削除できません。

不要ノードの削除

不要ノードとは、2つの個別のエッジのみに接続され、どの点フィーチャにも割り当てられておらず、異なる線形フィーチャ間の境界としても機能しないノードです。不要ノードは、トポロジを作成するためにSDO_TOPO_MAP.ADD_POLYGON_GEOMETRYファンクションを繰り返し使用した場合や、編集操作中にエッジが削除されて不要なノードが残された場合に発生します。そのため、このような場合には、SDO_TOPO_MAP.REMOVE_OBSOLETE_NODESプロシージャを使用して不要ノードを削除することをお薦めします。

Spatial and Graphは、<topology-name>_NODE$表と<topology-name>_EDGE$表、および必要に応じて<topology-name>_FACE$表の該当するエントリを自動的に更新します。

図2-10に、単純なトポロジ内の不要ノードの削除を示します。このトポロジでは、ノードN1に美術館という名前の点フィーチャが定義され、ノードN3には市庁舎という名前の点フィーチャが定義されています。エッジE1、E2およびE3には大通りという名前の線形フィーチャが定義され、エッジE4にはファースト・アベニューという名前の線形フィーチャが定義されています。

図2-10 不要ノードの削除

図2-10では、N2のみが不要ノードのすべての条件を満たしているため、このノードのみが削除されます。次に、他のノードについて説明します。

- N1は1つのエッジ(E1)のみに接続されています。また、このノードには点フィーチャ(美術館)が定義されています。

- N3には点フィーチャ(市庁舎)が定義されています。

- N4は、2つの異なる線形フィーチャ(大通りとファースト・アベニュー)間の境界です。

- N5は、1つのエッジ(E4)にのみ接続されています。

- ノードN6は、孤立ノード(どのエッジにも接続されていないノード)です。

また、図2-10に示す操作の結果として、ノードN2を削除したためにエッジE2が削除されています。

エッジでの操作の実行

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

エッジの追加

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

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

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

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

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

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

エッジの移動

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

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

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

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

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

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

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

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

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

エッジの削除

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

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

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

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

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

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

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

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

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

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

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

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

エッジの更新

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

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

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

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

3 SDO_TOPOパッケージ・サブプログラム

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

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

別のパッケージSDO_TOPO_MAPには、主にトポロジの編集に関連するサブプログラムが含まれています。SDO_TOPO_MAPパッケージのリファレンス情報については、「SDO_TOPO_MAPパッケージ・サブプログラム」を参照してください。

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

SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER

構文

SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER(
topology                 IN VARCHAR2,
table_name               IN VARCHAR2,
column_name              IN VARCHAR2,
topo_geometry_layer_type IN VARCHAR2,
relation_table_storage   IN VARCHAR2 DEFAULT NULL,
child_layer_id           IN NUMBER DEFAULT NULL);

説明

トポロジ・ジオメトリ・レイヤーをトポロジに追加します。

パラメータ

topology

指定した列内のトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーを追加するトポロジを指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

table_name

column_nameで指定した列を含むトポロジ・ジオメトリ・レイヤー表の名前を指定します。

column_name

トポロジに追加するトポロジ・ジオメトリ・レイヤー内のトポロジ・ジオメトリを含む(SDO_TOPO_GEOMETRY型の)列の名前を指定します。

topo_geometry_layer_type

トポロジ・ジオメトリ・レイヤーのタイプ(POINT、LINE、CURVE、POLYGONまたはCOLLECTION)を指定します。

relation_table_storage

<topology-name>_RELATION$表(「関係情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

child_layer_id

トポロジがトポロジ・ジオメトリ・レイヤー階層を持つ場合、このレイヤーの子トポロジ・ジオメトリ・レイヤーのレイヤーID番号を指定します。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)トポロジがトポロジ・ジオメトリ・レイヤー階層を持つときにこのパラメータを指定しない場合、トポロジ・ジオメトリ・レイヤーは階層の最も低いレベル(レベル0 (ゼロ))に追加されます。

トポロジがトポロジ・ジオメトリ・レイヤー階層を持たない場合は、トポロジ・ジオメトリ・レイヤーの追加時にこのパラメータを指定しないでください。

使用上の注意

このプロシージャを指定のトポロジに対して初めてコールすると、<topology-name>_RELATION$表(「関係情報表」を参照)が作成されます。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。作成したトポロジを削除するには、SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYERプロシージャをコールします。

このプロシージャによって、トポロジ・ジオメトリ内の空間フィーチャに空間索引が作成され、さらにトポロジ・ジオメトリ内のtg_typeとtg_idの組合せに対するBツリー索引が作成されます。

CONNECTロールおよびRESOURCEロールを付与されているユーザーには、このプロシージャをコールするためにCREATE VIEW権限も付与されている必要があります。これは、Oracle Database 10g リリース2でのCONNECTロールの権限削減により、CONNECTロールからCREATE CLUSTER、CREATE DATABASE LINK、CREATE SEQUENCE、ALTER SESSION、CREATE SYNONYM、CREATE TABLE、CREATE VIEWの権限が削除されたため必要になります。

トポロジ・ジオメトリ・レイヤー表(table_nameパラメータ)は、オブジェクト表として指定することはできません。

topology、table_nameまたはcolumn_nameを指定していない場合、またはtopo_geometry_layer_typeの値がサポートされていない場合、例外が発生します。

例

次の例では、トポロジ・ジオメトリ・レイヤーをCITY_DATAトポロジに追加します。トポロジ・ジオメトリ・レイヤーは、LAND_PARCELS表のFEATURE列内のポリゴン・ジオメトリで構成されています。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', 'LAND_PARCELS', 'FEATURE', 'POLYGON');

SDO_TOPO.CREATE_TOPOLOGY

構文

SDO_TOPO.CREATE_TOPOLOGY(
topology                 IN VARCHAR2,
tolerance                IN NUMBER,
srid                     IN NUMBER DEFAULT NULL,
node_table_storage       IN VARCHAR2 DEFAULT NULL,
edge_table_storage       IN VARCHAR2 DEFAULT NULL,
face_table_storage       IN VARCHAR2 DEFAULT NULL,
history_table_storage    IN VARCHAR2 DEFAULT NULL.
digits_right_of_decimal  IN VARCHAR2 DEFAULT 16);

説明

トポロジを作成します。

パラメータ

topology

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

tolerance

トポロジ内のトポロジ・ジオメトリに関連付けられた許容差を指定します。(許容差については、「トポロジ・データ・モデルの許容差」を参照してください。)

srid

トポロジ内のすべてのトポロジ・ジオメトリ・レイヤーに関連付けられた座標系(空間参照システム)です。デフォルトはNULLです。この場合、座標系は関連付けられていません。NULL以外の値を指定する場合、SDO_COORD_REF_SYS表のSRID列の値を指定する必要があります(『Oracle Spatial and Graph開発者ガイド』を参照)。

node_table_storage

<topology-name>_NODE$表(「ノード情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

edge_table_storage

<topology-name>_EDGE$表(「エッジ情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

face_table_storage

<topology-name>_FACE$表(「フェイス情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

history_table_storage

<topology-name>_HISTORY$表(「履歴情報表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

digits_right_of_decimal

既存のトポロジにフィーチャを追加する際に、任意の座標位置を表すために小数点の右側で使用できる桁数です。追加されるすべてのフィーチャ(Java APIまたは同等のPL/SQLサブプログラムでaddLinearGeometryメソッド、addPolygonGeometryメソッドまたはaddPointGeometryメソッドへの引数として渡されるフィーチャ)は、このパラメータで指定されている小数点の右側の桁数に自動的に切り捨てられます。デフォルトは16です。

この値は、受信データの精度に基づいて有効とされる小数点の右側の最後の桁に一致するように設定する必要があります。このメカニズムは、フィーチャ挿入処理中の計算ジオメトリの安定性を向上するために、また微小ポリゴンが作成されてしまうなどの予期しない結果を最小限に抑えるために提供されています。

使用上の注意

このプロシージャは、<topology-name>_EDGE$表、<topology-name>_NODE$表、<topology-name>_FACE$表および<topology-name>_HISTORY$表(「トポロジ・データ・モデル表」を参照)を作成します。また、これらの表の主キーにBツリー索引を作成します。また、トポロジのメタデータも作成します。

sridパラメータでは、測地座標系を指定できますが、トポロジに対するすべてのSpatial and Graphの内部演算子では、測地ではなくデカルトの算術演算子が使用されます。(測地座標系およびその他の座標系については、『Oracle Spatial and Graph開発者ガイド』を参照してください。)

ノード表、エッジ表、フェイス表および履歴表はパーティションなしでも作成できますが、これらの表を変更してパーティション化することもできます。また、パーティション化した表にパーティション化した空間索引を作成することもできます(『Oracle Spatial and Graph開発者ガイド』を参照)。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。作成したトポロジを削除するには、SDO_TOPO.DROP_TOPOLOGYプロシージャをコールします。

トポロジがすでに存在する場合、例外が発生します。

例

次の例では、CITY_DATAという名前のトポロジを作成します。このトポロジ内の空間ジオメトリの許容差は0.5で、WGS 84座標系(緯度と経度の座標で、SRID値は8307)が使用されます。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.CREATE_TOPOLOGY('CITY_DATA', 0.5, 8307);

SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER

構文

SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER(
topology    IN VARCHAR2,
table_name  IN VARCHAR2,
column_name IN VARCHAR2);

説明

トポロジ・ジオメトリ・レイヤーをトポロジから削除します。

パラメータ

topology

指定した列内のトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーから削除するトポロジを指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

table_name

column_nameで指定した列を含む表の名前を指定します。

column_name

トポロジから削除するトポロジ・ジオメトリ・レイヤー内のトポロジ・ジオメトリを含む列の名前を指定します。

使用上の注意

このプロシージャは、指定したトポロジ・ジオメトリ・レイヤーに関連付けられたデータを、<topology-name>_RELATION$表(「関係情報表」を参照)から削除します。このプロシージャは、最後に残ったトポロジ・ジオメトリ・レイヤーをトポロジから削除すると、<topology-name>_RELATION$表も削除します。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。

例

次の例では、LAND_PARCELS表のFEATURE列内のジオメトリに基づくトポロジ・ジオメトリ・レイヤーを、CITY_DATAという名前のトポロジから削除します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER('CITY_DATA', 'LAND_PARCELS', 'FEATURE');

SDO_TOPO.DROP_TOPOLOGY

構文

SDO_TOPO.DROP_TOPOLOGY(
topology  IN VARCHAR2);

説明

トポロジを削除します。

パラメータ

topology

削除するトポロジの名前を指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

使用上の注意

このプロシージャは、<topology-name>_EDGE$表、<topology-name>_NODE$表、<topology-name>_FACE$表、<topology-name>_NODE$表、<topology-name>_RELATION$表および<topology-name>_HISTORY$表(「トポロジ・データ・モデル表」を参照)を削除します。

トポロジに関連付けられているトポロジ・レイヤーがない場合は、Spatial and Graphのメタデータからトポロジが削除されます。

このプロシージャは、自動的にコミット操作を実行するため、ロールバックすることができません。

トポロジを所有しているデータベース・ユーザーを削除することはできません。したがって、トポロジを所有するデータベース・ユーザーに対してDROP USER ... CASCADE文を使用する前に、そのユーザーとして接続し、SDO_TOPO.DROP_TOPOLOGYプロシージャを実行する必要があります。

トポロジ・ジオメトリ・レイヤー内のトポロジ・ジオメトリがトポロジに含まれている場合、例外が発生します。この例外が発生した場合、各トポロジ・ジオメトリ・レイヤーでSDO_TOPO.DELETE_TOPO_GEOMETRY_LAYERプロシージャを使用してトポロジ内のすべてのトポロジ・ジオメトリ・レイヤーを削除した後、トポロジを削除します。

例

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

EXECUTE SDO_TOPO.DROP_TOPOLOGY('CITY_DATA');

SDO_TOPO.GET_FACE_BOUNDARY

構文

SDO_TOPO.GET_FACE_BOUNDARY(
topology   IN VARCHAR2,
face_id    IN NUMBER,
all_edges  IN VARCHAR2 DEFAULT 'FALSE'
) RETURN SDO_LIST_TYPE;

説明

指定されたフェイスのエッジの符号付きID番号のリストを戻します。

パラメータ

topology

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

face_id

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

all_edges

フェイスに隣接している(片側または両側にフェイスを持つ)すべてのエッジを含める場合はTRUE、フェイスの外部境界を構成するエッジのみを含める場合はFALSE(デフォルト)を指定します。(このファンクションの例を参照してください。)

使用上の注意

なし。

例

次の例では、フェイスID値が1のフェイスのエッジのID番号を戻します。最初の例では、all_edgesパラメータにデフォルト値'FALSE'を受け入れます。2つ目の例では、all_edgesに'TRUE'を指定したため、フェイス上の境界エッジおよび2つの孤立エッジのID番号がリストに含まれます。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを参照しています。)

-- Get the boundary of face with face_id 1.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 1) FROM DUAL;

SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA',1)
--------------------------------------------------------------------------------
SDO_LIST_TYPE(1)

-- Specify 'TRUE' for the all_edges parameter.
SELECT SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA', 1, 'TRUE') FROM DUAL;

SDO_TOPO.GET_FACE_BOUNDARY('CITY_DATA',1,'TRUE')
--------------------------------------------------------------------------------
SDO_LIST_TYPE(1, -26, 25)

SDO_TOPO.GET_TOPO_OBJECTS

構文

SDO_TOPO.GET_TOPO_OBJECTS(
topology  IN VARCHAR2,
geometry  IN SDO_GEOMETRY
) RETURN SDO_TOPO_OBJECT_ARRAY;

または

SDO_TOPO.GET_TOPO_OBJECTS(
topology               IN VARCHAR2,
topo_geometry_layer_id IN NUMBER,
topo_geometry_id       IN NUMBER
) RETURN SDO_TOPO_OBJECT_ARRAY;

説明

指定されたジオメトリ・オブジェクトまたはトポロジ・ジオメトリ・オブジェクトと相互作用するSDO_TOPO_OBJECTオブジェクトの配列を戻します。

パラメータ

topology

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

geometry

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

topo_geometry_layer_id

確認するトポロジ・ジオメトリ・オブジェクトを含むトポロジ・ジオメトリ・レイヤーのID番号を指定します。

topo_geometry_id

確認するトポロジ・ジオメトリ・オブジェクトのID番号を指定します。

使用上の注意

SDO_TOPO_OBJECT_ARRAYデータ型の詳細は、「挿入操作用のコンストラクタ: 位相要素の指定」を参照してください。

トポロジ・ジオメトリ・レイヤー階層を持つトポロジの場合、このファンクションは階層のすべてのレベルで使用でき、常にリーフレベル(最下位レベル)のオブジェクトを戻します。(トポロジ・ジオメトリ・レイヤー階層については、「トポロジ・ジオメトリ・レイヤー階層」を参照してください。)

例

次の例では、CITY_DATAトポロジ内の土地区画P2と相互作用するトポロジ・ジオメトリ・オブジェクトを戻します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

-- CITY_DATA layer, land parcels (topo_geometry_ layer_id = 1),
-- parcel P2 (topo_geometry_id = 2)
SELECT SDO_TOPO.GET_TOPO_OBJECTS('CITY_DATA', 1, 2) FROM DUAL;

SDO_TOPO.GET_TOPO_OBJECTS('CITY_DATA',1,2)(TOPO_ID, TOPO_TYPE)
--------------------------------------------------------------------------------
SDO_TOPO_OBJECT_ARRAY(SDO_TOPO_OBJECT(9, 1), SDO_TOPO_OBJECT(10, 1), SDO_TOPO_OB
JECT(13, 1), SDO_TOPO_OBJECT(14, 1), SDO_TOPO_OBJECT(17, 1), SDO_TOPO_OBJECT(18,
1), SDO_TOPO_OBJECT(6, 2), SDO_TOPO_OBJECT(7, 2), SDO_TOPO_OBJECT(8, 2), SDO_TO
PO_OBJECT(9, 2), SDO_TOPO_OBJECT(10, 2), SDO_TOPO_OBJECT(11, 2), SDO_TOPO_OBJECT
(12, 2), SDO_TOPO_OBJECT(13, 2), SDO_TOPO_OBJECT(14, 2), SDO_TOPO_OBJECT(17, 2),
SDO_TOPO_OBJECT(18, 2), SDO_TOPO_OBJECT(19, 2), SDO_TOPO_OBJECT(20, 2), SDO_TOP
O_OBJECT(-6, 2), SDO_TOPO_OBJECT(-7, 2), SDO_TOPO_OBJECT(-8, 2), SDO_TOPO_OBJECT
(-9, 2), SDO_TOPO_OBJECT(-10, 2), SDO_TOPO_OBJECT(-11, 2), SDO_TOPO_OBJECT(-12,
2), SDO_TOPO_OBJECT(-13, 2), SDO_TOPO_OBJECT(-14, 2), SDO_TOPO_OBJECT(-17, 2), S
DO_TOPO_OBJECT(-18, 2), SDO_TOPO_OBJECT(-19, 2), SDO_TOPO_OBJECT(-20, 2), SDO_TO
PO_OBJECT(-1, 3), SDO_TOPO_OBJECT(3, 3), SDO_TOPO_OBJECT(4, 3), SDO_TOPO_OBJECT(
5, 3), SDO_TOPO_OBJECT(6, 3), SDO_TOPO_OBJECT(7, 3), SDO_TOPO_OBJECT(8, 3))

SDO_TOPO.INITIALIZE_AFTER_IMPORT

構文

SDO_TOPO.INITIALIZE_AFTER_IMPORT(
topology  IN VARCHAR2);

説明

別のデータベースからインポートされたトポロジを作成(初期化)します。

パラメータ

topology

作成するトポロジの名前を指定します。トポロジは、ソース・データベースからエクスポートされている必要があります。

使用上の注意

このプロシージャは、指定したトポロジと関連するすべてのデータベースの構造を作成し、必要に応じて、すべてのフィーチャ表内のトポロジID値を調整し、正しい順序でフィーチャ・レイヤーを作成します。

このプロシージャをコールする前に、作成されるトポロジを所有するスキーマのユーザーとしてデータベースに接続します。

このプロシージャは、トポロジのエクスポートとインポートに必要なその他の手順(「トポロジ・データのエクスポートおよびインポート」を参照)をすべて実行した後に使用してください。

例

次の例では、CITY_DATA_EXP$を含むインポートされた表の情報を使用して、CITY_DATAという名前のトポロジを作成します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.INITIALIZE_AFTER_IMPORT('CITY_DATA');

SDO_TOPO.INITIALIZE_METADATA

構文

SDO_TOPO.INITIALIZE_METADATA(
topology  IN VARCHAR2);

説明

トポロジのメタデータを初期化します。ノード表、エッジ表およびフェイス表の順序情報を設定して、これらの表に必要な索引を作成(または再作成)します。

パラメータ

topology

順序を初期化するトポロジの名前を指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

使用上の注意

データをノード表、エッジ表およびフェイス表にロードした後にこのプロシージャを実行して、これらの表に格納されたIDの最大値より2大きい数値で、これらの表の順序を初期化する必要があります。これによって、これらの表の一意のID値が再利用されることが回避されます。(ノード表、エッジ表およびフェイス表については、「トポロジ・データ・モデル表」を参照してください。)

このプロシージャは、ノード表、エッジ表およびフェイス表のジオメトリ列またはMBRジオメトリ列に空間索引を作成します。バルク・ロード操作の前に索引が削除されている場合、バルク・ロード後にこのプロシージャを実行すると、これらの索引が再作成されます。

例

次の例では、CITY_DATAという名前のトポロジのメタデータを初期化します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.INITIALIZE_METADATA('CITY_DATA');

SDO_TOPO.PREPARE_FOR_EXPORT

構文

SDO_TOPO.PREPARE_FOR_EXPORT(
topology  IN VARCHAR2);

説明

別のデータベースにエクスポートするトポロジを準備します。

パラメータ

topology

エクスポートするトポロジの名前を指定します。トポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成されている必要があります。

使用上の注意

このプロシージャは、現在のデータベース(ソース・データベース)で指定したトポロジを別のデータベース(ターゲット・データベース)にエクスポートできるように準備します。

このプロシージャは、<topology-name>_EXP$という形式の表名を使用して、現在のスキーマに表を作成します。この表には、USER_SDO_TOPO_INFOビューおよびALL_SDO_TOPO_INFOビューと同じ列が含まれます。これらの列の詳細は、「xxx_SDO_TOPO_INFOビュー」の表1-8を参照してください。

このプロシージャをコールする前に、トポロジの所有者としてデータベースに接続します。

実行する手順など、トポロジのエクスポートとインポートの詳細は、「トポロジ・データのエクスポートおよびインポート」を参照してください。

例

次の例では、CITY_DATAという名前のトポロジをターゲット・データベースにエクスポートできるように準備します。(この例では、「トポロジ・データから作成したトポロジ」の定義およびデータを参照しています。)

EXECUTE SDO_TOPO.PREPARE_FOR_EXPORT('CITY_DATA');

SDO_TOPO.RELATE

構文

SDO_TOPO.RELATE(
geom1  IN SDO_TOPO_GEOMETRY,
geom2  IN SDO_TOPO_GEOMETRY,
mask   IN VARCHAR2
) RETURN VARCHAR2;

または

SDO_TOPO.RELATE(
feature1  IN SDO_TOPO_GEOMETRY,
feature2  IN SDO_GEOMETRY,
mask      IN VARCHAR2
) RETURN VARCHAR2;

または

SDO_TOPO.RELATE(
geom            IN SDO_TOPO_GEOMETRY,
topo_elem_array IN SDO_TOPO_OBJECT_ARRAY,
mask            IN VARCHAR2
) RETURN VARCHAR2;

説明

2つのトポロジ・ジオメトリ・オブジェクト、トポロジ・ジオメトリと空間ジオメトリ、またはトポロジ・ジオメトリとトポロジ・オブジェクト配列(SDO_TOPO_OBJECT_ARRAYオブジェクト)を調べて、これらの空間関係を決定します。

パラメータ

geom1

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

geom2

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

feature1

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

feature2

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

geom

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

topo_elem_array

SDO_TOPO_OBJECT_ARRAY型(「挿入操作用のコンストラクタ: 位相要素の指定」を参照)のトポロジ・オブジェクト配列を指定します。

mask

確認する1つ以上の関係を指定します。「使用方法」のキーワードのリストを参照してください。

使用上の注意

大量のオブジェクトを確認する場合は、SDO_TOPO.RELATEファンクションよりもトポロジ演算子(「トポロジ演算子」を参照)を使用した方が、パフォーマンスが向上します。ただし、2つのオブジェクトや少数のオブジェクトを確認する場合は、SDO_TOPO.RELATEファンクションの方が高いパフォーマンスを得られます。また、トポロジ演算子ではなくSDO_TOPO.RELATEファンクションを使用する必要がある場合もあります。たとえば、トポロジ演算子にはDETERMINEマスク・キーワードを指定できません。

次のキーワードをmaskパラメータで指定して、2つのオブジェクト間の空間関係を決定することができます。

- ANYINTERACT: オブジェクトが非接続ではない場合にTRUEを戻します。

- CONTAINS: 2番目のオブジェクトが完全に最初のオブジェクト内にあり、オブジェクト境界が触れていない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- COVEREDBY: 最初のオブジェクトが完全に2番目のオブジェクト内にあり、オブジェクト境界が1つ以上の点で触れている場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- COVERS: 2番目のオブジェクトが完全に最初のオブジェクト内にあり、オブジェクト境界が1つ以上の場所で触れている場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- DETERMINE: ジオメトリに最も一致する1つの関係キーワードを戻します。

- DISJOINT: オブジェクトが共通の境界点や内部点を持たない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- EQUAL: オブジェクトが境界と内部のすべての点(オブジェクト内のすべての穴を含む)を共有している場合は、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- INSIDE: 最初のオブジェクトが完全に2番目のオブジェクト内にあり、オブジェクト境界が触れていない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- ON: 線(最初のオブジェクト)の境界と内部が完全にポリゴン(2番目のオブジェクト)の境界上にある場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- OVERLAPBDYDISJOINT: オブジェクトが重なっているが、その境界は相互作用していない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- OVERLAPBDYINTERSECT: オブジェクトが重なっており、その境界が1つ以上の場所で相互作用している場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

- TOUCH: 2つのオブジェクトが共通の境界点を共有するが、内部点は共有しない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

maskの値(DETERMINEを除く)は、論理ブール演算子ORを使用して組み合せることができます。たとえば、'INSIDE + TOUCH'を指定すると、テストの結果に応じて文字列TRUEまたはFALSEを戻します。

例

次の例では、CITY_STREETS表内の各トポロジ・ジオメトリ・オブジェクトとP3土地区画との間にANYINTERACT関係が存在するかどうか(つまり、土地区画と相互作用する通り)を検出します。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを参照しています。出力は、読みやすくするために変更が加えられています。)

SELECT c.feature_name,
SDO_TOPO.RELATE(c.feature, l.feature, 'anyinteract') Any_Interaction
FROM city_streets c, land_parcels l WHERE l.feature_name = 'P3';

FEATURE_NAME  ANY_INTERACTION
------------  ---------------
R1            TRUE
R2            FALSE
R3            FALSE
R4            FALSE

次の例では、CITY_STREETS表内の各トポロジ・ジオメトリ・オブジェクトと、P3という名前の土地区画フィーチャと偶然同じになったSDO_TOPO_OBJECT_ARRAYオブジェクトの間に、ANYINTERACT関係が存在するかどうかを検出します。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを使用しています。)結果は前述の例と同様です。また、読みやすいように形式を変更しています。

SELECT c.feature_name,
SDO_TOPO.RELATE(c.feature,
SDO_TOPO_OBJECT_ARRAY (SDO_TOPO_OBJECT (5, 3), SDO_TOPO_OBJECT (8, 3)),
'anyinteract') Any_Interaction
FROM city_streets c, land_parcels l WHERE l.feature_name = 'P3';

FEATURE_NAME  ANY_INTERACTION
------------  ---------------
R1            TRUE
R2            FALSE
R3            FALSE
R4            FALSE

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

MDSYS.SDO_TOPO_MAPパッケージには、Spatial and Graphのトポロジ・データ・モデル機能用のPL/SQL Application Program Interface (API)の一部を構成するサブプログラム(ファンクションおよびプロシージャ)が含まれています。このパッケージには、トポロジの編集に関連するサブプログラムが含まれています。これらのサブプログラムでは、事前に作成したTopoMapオブジェクト、またはSpatial and Graphによって暗黙的に作成されたTopoMapオブジェクトのいずれかが使用されます。

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

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

SDO_TOPO_MAP.ADD_EDGE

構文

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

説明

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

パラメータ

topology

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

node_id1

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

node_id2

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

geom

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

使用上の注意

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

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

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

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

例

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

CALL SDO_TOPO_MAP.ADD_EDGE(null, 3, 4,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(25,35, 20,37)))
INTO :res_number;

Call completed.

SQL> PRINT res_number;

RES_NUMBER
----------
29

SDO_TOPO_MAP.ADD_ISOLATED_NODE

構文

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

または

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

または

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

または

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

説明

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

パラメータ

topology

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

face_id

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

point

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

x

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

y

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

使用上の注意

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

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

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

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

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

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

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

例

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

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

PL/SQL procedure successfully completed.

SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY

構文

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

または

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

説明

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

パラメータ

topology

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

curve

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

coords

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

使用上の注意

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

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

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

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

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

例

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

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

SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY(NULL,SDO_GEOMETRY(2002,NULL,NULL,SDO_ELEM_INFO_
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(31)

SDO_TOPO_MAP.ADD_LOOP

構文

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

説明

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

パラメータ

topology

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

node_id

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

geom

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

使用上の注意

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

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

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

例

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

CALL SDO_TOPO_MAP.ADD_LOOP(null, 4,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1),
SDO_ORDINATE_ARRAY(20,37, 20,39, 25,39, 20,37)))
INTO :res_number;

Call completed.

SQL> PRINT res_number;

RES_NUMBER
----------
30

SDO_TOPO_MAP.ADD_NODE

構文

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

または

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

説明

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

パラメータ

topology

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

edge_id

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

point

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

x

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

y

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

coord_index

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

is_new_shape_point

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

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

使用上の注意

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

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

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

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

例

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

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

PL/SQL procedure successfully completed.

SDO_TOPO_MAP.ADD_POINT_GEOMETRY

構文

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

または

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

説明

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

パラメータ

topology

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

point

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

coord

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

使用上の注意

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

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

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

例

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

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

SDO_TOPO_MAP.ADD_POINT_GEOMETRY(NULL,SDO_GEOMETRY(2001,NULL,SDO_POINT_TYPE(57,12
--------------------------------------------------------------------------------
29

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

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

SDO_TOPO_MAP.ADD_POINT_GEOMETRY(NULL,SDO_NUMBER_ARRAY(58,12))
-------------------------------------------------------------
30

SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY

構文

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

または

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

説明

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

パラメータ

topology

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

polygon

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

coords

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

使用上の注意

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

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

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

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

例

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

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

SDO_TOPO_MAP.CHANGE_EDGE_COORDS

構文

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

または

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

説明

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

パラメータ

topology

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

edge_id

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

geom

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

moved_iso_nodes

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

moved_iso_edges

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

allow_iso_moves

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

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

使用上の注意

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

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

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

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

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

例

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

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

SDO_TOPO_MAP.CLEAR_TOPO_MAP

構文

SDO_TOPO_MAP.CLEAR_TOPO_MAP(
topo_map  IN VARCHAR2);

説明

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

パラメータ

topo_map

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

使用上の注意

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

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

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

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

例

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

CALL SDO_TOPO_MAP.CLEAR_TOPO_MAP('CITY_DATA_TOPOMAP');

SDO_TOPO_MAP.COMMIT_TOPO_MAP

構文

SDO_TOPO_MAP.COMMIT_TOPO_MAP;

説明

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

パラメータ

なし。

使用上の注意

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

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

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

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

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

例

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

EXECUTE SDO_TOPO_MAP.COMMIT_TOPO_MAP;

SDO_TOPO_MAP.CREATE_EDGE_INDEX

構文

SDO_TOPO_MAP.CREATE_EDGE_INDEX(
topo_map  IN VARCHAR2);

説明

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

パラメータ

topo_map

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

使用上の注意

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

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

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

例

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

CALL SDO_TOPO_MAP.CREATE_EDGE_INDEX('CITY_DATA_TOPOMAP');

SDO_TOPO_MAP.CREATE_FACE_INDEX

構文

SDO_TOPO_MAP.CREATE_FACE_INDEX(
topo_map  IN VARCHAR2);

説明

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

パラメータ

topo_map

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

使用上の注意

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

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

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

例

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

CALL SDO_TOPO_MAP.CREATE_FACE_INDEX('CITY_DATA_TOPOMAP');

SDO_TOPO_MAP.CREATE_FEATURE

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

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

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

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

説明

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

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

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

パラメータ

topology

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

table_name

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

column_name

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

geom

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

snapfeature

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

dml_condition

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

使用上の注意

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

- トポロジ・データから作成したトポロジの使用

- 「空間ジオメトリから作成したトポロジの使用」(CREATE_FEATUREファンクションを使用する方法)

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

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

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

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

- topology、table_nameまたはcolumn_nameが存在しない。

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

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

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

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

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

例

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

BEGIN
FOR street_rec IN (SELECT name, geometry FROM city_streets_geom) LOOP
INSERT INTO city_streets VALUES(street_rec.name,
SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'CITY_STREETS', 'FEATURE',
street_rec.geometry));
END LOOP;

FOR sign_rec IN (SELECT name, geometry FROM traffic_signs_geom) LOOP
INSERT INTO traffic_signs VALUES(sign_rec.name,
SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'TRAFFIC_SIGNS', 'FEATURE',
sign_rec.geometry));
END LOOP;

FOR parcel_rec IN (SELECT name, geometry FROM land_parcels_geom) LOOP
INSERT INTO land_parcels VALUES(parcel_rec.name,
SDO_TOPO_MAP.CREATE_FEATURE('CITY_DATA', 'LAND_PARCELS', 'FEATURE',
parcel_rec.geometry));
END LOOP;
END;
/

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

declare
name varchar2(64);
cursor c1 is select state_abrv, county from
counties order by 1, 2;
stateabrv varchar2(2);
begin

-- Initialize.
sdo_topo_map.create_topo_map('cnty', 'm2', 10000, 10000, 10000);
sdo_topo_map.load_topo_map('m2', -180, -90, 180, 90, 'true');

-- Insert one county at a time.
for cnty_rec in c1 loop
stateabrv := cnty_rec.state_abrv;
name := cnty_rec.county;
insert into cnty_areas select state_abrv || '-' ||county,
sdo_topo_map.create_feature('CNTY', 'CNTY_AREAS', 'FEATURE', geom) from
counties where state_abrv=stateabrv and county=name;
end loop;

-- Roll back topology.
sdo_topo_map.rollback_topo_map();
sdo_topo_map.drop_topo_map('m2');

-- Roll back inserts.
rollback;

exception
when others then
dbms_output.put_line(SQLERRM);
sdo_topo_map.rollback_topo_map();
sdo_topo_map.drop_topo_map('m2');
rollback;
end;
/

-- Add parent feature layer.
--
--   The following commented out statement can be used to populate the
--     child_layer_id parameter in sdo_topo.add_topo_geometry_layer.
--
--   select tg_layer_id
--     from user_sdo_topo_info
--     where TOPOLOGY = 'SC'
--       and table_name = 'SC_AREAS';
--
execute sdo_topo.add_topo_geometry_layer('SC','SC_P_AREAS', 'FEATURE', -
'POLYGON', NULL, child_layer_id => 1);

-- Create and insert state features (logically) from county features.
insert into sc_p_areas (f_name, p_name, feature) values ('NH', 'US',
sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''NH'''));
insert into sc_p_areas (f_name, p_name, feature) values ('CT', 'US',
sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''CT'''));
insert into sc_p_areas (f_name, p_name, feature) values ('ME', 'US',
sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''ME'''));
insert into sc_p_areas (f_name, p_name, feature) values ('MA', 'US',
sdo_topo_map.create_feature('SC','SC_P_AREAS','FEATURE','p_name=''MA'''));
commit;

SDO_TOPO_MAP.CREATE_TOPO_MAP

構文

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

説明

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

パラメータ

topology

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

topo_map

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

number_of_edges

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

number_of_nodes

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

number_of_faces

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

使用上の注意

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

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

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

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

例

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

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

SDO_TOPO_MAP.DROP_TOPO_MAP

構文

SDO_TOPO_MAP.DROP_TOPO_MAP(
topo_map IN VARCHAR2);

説明

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

パラメータ

topo_map

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

使用上の注意

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

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

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

例

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

CALL SDO_TOPO_MAP.DROP_TOPO_MAP('CITY_DATA_TOPOMAP');

SDO_TOPO_MAP.GET_CONTAINING_FACE

構文

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

または

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

説明

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

パラメータ

topology

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

topo_map

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

point

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

x

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

y

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

使用上の注意

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

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

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

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

例

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

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

SDO_TOPO_MAP.GET_CONTAINING_FACE(NULL,'CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NULL
--------------------------------------------------------------------------------
2

SDO_TOPO_MAP.GET_EDGE_ADDITIONS

構文

SDO_TOPO_MAP.GET_EDGE_ADDITIONS() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_EDGE_ADDITIONS FROM DUAL;

GET_EDGE_ADDITIONS
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(28, 29, 30, 32)

SDO_TOPO_MAP.GET_EDGE_CHANGES

構文

SDO_TOPO_MAP.GET_EDGE_CHANGES() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_EDGE_CHANGES FROM DUAL;

GET_EDGE_CHANGES
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(3, 2, 1)

SDO_TOPO_MAP.GET_EDGE_COORDS

構文

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

説明

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

パラメータ

topology

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

topo_map

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

edge_id

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

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_EDGE_COORDS(null, 'CITY_DATA_TOPOMAP', 1) FROM DUAL;

SDO_TOPO_MAP.GET_EDGE_COORDS(NULL,'CITY_DATA_TOPOMAP',1)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(8, 30, 16, 30, 16, 38, 3, 38, 3, 30, 8, 30)

SDO_TOPO_MAP.GET_EDGE_DELETIONS

構文

SDO_TOPO_MAP.GET_EDGE_DELETIONS() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_EDGE_DELETIONS FROM DUAL;

GET_EDGE_DELETIONS
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY()

SDO_TOPO_MAP.GET_EDGE_NODES

構文

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

説明

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

パラメータ

topology

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

topo_map

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

edge_id

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

使用上の注意

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

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

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

例

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

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

SDO_TOPO_MAP.GET_EDGE_NODES(NULL,'CITY_DATA_TOPOMAP',1)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(1, 1)

SDO_TOPO_MAP.GET_FACE_ADDITIONS

構文

SDO_TOPO_MAP.GET_FACE_ADDITIONS() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_FACE_ADDITIONS FROM DUAL;

GET_FACE_ADDITIONS
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(11)

SDO_TOPO_MAP.GET_FACE_CHANGES

構文

SDO_TOPO_MAP.GET_FACE_CHANGES() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_FACE_CHANGES FROM DUAL;

GET_FACE_CHANGES
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(2, 1, -1)

SDO_TOPO_MAP.GET_FACE_BOUNDARY

構文

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

説明

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

パラメータ

topology

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

topo_map

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

face_id

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

option

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

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_FACE_BOUNDARY(null, 'CITY_DATA_TOPOMAP', 3, 0) FROM DUAL;

SDO_TOPO_MAP.GET_FACE_BOUNDARY(NULL,'CITY_DATA_TOPOMAP',3,0)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(19, 6, 21, 9)

SDO_TOPO_MAP.GET_FACE_DELETIONS

構文

SDO_TOPO_MAP.GET_FACE_DELETIONS() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_FACE_DELETIONS FROM DUAL;

GET_FACE_DELETIONS
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY()

SDO_TOPO_MAP.GET_NEAREST_EDGE

構文

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

または

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

説明

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

パラメータ

topology

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

topo_map

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

point

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

x

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

y

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

使用上の注意

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

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

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

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

例

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

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

SDO_TOPO_MAP.GET_NEAREST_EDGE(NULL,'CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NULL,SD
--------------------------------------------------------------------------------
22

SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE

構文

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

または

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

説明

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

パラメータ

topo_map

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

point

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

x

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

y

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

使用上の注意

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

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

例

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

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

SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE('CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NUL
--------------------------------------------------------------------------------
22

SDO_TOPO_MAP.GET_NEAREST_NODE

構文

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

または

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

説明

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

パラメータ

topology

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

topo_map

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

point

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

x

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

y

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

使用上の注意

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

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

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

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

例

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

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

SDO_TOPO_MAP.GET_NEAREST_NODE(NULL,'CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NULL,SD
--------------------------------------------------------------------------------
8

SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE

構文

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

または

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

説明

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

パラメータ

topo_map

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

point

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

x

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

y

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

使用上の注意

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

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

例

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

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

SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE('CITY_DATA_TOPOMAP',SDO_GEOMETRY(2001,NUL
--------------------------------------------------------------------------------
8

SDO_TOPO_MAP.GET_NODE_ADDITIONS

構文

SDO_TOPO_MAP.GET_NODE_ADDITIONS() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_NODE_ADDITIONS FROM DUAL;

GET_NODE_ADDITIONS
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(24, 25, 26, 27, 28)

SDO_TOPO_MAP.GET_NODE_CHANGES

構文

SDO_TOPO_MAP.GET_NODE_CHANGES() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_NODE_CHANGES FROM DUAL;

GET_NODE_CHANGES
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(2, 4)

SDO_TOPO_MAP.GET_NODE_COORD

構文

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

説明

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

パラメータ

topology

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

topo_map

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

node_id

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

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_NODE_COORD(null, 'CITY_DATA_TOPOMAP', 14) FROM DUAL;

SDO_TOPO_MAP.GET_NODE_COORD(NULL,'CITY_DATA_TOPOMAP',14)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 0, SDO_POINT_TYPE(21, 14, NULL), NULL, NULL)

SDO_TOPO_MAP.GET_NODE_DELETIONS

構文

SDO_TOPO_MAP.GET_NODE_DELETIONS() RETURN SDO_NUMBER_ARRAY;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_NODE_DELETIONS FROM DUAL;

GET_NODE_DELETIONS
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY()

SDO_TOPO_MAP.GET_NODE_FACE_STAR

構文

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

説明

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

パラメータ

topology

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

topo_map

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

node_id

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

使用上の注意

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

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

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

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

例

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

SELECT SDO_TOPO_MAP.GET_NODE_FACE_STAR(null, 'CITY_DATA_TOPOMAP', 14) FROM DUAL;

SDO_TOPO_MAP.GET_NODE_FACE_STAR(NULL,'CITY_DATA_TOPOMAP',14)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(4, 7, 6, 3)

SDO_TOPO_MAP.GET_NODE_STAR

構文

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

説明

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

パラメータ

topology

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

topo_map

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

node_id

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

使用上の注意

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

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

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

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

例

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

SELECT SDO_TOPO_MAP.GET_NODE_STAR(null, 'CITY_DATA_TOPOMAP', 14) FROM DUAL;

SDO_TOPO_MAP.GET_NODE_STAR(NULL,'CITY_DATA_TOPOMAP',14)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(19, -10, -20, -9)

SDO_TOPO_MAP.GET_TOPO_NAME

構文

SDO_TOPO_MAP.GET_TOPO_NAME(
topo_map  IN VARCHAR2
) RETURN VARCHAR2;

説明

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

パラメータ

topo_map

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

使用上の注意

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

例

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

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

SDO_TOPO_MAP.GET_TOPO_NAME('CITY_DATA_TOPOMAP')
--------------------------------------------------------------------------------
CITY_DATA

SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID

構文

SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID() RETURN NUMBER;

説明

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

パラメータ

なし。

使用上の注意

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

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

例

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

SELECT SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID FROM DUAL;

GET_TOPO_TRANSACTION_ID
-----------------------
1

SDO_TOPO_MAP.LIST_TOPO_MAPS

構文

SDO_TOPO_MAP.LIST_TOPO_MAPS() RETURN VARCHAR2;

説明

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

パラメータ

なし。

使用上の注意

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

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

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

例

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

SELECT SDO_TOPO_MAP.LIST_TOPO_MAPS FROM DUAL;

LIST_TOPO_MAPS
--------------------------------------------------------------------------------
(CITY_DATA_TOPOMAP, CITY_DATA, updatable)

SDO_TOPO_MAP.LOAD_TOPO_MAP

構文(ファンクション)

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

または

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

構文(プロシージャ)

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

または

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

説明

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

パラメータ

topo_map

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

xmin

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

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

ymin

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

xmax

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

ymax

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

allow_updates

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

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

build_indexes

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

使用上の注意

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

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

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

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

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

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

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

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

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

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

- エッジE3、E4、E5、E6、E7、E8、E9、E10、E11、E12、E13、E14およびE16はロードされます。
エッジE3は、部分的にウィンドウに重なっているため、ロードされます。

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

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

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

- ノードN2、N5、N6、N7、N8、N9、N10、N11、N12、N16、N19およびN20はロードされます。
連結ノードN2は、エッジE3がロードされるため、ロードされます。

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

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

例

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

CALL SDO_TOPO_MAP.LOAD_TOPO_MAP('CITY_DATA_TOPOMAP', 'TRUE') INTO :res_varchar;

Call completed.

PRINT res_varchar;

RES_VARCHAR
--------------------------------------------------------------------------------
TRUE

SDO_TOPO_MAP.MOVE_EDGE

構文

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

または

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

説明

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

パラメータ

topology

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

edge_id

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

edge_coords

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

s_node_id

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

t_node_id

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

moved_iso_nodes

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

moved_iso_edges

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

allow_iso_moves

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

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

使用上の注意

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

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

例

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

-- Get coordinates of edge E19.
SELECT SDO_TOPO_MAP.GET_EDGE_COORDS(null, 'CITY_DATA_TOPOMAP', 19) FROM DUAL;

SDO_TOPO_MAP.GET_EDGE_COORDS(NULL,'CITY_DATA_TOPOMAP',19)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(21, 14, 21, 22)

-- Move edge E19: from N14 -> N17 to N14 -> N16. The 3rd and 4th parameters
-- identify N17 and N16.
CALL SDO_TOPO_MAP.MOVE_EDGE(null, 19, 17, 16,
SDO_NUMBER_ARRAY(21,14, 9,22));

Call completed.

-- Get coordinates of edge E19 after the move.
SELECT SDO_TOPO_MAP.GET_EDGE_COORDS(null, 'CITY_DATA_TOPOMAP', 19) FROM DUAL;

SDO_TOPO_MAP.GET_EDGE_COORDS(NULL,'CITY_DATA_TOPOMAP',19)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(21, 14, 9, 22)

SDO_TOPO_MAP.MOVE_ISOLATED_NODE

構文

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

または

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

説明

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

パラメータ

topology

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

node_id

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

point

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

x

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

y

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

使用上の注意

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

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

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

例

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

CALL SDO_TOPO_MAP.ADD_ISOLATED_NODE(null, 2,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(22,38,NULL), NULL, NULL))
INTO :res_number;

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

SDO_TOPO_MAP.MOVE_NODE

構文

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

または

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

説明

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

パラメータ

topology

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

node_id

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

edges_coords

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

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

moved_iso_nodes

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

moved_iso_edges

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

allow_iso_moves

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

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

使用上の注意

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

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

例

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

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

SDO_TOPO_MAP.REMOVE_EDGE

構文

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

説明

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

パラメータ

topology

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

edge_id

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

使用上の注意

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

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

例

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

CALL SDO_TOPO_MAP.REMOVE_EDGE(null, 99);

SDO_TOPO_MAP.REMOVE_NODE

構文

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

説明

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

パラメータ

topology

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

node_id

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

使用上の注意

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

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

例

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

CALL SDO_TOPO_MAP.REMOVE_NODE(null, 500);

SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES

構文

SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES(
topology  IN VARCHAR2);

説明

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

パラメータ

topology

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

使用上の注意

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

例

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

CALL SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES(null);

SDO_TOPO_MAP.ROLLBACK_TOPO_MAP

構文

SDO_TOPO_MAP.ROLLBACK_TOPO_MAP;

説明

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

パラメータ

なし。

使用上の注意

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

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

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

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

例

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

EXECUTE SDO_TOPO_MAP.ROLLBACK_TOPO_MAP;

SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP

構文

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

説明

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

パラメータ

topo_map

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

xmin

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

ymin

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

xmax

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

ymax

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

capacity

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

使用上の注意

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

例

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

SELECT SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP('CITY_DATA_TOPOMAP', -
5,5, 30,40, 200) FROM DUAL;

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

SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP

構文

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

説明

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

パラメータ

topo_map

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

xmin

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

ymin

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

xmax

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

ymax

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

capacity

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

使用上の注意

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

例

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

SELECT SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP('CITY_DATA_TOPOMAP', -
5,5, 30,40, 200) FROM DUAL;

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

SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE

構文

SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE(
maxsize IN NUMBER DEFAULT 268435456);

説明

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

パラメータ

maxsize

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

使用上の注意

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

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

例

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

EXECUTE SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE(536870912);

SDO_TOPO_MAP.UPDATE_TOPO_MAP

構文

SDO_TOPO_MAP.UPDATE_TOPO_MAP;

説明

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

パラメータ

なし。

使用上の注意

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

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

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

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

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

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

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

例

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

EXECUTE SDO_TOPO_MAP.UPDATE_TOPO_MAP;

SDO_TOPO_MAP.VALIDATE_TOPO_MAP

構文

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

説明

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

パラメータ

topo_map

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

level

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

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

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

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

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

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

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

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

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

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

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

使用上の注意

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

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

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

例

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

CALL SDO_TOPO_MAP.VALIDATE_TOPO_MAP('CITY_DATA_TOPOMAP') INTO :res_varchar;

Call completed.

PRINT res_varchar;

RES_VARCHAR
--------------------------------------------------------------------------------
TRUE

SDO_TOPO_MAP.VALIDATE_TOPOLOGY

構文

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

または

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

または

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

または

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

説明

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

パラメータ

topology

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

xmin

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

ymin

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

xmax

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

ymax

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

prevent_updates

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

level

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

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

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

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

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

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

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

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

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

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

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

使用上の注意

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

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

例

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

CALL SDO_TOPO_MAP.VALIDATE_TOPOLOGY('CITY_DATA') INTO :res_varchar;

Call completed.

PRINT res_varchar;

RES_VARCHAR
--------------------------------------------------------------------------------
TRUE

第II部 ネットワーク・データ・モデル

このマニュアルは、次の2部で構成されています。

- 「トポロジ・データ・モデル」では、Oracle Spatial and Graphのトポロジ・データ・モデル機能の概念、使用方法およびリファレンス情報を示します。

- 第II部では、Oracle Spatial and Graphのネットワーク・データ・モデル・グラフ機能の概念、使用方法およびリファレンス情報を示します。

第II部は、次の章で構成されます。

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

- SDO_NETパッケージ・サブプログラム

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

この章では、グラフ内のノードおよびリンク(頂点およびエッジ)としてモデル化される機能またはオブジェクトを表すネットワーク・データ・モデルに関連する概念および操作について説明します。このモデルは、Oracle Spatial and Graphネットワーク・データ・モデル・グラフ機能(または単にネットワーク・データ・モデル・グラフ)と呼ばれます。この章では、ユーザーが『Oracle Spatial and Graph開発者ガイド』に記載されているOracle Spatial and Graphの主な概念、データ型および操作を理解していると想定しています。

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

この章には次の項が含まれます。

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

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

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

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

- ネットワークの階層

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

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

- ネットワーク制約

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

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

- ネットワーク・データ・モデル・グラフのメタデータ・ビュー

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

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

- ネットワークの例

- ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース

- Spatial and Graphおよび関連する機能のREADMEファイル

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

多くのアプリケーションで、機能またはオブジェクトは、ネットワークのノードおよびリンクとしてモデル化されます。ネットワーク・モデルには、ノード間およびリンク間の接続性の関係、リンクの方向、ノードおよびリンクのコストなどの論理情報が含まれます。論理ネットワーク情報を使用して、ネットワークを分析し、質問(多くはパスの計算および追跡に関連する質問)に対する回答を得ることができます。たとえば、生化学パスウェイの場合、2つの化合物間で可能なすべての反応パスウェイを検出できます。または、道路ネットワークの場合、次の情報を検出できます。

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

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

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

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

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

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

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

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

この項では、Oracle Spatial and Graphでネットワーク・データ・モデル・グラフ機能を使用するための主な手順の概要を示します。また、重要な概念、構造および操作を示します(詳細は他の項を参照してください)。

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

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

- 自分自身で操作を実行します。必要なネットワーク表を作成し、ネットワーク・メタデータを更新します。(「自分自身での操作の実行」を参照してください。)

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

Spatialによる操作の実行

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

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

- 非LRS SDO_GEOMETRYオブジェクトが含まれる空間ネットワークの場合はSDO_NET.CREATE_SDO_NETWORK

- LRS SDO_GEOMETRYオブジェクトが含まれる空間ネットワークの場合はSDO_NET.CREATE_LRS_NETWORK

- トポロジ・ジオメトリ(SDO_TOPO_GEOMETRY)・オブジェクトが含まれる空間ネットワークの場合はSDO_NET.CREATE_TOPO_NETWORK

- 空間情報が含まれない論理ネットワークの場合はSDO_NET.CREATE_LOGICAL_NETWORK

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

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

2. ノード表とリンク表、および必要に応じてパス表とパスリンク表にデータを挿入します。(ノード表、リンク表、パス表およびパスリンク表については、「ネットワーク・データ・モデル・グラフ表」を参照してください。)

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

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

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

自分自身での操作の実行

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

1. SDO_NET.CREATE_NODE_TABLEプロシージャを使用して、ノード表を作成します。(ノード表については、「ノード表」を参照してください。)

2. ノード表にデータを挿入します。

3. SDO_NET.CREATE_LINK_TABLEプロシージャを使用して、リンク表を作成します。(リンク表については、「リンク表」を参照してください)。

4. リンク表にデータを挿入します。

5. オプションで、SDO_NET.CREATE_PATH_TABLEプロシージャを使用して、パス表を作成します。(パス表については、「パス表」を参照してください)。

6. パス表を作成した場合は、SDO_NET.CREATE_PATH_LINK_TABLEプロシージャを使用して、パスリンク表を作成します。(パスリンク表については、「パスリンク表」を参照してください)。

7. パス表を作成した場合に、パスを作成する必要がある場合は、パス表にデータを挿入します。

8. パス表にデータを挿入した場合、パスリンク表に適切な行を挿入します。

9. ネットワークに関する情報が含まれる行をUSER_SDO_NETWORK_METADATAビューに挿入します。(USER_SDO_NETWORK_METADATAビューについては、「xxx_SDO_NETWORK_METADATAビュー」を参照してください。)

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

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

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

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

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

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

ネットワークは、接続性を使用してオブジェクト間の関係を表す数学的なグラフです。接続性は、空間の近接性に基づく場合と、基づかない場合があります。たとえば、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-2に示すように、リンクの索引と、パスにおける1つ前のノードからの距離の割合として定義されます。

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

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

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

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

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

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

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

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

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

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

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

ネットワークは、アプリケーションで、異なるオブジェクトが相互に接続されている方法を確認するために使用されます。接続性は、通常、近接性およびパスの関係で表現されます。2つのノードが1つのリンクで接続されている場合、これらのノードは近接しています。多くの場合、任意の2つのノード間には複数のパスが存在し、コストが最低になるパスを検出する必要がある場合があります。

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

道路ネットワークの例

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

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

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

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

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

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

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

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

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

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

生化学ネットワークの例

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

ネットワーク階層

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注意:

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

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

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

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

この項には次のサブセクションが含まれます:

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

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

ユーザー定義データの例(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();

ユーザー定義データの例(カスタムのユーザー・データ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メソッドの実装について説明します。

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();

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);
}
}

フィーチャ・モデリング

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

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

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

sdo_net.add_feature_layer(
'US_ROAD_NETWORK', --network name
'HOTEL',           --feature layer name
2,                 --feature layer type: point on link
'HOTEL_TAB',       --feature table or view name
'HOTEL_NET_REL',   --relation table or view name
null);             --hierarchy table or view name

2. フィーチャ・ユーザー・データを登録します(アプリケーション固有のフィーチャ属性がフィーチャ分析で役立つ可能性がある場合)。
フィーチャ・ユーザー・データを登録するには、TABLE_TYPE列をフィーチャ表の名前に設定することを除き、ネットワークのノードまたはリンクのユーザー・データを登録する場合と同じように、XXX_SDO_NETWORK_USER_DATAビューにエントリを追加します。次の例では、ホテル名をホテル・フィーチャのユーザー・データとして追加します。

INSERT INTO USER_SDO_NETWORK_USER_DATA(
network, table_type, data_name, data_type, category_id)
VALUES(
'US_ROAD_NETWORK',  --network name
'HOTEL_TAB',           --feature table or view name
'NAME',             --user data name, i.e., name of the user data column
'VARCHAR2',         --user data type
3);                 --user data category

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

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

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

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

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

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

この項では、フィーチャ・モデリングに関連する一部の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)

ネットワーク制約

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

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

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

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

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

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

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

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

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

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

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

注意:

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

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

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

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

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

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

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

パーティションBLOBの生成

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

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

パーティションBLOBを生成するには、SDO_NET.GENERATE_PARTITION_BLOBSプロシージャを使用します。パーティションBLOBおよびそのメタデータは、パーティションBLOB表に格納されます(「パーティションBLOB表」を参照)。

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

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

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

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

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

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

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

ネットワークの分析

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

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

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

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

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

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

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

計算済の分析結果

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

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

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

空間ネットワークの接続性情報は、ノード表およびリンク表の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-3で説明する列が含まれるノード表があります。(含まれる列は、ネットワークのタイプ、およびネットワークが階層であるかどうかによって異なります。)

表5-3 ノード表の列

列名

データ型

説明

NODE_ID

NUMBER

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

NODE_NAME

VARCHAR2(32)

ノード名です。

NODE_TYPE

VARCHAR2(24)

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

ACTIVE

VARCHAR2(1)

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

PARTITION_ID

NUMBER

(使用されていません。かわりに、ノードとパーティションの関係がパーティション表に格納されます(「パーティション表」を参照。))

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

SDO_GEOMETRY、SDO_TOPO_GEOMETRYまたはNUMBER

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

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

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

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

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

<node_cost_column>

NUMBER

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

HIERARCHY_LEVEL

NUMBER

階層ネットワークでのみ使用されます。このノードのネットワーク階層でのレベルを示す数値です。(「ネットワークの階層」では、ネットワークの階層を説明します。)

PARENT_NODE_ID

NUMBER

階層ネットワークでのみ使用されます。このノードの親ノードのノードIDです。(「ネットワークの階層」では、ネットワークの階層を説明します。)

リンク表

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

表5-4 リンク表の列

列名

データ型

説明

LINK_ID

NUMBER

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

LINK_NAME

VARCHAR2(32)

リンク名です。

START_NODE_ID

NUMBER

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

END_NODE_ID

NUMBER

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

LINK_TYPE

VARCHAR2(24)

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

ACTIVE

VARCHAR2(1)

リンクがアクティブである(ネットワークで認識されている)場合はY、リンクがアクティブでない場合はNです。

LINK_LEVEL

NUMBER

リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

<link_geometry_column>、またはGEOM_ID、START_MEASUREおよびEND_MEASURE

SDO_GEOMETRY、SDO_TOPO_GEOMETRYまたはNUMBER

空間(SDO、非LRS)ネットワークの場合、リンクに関連付けられたSDO_GEOMETRYオブジェクトです。

空間トポロジ・ネットワークの場合、リンクに関連付けられたSDO_TOPO_GEOMETRYオブジェクトです。

空間LRSネットワークの場合、リンクに関連付けられたジオメトリ・オブジェクトのGEOM_ID列、START_MEASURE列およびEND_MEASURE列の値(すべてNUMBER型)です。

論理ネットワークの場合、この列は使用しません。

空間SDOネットワークまたはトポロジ・ネットワークの場合、実際の列名は、デフォルト名、またはSDO_NET.CREATE_LINK_TABLEプロシージャのコール時にgeom_columnパラメータの値として指定した名前のいずれかになります。

<link_cost_column>

NUMBER

リンクに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。実際の列名は、デフォルト名、またはSDO_NET.CREATE_LINK_TABLEプロシージャのコール時にcost_columnパラメータの値として指定した名前のいずれかになります。コスト値は、リンクの推定運転時間など、必要な任意の値を表すことができます。

PARENT_LINK_ID

NUMBER

階層ネットワークでのみ使用されます。このリンクの親リンクのリンクIDです。(「ネットワークの階層」では、ネットワークの階層の親子関係を説明します。)

BIDIRECTED

VARCHAR2(1)

有向ネットワークの場合のみ使用されます。リンクが無向(開始ノードから終了ノード、終了ノードから開始ノードのどちらの方向にも進むことが可能)の場合はY、有向(開始ノードから終了ノードの方向にのみ進むことが可能)の場合はNです。

パス表

各ネットワークにパス表を作成できます。パスは、リンクを順につなげたもので、通常、ネットワーク分析の結果として作成されます。パス表は、この分析の結果を格納する方法を提供します。各パス表について、関連パスリンク表を作成する必要があります(「パスリンク表」を参照)。各パス表には、表5-5で説明する列が含まれます。

表5-5 パス表の列

列名

データ型

説明

PATH_ID

NUMBER

ネットワーク内でこのパスを一意に識別するID番号です。

PATH_NAME

VARCHAR2(32)

パス名です。

PATH_TYPE

VARCHAR2(24)

パスのタイプを識別するユーザー定義の文字列です。

START_NODE_ID

NUMBER

パスの最初のリンクを開始するノードのノードIDです。

END_NODE_ID

NUMBER

パスの最後のリンクを終了するノードのノードIDです。

COST

NUMBER

パスに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。コスト値は、パスの推定運転時間など、必要な任意の値を表すことができます。

SIMPLE

VARCHAR2(1)

単純なパスの場合はY、複雑なパスの場合はNです。単純なパスでは、各リンクを1回使用することによって開始ノードから終了ノードまで横断できる、リンクの順序付けされたリストが形成されます。複雑なパスでは、開始ノードから終了ノードまで移動するために、複数のオプションがあります。

<path_geometry_column>

SDO_GEOMETRY

論理ネットワークを除くすべてのネットワーク・タイプの場合、パスに関連付けられたジオメトリ・オブジェクトです。実際の列名は、デフォルト名、またはSDO_NET.CREATE_PATH_TABLEプロシージャのコール時にgeom_columnパラメータの値として指定した名前のいずれかになります。

論理ネットワークの場合、この列は使用しません。

パスリンク表

各パス表(「パスリンク表」を参照)について、パスリンク表を作成する必要があります。パスリンク表の各行は、ネットワークのパス内でリンクを一意に識別します。つまり、PATH_ID、LINK_IDおよびSEQ_NOの値の組合せが、ネットワーク内で一意である必要があります。パスリンク表での行の順序は、重要ではありません。各パスリンク表には、表5-6で説明する列が含まれます。

表5-6 パスリンク表の列

列名

データ型

説明

PATH_ID

NUMBER

ネットワークのパスのID番号です。

LINK_ID

NUMBER

ネットワークのリンクのID番号です。

SEQ_NO

NUMBER

パスでのリンクの一意の順序番号です。(順序番号は、1から始まります。)順序番号を使用すると、同じノードおよびリンクをパスに繰り返し含めることができます。

サブパス表

各パスには、1つ以上の対応するサブパスを作成できます。ネットワーク内のすべてのサブパスに関する情報は、サブパス表に格納されます。サブパスは、パスに沿った部分的なパスです(「ネットワーク・データ・モデル・グラフの概念」を参照)。サブパス表には、表5-7で説明する列が含まれます。

表5-7 サブパス表の列

列名

データ型

説明

SUBPATH_ID

NUMBER

このサブパスを参照パス内で一意に識別するID番号です。

SUBPATH_NAME

VARCHAR2(32)

サブパス名です。

SUBPATH_TYPE

VARCHAR2(24)

サブパスのタイプを識別するユーザー定義の文字列です。

REFERENCE_PATH_ID

NUMBER

このサブパスを含むパスのパスID番号です。

START_LINK_INDEX

NUMBER

サブパスの開始を定義するために使用するリンクのリンクIDです。たとえば、「ネットワーク・データ・モデル・グラフの概念」の図5-2では、START_LINK_INDEXは0で、START_PERCENTAGEは0.65です。

END_LINK_INDEX

NUMBER

サブパスの終了を定義するために使用するリンクのリンクIDです。たとえば、「ネットワーク・データ・モデル・グラフの概念」の図5-2では、END_LINK_INDEXは6で、END_PERCENTAGEは0.5です。

START_PERCENTAGE

NUMBER

パスのSTART_LINK_INDEXとその次のリンクの間の距離の割合で、サブパスの開始点を表します。正の数値または負の数値となります。たとえば、「ネットワーク・データ・モデル・グラフの概念」の図5-2では、START_LINK_INDEXは0で、START_PERCENTAGEは0.65です。(この場合の割合の値は0から1.0の範囲で表されるので、0.65は65パーセントです。)

END_PERCENTAGE

NUMBER

パスのEND_LINK_INDEXとその次のリンクの間の距離の割合で、サブパスの終了点を表します。正の数値または負の数値となります。たとえば、「ネットワーク・データ・モデル・グラフの概念」の図5-2では、END_LINK_INDEXは6で、END_PERCENTAGEは0.5です。(この場合の割合の値は0から1.0の範囲で表されるので、0.5は50パーセントです。)

COST

NUMBER

サブパスに関連付けられるコスト値で、ネットワークを使用するアプリケーションによって使用されます。コスト値は、パスの推定運転時間など、必要な任意の値を表すことができます。

GEOM

SDO_GEOMETRY

論理ネットワークを除くすべてのネットワーク・タイプの場合、サブパスに関連付けられたジオメトリ・オブジェクトです。実際の列名は、デフォルト名、またはSDO_NET.CREATE_SUBPATH_TABLEプロシージャのコール時にgeom_columnパラメータの値として指定した名前のいずれかになります。

論理ネットワークの場合、この列は使用しません。

パーティション表

パーティション化された各ネットワークには、パーティション表があります。パーティション化されたネットワークの詳細は、「ロード・オンデマンドを使用したネットワーク分析」を参照してください。各パーティション表には、表5-8で説明する列が含まれます。

表5-8 パーティション表の列

列名

データ型

説明

NODE_ID

NUMBER

ノードのID番号です。

PARTITION_ID

NUMBER

パーティションのID番号です。ネットワーク内で一意である必要があります。

LINK_LEVEL

NUMBER

リンク・レベルです(リンク・レベルは、リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます)。

パーティション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-9で説明する列が含まれます。

表5-9 パーティションBLOB表の列

列名

データ型

説明

LINK_LEVEL

VARCHAR2(32)

リンク・レベルです(リンク・レベルは、リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます)。

PARTITION_ID

NUMBER

パーティションのID番号です。

BLOB

BLOB

指定したパーティション内の指定したリンク・レベルを表すバイナリ・ラージ・オブジェクト(BLOB)です。

NUM_INODES

NUMBER

BLOBの内部ノード数(BLOB内の合計ノード数)です。

NUM_ENODES

NUMBER

外部ノードの数です。外部ノードとは、BLOB外にあるノードで、このノードが一端を構成するリンクのもう一端のノードがBLOB内にあるものを指します。

NUM_ILINKS

NUMBER

BLOBの内部リンク(完全にBLOB内にあるリンク)の数です。

NUM_ELINKS

NUMBER

外部リンクの数です。外部リンクとは、1つのノードが内部(BLOB内)で、1つのノードが外部(BLOB外)となっているリンクです。

NUM_INLINKS

NUMBER

外部からのリンクの数です。外部からのリンクとは、開始ノードがBLOB外にあり、終了ノードがBLOB内にある外部リンクです。

NUM_OUTLINKS

NUMBER

外部へのリンクの数です。外部へのリンクとは、開始ノードがBLOB内にあり、終了ノードがBLOB外にある外部リンクです。

USER_DATA_INCLUDED

VARCHAR2(1)

BLOBにユーザー・データを含めることができる場合はY、BLOBにユーザー・データを含めることができない場合はNです。

接続されているコンポーネント表

各ネットワークには、接続されているコンポーネント表を作成できます。この表には各ノードのコンポーネントIDが格納されます。同じ接続されているコンポーネントのノードは、同じコンポーネントIDを持ちます。この情報が表に格納されていると、ネットワーク分析の多くの操作でパフォーマンスが向上します。接続されているコンポーネント表を作成し、後から表の内容を更新するには、SDO_NET.FIND_CONNECTED_COMPONENTSプロシージャを使用します。このプロシージャでは、接続されているコンポーネント表の名前をパラメータの1つとして指定します。接続されているコンポーネントに関する計算済情報の使用の詳細は、「計算済分析結果」を参照してください。

各接続されているコンポーネント表には、表5-10で説明する列が含まれます。

表5-10 接続されているコンポーネント表の列

列名

データ型

説明

LINK_LEVEL

NUMBER

コンポーネントの割当てのリンク・レベルです。(リンク・レベルは、リンクの優先順位です。ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。)

NODE_ID

NUMBER

到達可能なその他すべてのコンポーネントの算出元となるノードのID番号です。

COMPONENT_ID

NUMBER

指定したノードから到達可能なコンポーネントのID番号です。

ノード階層表(オプション)

各ネットワークにノード階層表を持つことができ、この表には、ネットワークに階層がある場合には親子関係が格納されます(「ネットワークの階層」を参照)。

ノード階層表が存在する場合、この表には表5-11で説明する列が含まれます。

表5-11 ノード階層表の列

列名

データ型

説明

PARENT_ID

NUMBER

親ノードID (親ネットワーク内のノードID、あるいは子ネットワーク内のグループID、クラスタIDまたはパーティションID)です。

CHILD_ID

NUMBER

子ID (子ネットワーク内のノードID)です。

LINK_LEVEL

NUMBER

親子関係が定義されるリンク・レベルです。リンク・レベルの高いネットワークは、リンク・レベルの低いネットワークのサブネットワークとなります。リンク・レベルnのネットワークは、nより大きいか等しいリンク・レベルを持つリンクのみで構成されます。

ノード・レベル表(オプション)

各ネットワークに、各上位レベル・ノード(最大リンク・レベルが1より大きいノード)の最大リンク・レベルに関する情報を格納するノード・レベル表を作成できます。ノード・レベル表は、マルチレベル・ネットワークでのみ役立ち、この表を使用すると、ノード表とリンク表からのパーティションのロード時間を短縮できます。

ノード・レベル表が存在する場合、この表には表5-12で説明する列が含まれます。

表5-12 ノード・レベル表の列

列名

データ型

説明

NODE_ID

NUMBER

最大リンク・レベルが1より大きいノードのIDです。

LINK_LEVEL

NUMBER

ノードが接続されている最大リンク・レベルです。

フィーチャ・レイヤー表

この項の表は、フィーチャ・モデリングに関連しています(「フィーチャ・モデリング」を参照)。これらの表は、登録された各フィーチャ・レイヤーを説明するために使用されます。

ほとんどのアプリケーションには、フィーチャ・エンティティ情報、フィーチャとネットワークの関係またはフィーチャ階層関係を含む表がすでに存在していますが、これらの表のスキーマがNDM表のスキーマと異なる場合があります。このような場合は、既存の表のスキーマをNDM表のスキーマにマップするビューを作成できます。

フィーチャ表

フィーチャ表には、フィーチャ・エンティティ情報が含まれます。各フィーチャ表には、FEATURE_ID列が含まれている必要があります。フィーチャ分析で役立つ可能性があるその他のフィーチャ属性は、ユーザー・データとして登録できます。

各フィーチャ表には、表5-13で説明する列が含まれます。

表5-13 フィーチャ表の列

列名

データ型

説明

FEATURE_ID

NUMBER

フィーチャのIDです。

(必要に応じた追加の列)

(必要に応じて)

(フィーチャ分析で役立つ可能性があるその他のフィーチャ属性)

フィーチャ要素関係表

フィーチャ要素関係表には、フィーチャ要素とネットワーク要素(ノードとリンク)間の関係に関する情報が含まれます。

フィーチャ要素関係表には、表5-14で説明する列が含まれます。

表5-14 フィーチャ要素関係表の列

列名

データ型

説明

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-15で説明する列が含まれます。

表5-15 フィーチャ階層表の列

列名

データ型

説明

PARENT_ID

NUMBER

親フィーチャのIDです。

CHILD_LAYER_ID

NUMBER

子フィーチャのフィーチャ・レイヤーIDです。

CHILD_ID

NUMBER

子フィーチャのIDです。

SEQUENCE

NUMBER

子フィーチャの順序番号です。

ネットワーク・データ・モデル・グラフのメタデータ・ビュー

スキーマ(ユーザー)ごとに、xxx_SDO_NETWORK_METADATAという一連のネットワーク・メタデータ・ビューがあります。xxxは、USERまたはALLです。これらのビューは、Spatial and Graphによって作成されます。

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-16に示す列が含まれますが、USER_SDO_NETWORK_METADATAビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-16 xxx_SDO_NETWORK_METADATAビューの列

列名

データ型

目的

OWNER

VARCHAR2(32)

ネットワークの所有者です(ALL_SDO_NETWORK_METADATAビューのみ)。

NETWORK

VARCHAR2(24)

ネットワーク名です。

NETWORK_ID

NUMBER

ネットワークのID番号です(Spatial and Graphによって割り当てられます)。

NETWORK_CATEGORY

VARCHAR2(12)

ネットワークのノードおよびリンクが空間ジオメトリに関連付けられている場合はSPATIAL、ネットワークのノードおよびリンクが空間ジオメトリに関連付けられていない場合はLOGICALです。値がLOGICALの場合、ネットワーク・データ・モデル・グラフのPL/SQL APIおよびJava APIで、ノード、リンクおよびパスの空間属性は無視されます。

GEOMETRY_TYPE

VARCHAR2(24)

NETWORK_CATEGORYがSPATIALの場合は、ノードおよびリンクのジオメトリ・タイプを示す値です。非LRS SDO_GEOMETRYオブジェクトの場合はSDO_GEOMETRY、LRS SDO_GEOMETRYオブジェクトの場合はLRS_GEOMETRY、SDO_TOPO_GEOMETRYオブジェクトの場合はTOPO_GEOMETRYです。

NETWORK_TYPE

VARCHAR2(24)

ネットワークのタイプを識別するユーザー定義の文字列です。

NO_OF_HIERARCHY_LEVELS

NUMBER

ネットワーク階層のレベルの数です。階層がない場合は1が含まれます。(ネットワークの階層については、「ネットワークの階層」を参照してください。)

NO_OF_PARTITIONS

NUMBER

(現在は使用されていません)

LRS_TABLE_NAME

VARCHAR2(32)

GEOMETRY_TYPEがSDO_GEOMETRYの場合、ノードに関連付けられたジオメトリが含まれる表の名前です。

LRS_GEOM_COLUMN

VARCHAR2(32)

LRS_TABLE_NAMEに表名が指定されている場合、その表のジオメトリ列です。

NODE_TABLE_NAME

VARCHAR2(32)

GEOMETRY_TYPEがSDO_GEOMETRYの場合、ノードに関連付けられたジオメトリが含まれる表の名前です。(ノード表については、「ノード表」を参照してください。)

NODE_GEOM_COLUMN

VARCHAR2(32)

NODE_TABLE_NAMEに表名が指定されている場合、その表のジオメトリ列です。

NODE_COST_COLUMN

VARCHAR2(1024)

NODE_TABLE_NAMEに表名が指定されている場合、その表のコスト列です。またはコスト値を計算するPL/SQLファンクションです。

NODE_PARTITION_COLUMN

VARCHAR2(32)

(現在は使用されていません)。

NODE_DURATION_COLUMN

VARCHAR2(32)

NODE_TABLE_NAMEに表名が指定されている場合、その表の継続時間列(オプション)です。この列には、ユーザー定義項目の数値(ノードに関連付けられた時間(分)など)を含めることができます。

LINK_TABLE_NAME

VARCHAR2(32)

GEOMETRY_TYPEがSDO_GEOMETRYの場合、リンクに関連付けられたジオメトリが含まれる表の名前です。(リンク表については、「リンク表」を参照してください。)

LINK_GEOM_COLUMN

VARCHAR2(32)

LINK_TABLE_NAMEに表名が指定されている場合、その表のジオメトリ列です。

LINK_DIRECTION

VARCHAR2(12)

ネットワークのすべてのリンクのタイプを示す値です。UNDIRECTEDまたはDIRECTEDになります。

LINK_COST_COLUMN

VARCHAR2(1024)

LINK_TABLE_NAMEに表名が指定されている場合、各リンクのコスト値が含まれるオプションの数値列です。またはコスト値を計算するPL/SQLファンクションです。

LINK_PARTITION_COLUMN

VARCHAR2(32)

(現在は使用されていません)

LINK_DURATION_COLUMN

VARCHAR2(32)

LINK_TABLE_NAMEに表名が指定されている場合、その表の継続時間列(オプション)です。この列には、ユーザー定義項目の数値(リンクに関連付けられた時間(分)など)を含めることができます。

PATH_TABLE_NAME

VARCHAR2(32)

パスに関する情報が含まれるオプションの表の名前です。(パス表については、「パス表」を参照してください。)

PATH_GEOM_COLUMN

VARCHAR2(32)

PATH_TABLE_NAMEが空間ネットワークに関連付けられている場合、その表のジオメトリ列です。

PATH_LINK_TABLE_NAME

VARCHAR2(32)

各パスのリンクに関する情報が含まれるオプションの表の名前です。(パスリンク表については、「パスリンク表」を参照してください。)

SUBPATH_TABLE_NAME

VARCHAR2(32)

サブパスに関する情報が含まれるオプションの表の名前です。(サブパス表については、「サブパス表」を参照してください。)

SUBPATH_GEOM_COLUMN

VARCHAR2(32)

SUBPATH_TABLE_NAMEが空間ネットワークに関連付けられている場合、その表のジオメトリ列です。

PARTITION_TABLE_NAME

VARCHAR2(32)

パーティション化されたネットワークの場合: パーティション表の名前です。(パーティション表については、「パーティション表」を参照してください。)

PARTITION_BLOB_TABLE_NAME

VARCHAR2(32)

パーティションBLOBが生成されているパーティション化されたネットワークの場合: パーティションBLOB表の名前です。(パーティションBLOB表については、「パーティションBLOB表」を参照してください。)

COMPONENT_TABLE_NAME

VARCHAR2(32)

計算済の接続されているコンポーネント(「計算済分析結果」を参照)に関する情報を含む表の名前です。(接続されているコンポーネント表については、「接続されているコンポーネント表」を参照してください。)

NODE_LEVEL_TABLE_NAME

VARCHAR2(32)

マルチレベル・ネットワークのノード・レベルに関する情報を含む表の名前です。この表は、SDO_NET.GENERATE_NODE_LEVELSプロシージャでnode_level_table_nameパラメータとして指定します。

TOPOLOGY

VARCHAR2(32)

(SDO_NET.CREATE_TOPO_NETWORKプロシージャで作成した)SDO_TOPO_GEOMETRYオブジェクトが含まれる空間ネットワークの場合、トポロジの名前です。

USER_DEFINED_DATA

VARCHAR2(1)

ネットワークにユーザー定義データが含まれる場合はY、ネットワークにユーザー定義のデータが含まれない場合はNです。

EXTERNAL_REFERENCES

VARCHAR2(1)

(現在は使用されていません)

CHILD_NETWORK

VARCHAR2(32)

子ネットワークの名前です(ネットワーク階層が関係している場合)。

HIERARCHY_TABLE_NAME

VARCHAR2(32)

階層表の名前です(ネットワーク階層が関係している場合)。

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-17に示す列が含まれますが、USER_SDO_NETWORK_CONSTRAINTSビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-17 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クラスです。

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-17に示す列が含まれますが、USER_SDO_NETWORK_USER_DATAビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-18 xxx_SDO_NETWORK_USER_DATAビューの列

列名

データ型

目的

OWNER

VARCHAR2(32)

ネットワーク制約の所有者です(ALL_SDO_NETWORK_USER_DATAビューのみ)。

NETWORK

VARCHAR2(32)

ネットワーク名です。

TABLE_TYPE

VARCHAR2(12)

ユーザー定義データを含む表のタイプ: NODE、LINK、PATHまたはSUBPATHです。

xxx_SDO_USER_NETWORK_USER_DATAビューを介してフィーチャ・ユーザー・データが登録されている場合、TABLE_TYPEはフィーチャ表の名前に設定されます。

DATA_NAME

VARCHAR2(32)

ユーザー定義データを含む列の名前です。

DATA_TYPE

VARCHAR2(12)

ユーザー定義データのデータ型: VARCHAR2、INTEGER、NUMBER、DATE、TIMESTAMPまたはSDO_GEOMETRYです。

DATA_LENGTH

NUMBER(38)

DATA_TYPEがVARCHAR2である場合、ユーザー定義データの長さです。

CATEGORY_ID

NUMBER

ユーザー・データ・カテゴリID (負でない数値、デフォルト値は0)です。カテゴリIDを使用すると、アプリケーションごとにユーザー・データをグループ化できます。カテゴリ0は、すべてのアプリケーションに有効な汎用ユーザー・データに使用するために予約されています。ユーザー・データを目的ごとに異なるカテゴリにグループ化できますので、ネットワーク分析中は、関連するユーザー・データ・カテゴリのみがメモリーにロードされ、実行時のメモリー使用量が削減されます。

たとえば、道路ネットワークの場合、カテゴリ0のユーザー・データには、リンクの制限速度およびファンクション・クラスと、ノードの(x, y)座標を含めることができ、トラック輸送関連のユーザー・データをカテゴリ1に、またトラフィック関連のユーザー・データをカテゴリ2に含めることができます。

ユーザー定義データを使用するには、該当するxxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)のUSER_DEFINED_DATA列の値にYを設定する必要があります。

ユーザー定義データの使用例については、「ユーザー定義データの例(PL/SQLおよびJava)」を参照してください。

xxx_SDO_NETWORK_USER_DATAビューを介して定義されたユーザー・データについては、ネットワーク分析中にユーザー・データにアクセスする場合、デフォルトのユーザー・データI/O実装(LODUserDataIOSDO)が使用されます。ただし、一部のユーザー・データは、ノード表またはリンク表に含まれていないため、xxx_SDO_NETWORK_USER_DATAビューを介して登録できません。このようなユーザー・データについては、ユーザー・データI/Oインタフェースの独自の実装を提供する必要があります。カスタムのユーザー・データI/Oインタフェースを実装する一般的な方法は、ノードおよびリンクのユーザー・データに対応したBLOB (各パーティションごとに1つのBLOB)を生成し、次にネットワーク分析中にBLOBからユーザー・データ情報を取得することです。

ユーザー定義データ(カテゴリ分けされたユーザー・データ)の複数のカテゴリを単一のネットワークに関連付けることもできます。たとえば、マルチモーダル・ネットワーク(「マルチモーダル・ネットワークと時間の例」を参照)では、リンクのマルチモーダル属性の他に、運転に関連する属性(制限速度など)をリンクに関連付ける必要がある場合、ユーザー定義データを2つのカテゴリ(1つは運転に関連する属性用で、もう1つはマルチモーダル属性用)に整理できます。

xxx_SDO_NETWORK_FEATUREビュー

次のビューには、ネットワーク・フィーチャ・レイヤー(「フィーチャおよびフィーチャ・レイヤー」を参照)に関する情報が含まれます。

- USER_SDO_NETWORK_FEATUREには、ユーザーが所有するすべてのネットワーク・フィーチャ・レイヤーに関する情報が含まれます。

- ALL_SDO_NETWORK_FEATUREには、ユーザーがSELECT権限を持つすべてのネットワーク・フィーチャ・レイヤーに関する情報が含まれます。

USER_SDO_NETWORK_FEATUREビューとALL_SDO_NETWORK_FEATUREビューのどちらにも表5-17に示す列が含まれますが、USER_SDO_NETWORK_FEATUREビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表5-19 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つはマルチモーダル属性用)に整理できます。

ネットワーク・データ・モデル・グラフの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ノード間の最短パスの計算で検討されるのはコスト値であるため、この方法は最短パスを探す場合に利用できます。ただし、リンクに対して空間ジオメトリ・オブジェクトまたは終了メジャー値を設定する場合は、この方法を利用できません。

- ネットワーク・オブジェクトを変更しない場合(ネットワークの分析操作または情報取得のみを実行する場合)は、ネットワーク・メモリー・オブジェクトを読取り専用で(更新不可を指定して)作成することで、パフォーマンスを向上できます。

ネットワーク・データ・モデル・グラフのPL/SQLインタフェース

SDO_NETパッケージは、データベース・サーバー上でネットワークの作成、アクセスおよび管理を行うためのサブプログラムを提供します。SDO_NETのファンクションとプロシージャの使用例は、「ネットワークの例」の例5-5に示しています。

SDO_NETサブプログラムは、次の論理カテゴリにグループ化できます。

- ネットワークの作成
SDO_NET.CREATE_SDO_NETWORK

SDO_NET.CREATE_LRS_NETWORK

SDO_NET.CREATE_TOPO_NETWORK

SDO_NET.CREATE_LOGICAL_NETWORK

- ネットワークのコピーおよび削除
SDO_NET.COPY_NETWORK

SDO_NET.DROP_NETWORK

- ネットワーク表の作成
SDO_NET.CREATE_NODE_TABLE

SDO_NET.CREATE_LINK_TABLE

SDO_NET.CREATE_PATH_TABLE

SDO_NET.CREATE_PATH_LINK_TABLE

SDO_NET.CREATE_LRS_TABLE

- ネットワーク・オブジェクトの検証
SDO_NET.VALIDATE_NETWORK

SDO_NET.VALIDATE_NODE_SCHEMA

SDO_NET.VALIDATE_LINK_SCHEMA

SDO_NET.VALIDATE_PATH_SCHEMA

SDO_NET.VALIDATE_LRS_SCHEMA

- 情報の取得(ネットワークに関する情報の取得、特性の確認)
SDO_NET.GET_CHILD_LINKS

SDO_NET.GET_CHILD_NODES

SDO_NET.GET_GEOMETRY_TYPE

SDO_NET.GET_IN_LINKS

SDO_NET.GET_LINK_COST_COLUMN

SDO_NET.GET_LINK_DIRECTION

SDO_NET.GET_LINK_GEOM_COLUMN

SDO_NET.GET_LINK_GEOMETRY

SDO_NET.GET_LINK_TABLE_NAME

SDO_NET.GET_LRS_GEOM_COLUMN

SDO_NET.GET_LRS_LINK_GEOMETRY

SDO_NET.GET_LRS_NODE_GEOMETRY

SDO_NET.GET_LRS_TABLE_NAME

SDO_NET.GET_NETWORK_TYPE

SDO_NET.GET_NO_OF_HIERARCHY_LEVELS

SDO_NET.GET_NO_OF_LINKS

SDO_NET.GET_NO_OF_NODES

SDO_NET.GET_NODE_DEGREE

SDO_NET.GET_NODE_GEOM_COLUMN

SDO_NET.GET_NODE_GEOMETRY

SDO_NET.GET_NODE_IN_DEGREE

SDO_NET.GET_NODE_OUT_DEGREE

SDO_NET.GET_NODE_TABLE_NAME

SDO_NET.GET_OUT_LINKS

SDO_NET.GET_PATH_GEOM_COLUMN

SDO_NET.GET_PATH_TABLE_NAME

SDO_NET.IS_HIERARCHICAL

SDO_NET.IS_LOGICAL

SDO_NET.IS_SPATIAL

SDO_NET.LRS_GEOMETRY_NETWORK

SDO_NET.NETWORK_EXISTS

SDO_NET.SDO_GEOMETRY_NETWORK

SDO_NET.TOPO_GEOMETRY_NETWORK

SDO_NETの各ファンクションおよびプロシージャのリファレンス情報については、「SDO_NETパッケージ・サブプログラム」を参照してください。

ネットワーク・データ・モデル・グラフのJavaインタフェース

ネットワーク・データ・モデル・グラフの機能には、ロード・オンデマンドのJavaインタフェースが含まれています。このインタフェースに関する完全なリファレンス情報については、『Oracle Spatial and Graph Java API Reference』を参照してください。ロード・オンデマンドのJavaインタフェースのクラスは、oracle.spatial.network.lodパッケージとそのサブパッケージに含まれています。

Spatial and Graph Javaクラス・ライブラリは、<ORACLE_HOME>/md/jlib/ディレクトリの下の.jarファイルにあります。

ネットワーク・メタデータとデータの管理

Java APIを使用して、次のようなネットワーク・メタデータとデータの管理操作を実行できます。

- ノードおよびリンクのデータの挿入、削除および変更

- データベースからのネットワークのロード

- データベースへのネットワークの格納

- データベースへのネットワーク・メタデータの格納

- ネットワーク・メタデータの属性の変更

ロード・オンデマンド方式を使用したネットワーク分析

oracle.spatial.network.lod.NetworkAnalystクラスを使用し、ロード・オンデマンド方式を使用して次のようなネットワーク分析操作を実行できます。

- 最短パス: グラフ理論の一般的な推移閉包問題です。任意の開始ノードおよび終了ノードについて、最短パスを検索します。

- 到達可能性: 任意のノードについて、このノードに到達可能なすべてのノードを検索するか、またはこのノードから到達可能なすべてのノードを検索します。

- コスト内分析: 任意のターゲット・ノードおよびコストについて、任意のコスト内でターゲット・ノードから到達可能なすべてのノードを検索します。

- 最近隣分析: 任意のターゲット・ノードおよび近くにある複数のノードについて、近くにあるノードおよびそのノードから任意のターゲット・ノードに移動するためのコストを検索します。

- 動的データ入力: ネットワーク更新情報を使用してNetworkUpdateオブジェクトを作成して使用します。

- ユーザー定義のリンクおよびノードのコスト計算表: リンクまたはノードのコストを計算する方法を定義します。

ネットワーク・データ・モデル・グラフの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を参照してください。

ユーザー指定の実装

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のチュートリアル(「ネットワーク・データ・モデルのチュートリアルとその他のリソース」を参照)を参照してください。

複数のスキーマが関係している場合のネットワーク・アクセス

ネットワーク所有者以外のデータベース・ユーザーがメモリーにネットワークを読み込む場合は、次のいずれかを実行する必要があります。

- 所有者以外のユーザーごとに、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のネットワーク・データ・モデル・グラフ表に対する適切な権限を所有していても発生します。

この問題に対処するには、「複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス」または「複数のスキーマが関係している場合のビューを使用したアクセス」のいずれかの方法を使用する必要があります。

複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス

(適切な権限のある)所有者以外のユーザーがネットワークにアクセスできるように、ネットワーク・メタデータでネットワーク所有者を指定します。ネットワークへのアクセスを許可する所有者以外のユーザーごとに、次の手順を実行します。

1. ユーザーに、必要なネットワーク・データ・モデル・グラフ表へのSELECTまたはREADアクセス権が付与されていることを確認します。このアクセス権がユーザーに付与されていない場合は、ネットワーク所有者として接続し、アクセス権を付与します。たとえば、User1として接続し、次の文を実行します。

GRANT select ON network1_node$ TO user2;
GRANT select ON network1_link$ TO user2;
GRANT select ON network1_path$ TO user2;
GRANT select ON network1_plink$ TO user2;

2. 所有者以外のユーザーとして接続します。たとえば、User2として接続します。

3. USER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)におけるネットワークについて、ネットワーク所有者のスキーマ名を使用してネットワーク・データ・モデル・グラフ表を修飾します。たとえば、ネットワークがこのビューにまだ定義されていない場合は、User2としての接続中に次を実行します。

INSERT INTO user_sdo_network_metadata
(network, network_category, geometry_type,
node_table_name,node_geom_column,
link_table_name, link_geom_column, link_direction,
path_table_name, path_geom_column,
path_link_table_name)
VALUES
('NETWORK1','SPATIAL', 'SDO_GEOMETRY',
'USER1.NETWORK1_NODE$', 'GEOMETRY',
'USER1.NETWORK1_LINK$', 'GEOMETRY', 'DIRECTED',
'USER1.NETWORK1_PATH$', 'GEOMETRY',
'USER1.NETWORK1_PLINK$');

ネットワークがこのビューにすでに定義されている場合は、定義を更新して、各表名をスキーマ名で修飾します。次に例を示します。

UPDATE USER_SDO_NETWORK_METADATA
SET node_table_name = 'USER1.NETWORK1_NODE$',
link_table_name = 'USER1.NETWORK1_LINK$',
path_table_name = 'USER1.NETWORK1_PATH$',
path_link_table_name = 'USER1.NETWORK1_PLINK$'
WHERE network = 'NETWORK1';

このシナリオでは、これでUser2がNETWORK1をメモリーに読み込めるようになります。

複数のスキーマが関係している場合のビューを使用したアクセス

(適切な権限のある)所有者以外のユーザーがネットワークまたはネットワークの特定の部分にアクセスできるように、ビューを作成します。ネットワークへのアクセスを許可する所有者以外のユーザーごとに、次の手順を実行します。

1. ユーザーに、必要なネットワーク・データ・モデル・グラフ表へのSELECTまたはREADアクセス権が付与されていることを確認します。このアクセス権がユーザーに付与されていない場合は、ネットワーク所有者として接続し、アクセス権を付与します。たとえば、User1として接続し、次の文を実行します。

GRANT select ON network1_node$ TO user2;
GRANT select ON network1_link$ TO user2;
GRANT select ON network1_path$ TO user2;
GRANT select ON network1_plink$ TO user2;

2. 所有者以外のユーザーとして接続します。たとえば、User2として接続します。

3. 必要な各ネットワーク・データ・モデル・グラフ・ノードに対するビューを作成し、各ビューでは対応する表の列をすべて選択するようにします。表名をネットワーク所有者のスキーマ名で修飾します。たとえば、User2としての接続中に次のようにします。

CREATE VIEW network1_node$ AS select * from user1.network1_node$;
CREATE VIEW network1_link$ AS select * from user1.network1_link$;
CREATE VIEW network1_path$ AS select * from user1.network1_path$;
CREATE VIEW network1_plink$ AS select * from user1.network1_plink$;

注意:

この例では、基礎となる表のすべてのデータを含むビューを示していますが、各ビューの定義でWHERE句(WHERE STATE_CODE='NY'など)を使用することで、ネットワークの使用可能な部分を制限できます。

4. 新しく作成したビューを指定する行をUSER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に追加します。たとえば、User2としての接続中に次のようにします。

INSERT INTO user_sdo_network_metadata
(network, network_category, geometry_type,
node_table_name,node_geom_column,
link_table_name, link_geom_column, link_direction,
path_table_name, path_geom_column,
path_link_table_name)
VALUES
('NETWORK1','SPATIAL', 'SDO_GEOMETRY',
'NETWORK1_NODE$', 'GEOMETRY',
'NETWORK1_LINK$', 'GEOMETRY', 'DIRECTED',
'NETWORK1_PATH$', 'GEOMETRY',
'NETWORK1_PLINK$');

このシナリオでは、これでUser2が作成されたビューを介してNETWORK1の使用可能な部分をメモリーに読み込めるようになります。

ネットワークの例

この項では、複数のネットワーク・データ・モデル・グラフの例を示します。ほとんどは簡単な例です。すべての例でPL/SQL APIを使用し、一部の例では他のAPIも使用しています。この項では、次の内容について説明します。

- 単純な空間(SDO)ネットワークの例(PL/SQL)

- 単純な論理ネットワークの例(PL/SQL)

- 空間(LRS)ネットワークの例(PL/SQL)

- 論理階層ネットワークの例(PL/SQL)

- パーティション化とロード・オンデマンド分析の例(PL/SQL、XMLおよびJava)

- ユーザー定義データの例(PL/SQLおよびJava)

この項の例では、この章で説明した概念を示しています。また、「SDO_NETパッケージ・サブプログラム」に示すPL/SQLのファンクションおよびプロシージャを使用しています。

単純な空間(SDO)ネットワークの例(PL/SQL)

この項では、3つのノードおよび各ノード間のリンクが含まれる非常に単純な空間(SDO、非LRS)ネットワークの例を示します。図5-4に、このネットワークを示します。

図5-4 単純な空間(SDO)ネットワーク

図5-4に示すとおり、ノードN1は点1,1、ノードN2は点15,1、ノードN3は点9,4に存在します。リンクL1はノードN1とノードN2を結ぶ直線、リンクL2はノードN2とノードN3を結ぶ直線、リンクL3はノードN3とノードN1を結ぶ直線です。リンクにはその他のノードまたは形状点は含まれません。

例5-3では、次の処理を行います。

- SDO_NET.CREATE_SDO_NETWORKプロシージャのコール時に、SDO_NET1有向ネットワークを作成し、SDO_NET1_NODE$、SDO_NET1_LINK$、SDO_NET1_PATH$およびSDO_NET1_PLINK$の各表を作成して、xxx_SDO_NETWORK_METADATAビューを更新します。すべてのジオメトリ列は、GEOMETRYという名前になります。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。

- ノード表、リンク表、パス表およびパスリンク表を移入します。これによって、ノード表に3つの行、リンク表に3つの行、パス表に2つの行、パスリンク表に4つの行が挿入されます。

- Oracle Spatial and Graphメタデータを更新し、ノード表およびリンク表のGEOMETRY列に空間索引を作成します。(このアクションは、ネットワーク管理には直接関係ありませんが、アプリケーションでこれらのジオメトリ列の空間索引を利用する場合に必要です。)

例5-3には、SDO_NETのファンクションおよびプロシージャの使用が多くは示されていません(これらについては、「空間(LRS)ネットワークの例(PL/SQL)」の例5-5を参照してください)。

例5-3 単純な空間(SDO)ネットワークの例(PL/SQL)

-- Create the SDO_NET1 directed network. Also creates the SDO_NET1_NODE$,
-- SDO_NET1_LINK$, SDO_NET1_PATH$, SDO_NET1_PLINK$ tables, and updates
-- USER_SDO_NETWORK_METADATA. All geometry columns are named GEOMETRY.
-- Both the node and link tables contain a cost column named COST.
EXECUTE SDO_NET.CREATE_SDO_NETWORK('SDO_NET1', 1, TRUE, TRUE);

-- Populate the SDO_NET1_NODE$ table.
-- N1
INSERT INTO sdo_net1_node$ (node_id, node_name, active, geometry, cost)
VALUES(1, 'N1', 'Y',
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(1,1,NULL), NULL, NULL),
5);
-- N2
INSERT INTO sdo_net1_node$ (node_id, node_name, active, geometry, cost)
VALUES(2, 'N2', 'Y',
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(15,1,NULL), NULL, NULL),
8);
-- N3
INSERT INTO sdo_net1_node$ (node_id, node_name, active, geometry, cost)
VALUES(3, 'N3', 'Y',
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(9,4,NULL), NULL, NULL),
4);

-- Populate the SDO_NET1_LINK$ table.
-- L1
INSERT INTO sdo_net1_link$ (link_id, link_name, start_node_id, end_node_id,
active, geometry, cost, bidirected)
VALUES(1, 'L1', 1, 2, 'Y',
SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(1,1, 15,1)),
14, 'Y');
-- L2
INSERT INTO sdo_net1_link$ (link_id, link_name, start_node_id, end_node_id,
active, geometry, cost, bidirected)
VALUES(2, 'L2', 2, 3, 'Y',
SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(15,1, 9,4)),
10, 'Y');
-- L3
INSERT INTO sdo_net1_link$ (link_id, link_name, start_node_id, end_node_id,
active, geometry, cost, bidirected)
VALUES(3, 'L3', 3, 1, 'Y',
SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(9,4, 1,1)),
10, 'Y');

-- Do not populate the SDO_NET1_PATH$ and SDO_NET1_PLINK$ tables now.
-- Do this only when you need to create any paths.

---------------------------------------------------------------------------
-- REMAINING STEPS NEEDED TO USE SPATIAL INDEXES --
---------------------------------------------------------------------------
-- Update the USER_SDO_GEOM_METADATA view. This is required before the
-- spatial index can be created. Do this only once for each layer
-- (that is, table-column combination).

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'SDO_NET1_NODE$',
'GEOMETRY',
SDO_DIM_ARRAY(   -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
),
NULL   -- SRID (spatial reference system, also called coordinate system)
);
INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'SDO_NET1_LINK$',
'GEOMETRY',
SDO_DIM_ARRAY(   -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
),
NULL   -- SRID (spatial reference system, also called coordinate system)
);

-- Create the spatial indexes
CREATE INDEX sdo_net1_nodes_idx ON sdo_net1_node$(geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
CREATE INDEX sdo_net1_links_idx ON sdo_net1_link$(geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

単純な論理ネットワークの例(PL/SQL)

この項では、3つのノードおよびノード間のリンクが含まれる非常に単純な論理ネットワークの例を示します。図5-5に、このネットワークを示します。

図5-5 単純な論理ネットワーク

図5-5に示すとおり、リンクL1はノードN1とノードN2を結ぶ直線、リンクL2はノードN2とノードN3を結ぶ直線、リンクL3はノードN3とノードN1を結ぶ直線です。リンクにはその他のノードは含まれません。

例5-4では、SDO_NET.CREATE_LOGICAL_NETWORKプロシージャをコールし、これによって、LOG_NET1有向ネットワークの作成、LOG_NET1_NODE$、LOG_NET1_LINK$、LOG_NET1_PATH$およびLOG_NET1_PLINK$の各表の作成、およびxxx_SDO_NETWORK_METADATAビューの更新が行われます。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。(これは論理ネットワークであるため、ジオメトリ列は含まれません。)この例では、ノード表およびリンク表の移入も行われます。

例5-4には、SDO_NETのファンクションおよびプロシージャの使用が多くは示されていません(これらについては、「論理階層ネットワークの例(PL/SQL)」の論理階層ネットワークの例(例5-6)を参照してください)。

例5-4 単純な論理ネットワークの例(PL/SQL)

-- Creates the LOG_NET1 directed logical network. Also creates the
-- LOG_NET1_NODE$, LOG_NET1_LINK$, LOG_NET1_PATH$,
-- and LOG_NET1_PLINK$ tables, and updates USER_SDO_NETWORK_METADATA.
-- Both the node and link tables contain a cost column named COST.
EXECUTE SDO_NET.CREATE_LOGICAL_NETWORK('LOG_NET1', 1, TRUE, TRUE);

-- Populate the LOG_NET1_NODE$ table.
-- N1
INSERT INTO log_net1_node$ (node_id, node_name, active, cost)
VALUES (1, 'N1', 'Y', 2);
-- N2
INSERT INTO log_net1_node$ (node_id, node_name, active, cost)
VALUES (2, 'N2', 'Y', 3);
-- N3
INSERT INTO log_net1_node$ (node_id, node_name, active, cost)
VALUES (3, 'N3', 'Y', 2);

-- Populate the LOG_NET1_LINK$ table.
-- L1
INSERT INTO log_net1_link$ (link_id, link_name, start_node_id, end_node_id,
active, link_level, cost)
VALUES (1, 'L1', 1, 2, 'Y', 1, 10);
-- L2
INSERT INTO log_net1_link$ (link_id, link_name, start_node_id, end_node_id,
active, link_level, cost)
VALUES (2, 'L2', 2, 3, 'Y', 1, 7);
-- L3
INSERT INTO log_net1_link$ (link_id, link_name, start_node_id, end_node_id,
active, link_level, cost)
VALUES (3, 'L3', 3, 1, 'Y', 1, 8);

-- Do not populate the LOG_NET1_PATH$ and LOG_NET1_PLINK$ tables now.
-- Do this only when you need to create any paths.

空間(LRS)ネットワークの例(PL/SQL)

この項では、図5-6に示す道路(ルート)を使用する空間(LRS)ネットワークの例を示します。それぞれの道路は、1つ以上の道路セグメント・ジオメトリ(図を参照)から抜き出された、(リンクに関連付けられた)個々の線セグメントで作成されています。

図5-6 空間(LRS)ネットワークの道路および道路セグメントの例

次に、図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');

論理階層ネットワークの例(PL/SQL)

この項では、図5-7に示すノードおよびリンクが含まれる論理ネットワークの例を示します。論理ネットワークであるため、空間ジオメトリは関連付けられません。(図5-7は、基本的に「ネットワークの階層」の図5-3と同じですが、ノードおよびリンクがラベル付けされています。)

図5-7 論理ネットワークのノードおよびリンクの例

次に、図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');

パーティション化とロード・オンデマンド分析の例(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>

ユーザー定義データの例(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);
}
}

ネットワーク・データ・モデル・グラフのチュートリアルとその他のリソース

Oracle Technology Networkのhttp://www.oracle.com/technetwork/database-options/spatialandgraphには、ネットワーク・データ・モデル・グラフを含む、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』)では、詳細な説明と例を提供します。

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

6 SDO_NETパッケージ・サブプログラム

MDSYS.SDO_NETパッケージには、ネットワーク管理を行うためのサブプログラム(ファンクションおよびプロシージャ)が含まれています。この章で説明するサブプログラムを使用する場合は、概念を理解しておく必要があります(「ネットワーク・データ・モデル・グラフの概要」を参照)。

論理カテゴリにグループ化されているサブプログラムのリストの詳細は、「ネットワーク・データ・モデル・グラフのPL/SQLインタフェース」を参照してください。この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_NET.ADD_CHILD_FEATURE

構文

SDO_NET.ADD_CHILD_FEATURE(
parent_layer_id   IN UMBER,
parent_feature_id IN NUMBER,
child_layer_id    IN NUMBER,
child_feature_id  IN SDO_NET_LAYER_FEAT,
sequence_number   IN NUMBER DEFAULT NULL,
check_integrity   IN BOOLEAN DEFAULT TRUE);

説明

フィーチャを、指定した親フィーチャの子フィーチャとして関連付けます。

パラメータ

parent_layer_id

親フィーチャ・レイヤーのIDを指定します。

parent_feature_id

指定した子フィーチャの親フィーチャになるフィーチャのIDを指定します。

child_layer_id

子フィーチャ・レイヤーのIDを指定します。

child_feature_id

指定した親フィーチャの子フィーチャとして関連付けられるフィーチャのIDを指定します。(SDO_NET_LAYER_FEAT型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

sequence_number

子フィーチャ・レイヤー内のchild_feature_idフィーチャの順序番号を指定します。このパラメータがNULLの場合、現在の最終番号の次の順序番号が割り当てられます。

check_integrity

TRUE (デフォルト)を指定すると、子フィーチャが存在するかどうかを確認し、存在しない場合はエラーが生成されます。FALSEを指定すると、子フィーチャが存在するかどうかを確認しません。

使用上の注意

指定した子フィーチャは、すでに存在している必要があります。

複数のフィーチャを子フィーチャとして関連付けるには、SDO_NET.ADD_CHILD_FEATURESプロシージャを使用します。

例

次の例では、順序番号2で子フィーチャを追加します。

DECLARE
parent_layer_id NUMBER;
parent_feature_id NUMBER := 1;
child_layer_id NUMBER;
child_feature_id NUMBER := 3;
BEGIN
parent_layer_id := sdo_net.get_feature_layer_id('GRID', 'PARENT_LAYER');
child_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
sdo_net.add_child_feature(parent_layer_id, parent_feature_id, child_layer_id, child_feature_id, 2, true);
END;
/

SDO_NET.ADD_CHILD_FEATURES

構文

SDO_NET.ADD_CHILD_FEATURES(
parent_layer_id   IN NUMBER,
parent_feature_id IN NUMBER,
child_feature_ids IN SDO_NET_LAYER_FEAT_ARRAY,
check_integrity   IN BOOLEAN DEFAULT TRUE);

説明

複数のフィーチャを、指定した親フィーチャの子フィーチャとして関連付けます。

パラメータ

parent_layer_id

親フィーチャ・レイヤーのIDを指定します。

parent_feature_id

指定した子フィーチャの親フィーチャになるフィーチャのIDを指定します。

child_feature_ids

指定した親フィーチャの子フィーチャとして関連付けられるフィーチャのIDを指定します。(SDO_NET_LAYER_FEAT_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

check_integrity

TRUE (デフォルト)を指定すると、子フィーチャが存在するかどうかを確認し、存在しない場合はエラーが生成されます。FALSEを指定すると、子フィーチャが存在するかどうかを確認しません。

使用上の注意

指定した子フィーチャは、すでに存在している必要があります。

単一のフィーチャを子フィーチャとして関連付けるには、SDO_NET.ADD_CHILD_FEATUREプロシージャを使用します。

例

次の例では、2つの子フィーチャを親フィーチャの最後に追加します。

DECLARE
parent_layer_id NUMBER;
parent_feature_id NUMBER := 1;
child_layer_id NUMBER;
child_feature_ids SDO_NET_LAYER_FEAT_ARRAY := SDO_NET_LAYER_FEAT_ARRAY();
BEGIN
parent_layer_id := sdo_net.get_feature_layer_id('GRID', 'PARENT_LAYER');
child_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
child_feature_ids.extend;
child_feature_ids(1) := SDO_NET_LAYER_FEAT(child_layer_id, 4);
child_feature_ids.extend;
child_feature_ids(2) := SDO_NET_LAYER_FEAT(child_layer_id, 10);
sdo_net.add_child_features(parent_layer_id, parent_feature_id, child_feature_ids, true);
END;
/

SDO_NET.ADD_FEATURE

構文

SDO_NET.ADD_FEATURE(
feature_layer_id  IN NUMBER,
feature_id        IN NUMBER,
feature_elements  IN SDO_NET_FEAT_ELEM_ARRAY DEFAULT NULL,
child_feature_ids IN SDO_NET_LAYER_FEAT_ARRAY DEFAULT NULL,
check_integrity   IN BOOLEAN DEFAULT TRUE);

説明

フィーチャ・レイヤーにフィーチャを追加します。

パラメータ

feature_layer_id

フィーチャの追加先となるフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャ・レイヤーに追加されるフィーチャのIDを指定します。

feature_elements

追加されるフィーチャのフィーチャ要素を指定します。このパラメータがNULLの場合、このフィーチャに対して定義されているフィーチャ要素はありません。(SDO_NET_FEAT_ELEM_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

child_feature_ids

フィーチャとともに追加される、フィーチャの子フィーチャのIDを指定します。このパラメータがNULLの場合、追加される子フィーチャはありません。(SDO_NET_LAYER_FEAT_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

check_integrity

TRUE (デフォルト)を指定すると、入力ネットワーク要素が存在するかどうかを確認し、存在しない場合はエラーが生成されます。FALSEを指定すると、入力ネットワーク要素が存在するかどうかを確認しません。

使用上の注意

フィーチャ・レイヤー内のフィーチャを更新するには、SDO_NET.UPDATE_FEATUREプロシージャを使用します。

例

次の例では、リンク1314上の20%の位置にある点に関連付けられているフィーチャを追加します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
elements SDO_NET_FEAT_ELEM_ARRAY := SDO_NET_FEAT_ELEM_ARRAY();
link_id NUMBER := 1314;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
elements.extend;
elements(1) := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.2, null);
sdo_net.add_feature(feature_layer_id, feature_id, elements, null);
END;
/

SDO_NET.ADD_FEATURE_ELEMENT

構文

SDO_NET.ADD_FEATURE_ELEMENT(
feature_layer_id IN NUMBER,
feature_id       IN NUMBER,
feature_element  IN SDO_NET_FEAT_ELEM,
sequence_number  IN NUMBER DEFAULT NULL,
check_integrity  IN BOOLEAN DEFAULT TRUE);

説明

フィーチャにフィーチャ要素を追加します。

パラメータ

feature_layer_id

フィーチャのフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャのIDです。

feature_element

フィーチャに追加されるフィーチャ要素を指定します。このフィーチャ要素は、フィーチャに含まれる既存の任意のフィーチャ要素の最後に自動的に追加されます。(SDO_NET_FEAT_ELEM型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

sequence_number

フィーチャに追加されるフィーチャ要素の順序番号を指定します。このパラメータがNULLの場合、現在の最終番号の次の順序番号が割り当てられます。

check_integrity

TRUE (デフォルト)を指定すると、入力ネットワーク要素が存在するかどうかを確認し、存在しない場合はエラーが生成されます。FALSEを指定すると、入力ネットワーク要素が存在するかどうかを確認しません。

使用上の注意

1回の操作で複数のフィーチャ要素をフィーチャに追加するには、SDO_NET.ADD_FEATURE_ELEMENTSプロシージャを使用します。

フィーチャ要素を更新するには、SDO_NET.UPDATE_FEATURE_ELEMENTプロシージャを使用します。

例

次の例では、ノードID 13の点フィーチャを順序番号2で追加します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
feature_element SDO_NET_FEAT_ELEM;
node_id NUMBER := 13;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
feature_element := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_PON, node_id, null, null);
sdo_net.add_feature_element(feature_layer_id, feature_id, feature_element, 2);
END;
/

SDO_NET.ADD_FEATURE_ELEMENTS

構文

SDO_NET.ADD_FEATURE_ELEMENTS(
feature_layer_id IN NUMBER,
feature_id       IN NUMBER,
feature_elements IN SDO_NET_FEAT_ELEM,_ARRAY,
check_integrity  IN BOOLEAN DEFAULT TRUE);

説明

フィーチャ要素の配列をフィーチャに追加します。

パラメータ

feature_layer_id

フィーチャのフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャのIDです。

feature_elements

フィーチャに追加されるフィーチャ要素を指定します。これらのフィーチャ要素は、フィーチャに含まれる既存の任意のフィーチャ要素の最後に自動的に追加されます。(SDO_NET_FEAT_ELEM_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

check_integrity

TRUE (デフォルト)を指定すると、入力ネットワーク要素が存在するかどうかを確認し、存在しない場合はエラーが生成されます。FALSEを指定すると、入力ネットワーク要素が存在するかどうかを確認しません。

使用上の注意

単一のフィーチャ要素をフィーチャに追加するには、SDO_NET.ADD_FEATURE_ELEMENTプロシージャを使用します。

例

次の例では、2つの点フィーチャ要素を、フィーチャID 1に関連付けられたフィーチャ要素の最後に追加します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
elements SDO_NET_FEAT_ELEM_ARRAY := SDO_NET_FEAT_ELEM_ARRAY();
link_id NUMBER := 1314;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
elements.extend;
elements(1) := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.7, null);
elements.extend;
elements(2) := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.8, null);
sdo_net.add_feature_elements(feature_layer_id, feature_id, elements);
END;
/

SDO_NET.ADD_FEATURE_LAYER

構文

SDO_NET.ADD_FEATURE_LAYER(
network_name IN VARCHAR2,
feature_layer_name IN VARCHAR2,
feature_layer_type IN VARCHAR2,
feature_table      IN VARCHAR2,
relation_table     IN VARCHAR2,
hierarchy_table    IN VARCHAR2);

説明

フィーチャ・レイヤーを追加します。

パラメータ

network_name

ネットワーク名です。

feature_layer_name

フィーチャ・レイヤーの名前を指定します。

feature_layer_type

(表5-1から)レイヤー内のフィーチャのタイプを指定します。

feature_table

フィーチャ表(「フィーチャ表」を参照)の名前を指定します。

relation_table

フィーチャ要素関係表(「フィーチャ要素関係表」を参照)の名前を指定します。

hierarchy_table

フィーチャ階層表(「フィーチャ階層表」を参照)の名前を指定します。

使用上の注意

フィーチャ・レイヤーIDは、フィーチャ・レイヤーに対して自動的に生成されます。

例

次の例では、複数の点(SDO_NET.FEAT_TYPE_MPOINT)で構成されたPOI (対象点)という名前のフィーチャ・レイヤーを作成します。

BEGIN
sdo_net.add_feature_layer(
'GRID',
'POI',
SDO_NET.FEAT_TYPE_MPOINT,
'POI_FEAT$',
'POI_REL$',
NULL
);
END;
/

SDO_NET.COMPUTE_PATH_GEOMETRY

構文

SDO_NET.COMPUTE_PATH_GEOMETRY(
network   IN VARCHAR2,
path_id   IN NUMBER,
tolerance IN NUMBER
) RETURN SDO_GEOMETRY;

説明

パスの空間ジオメトリを戻します。

パラメータ

network

ネットワーク名を指定します。

path_id

パスID番号を指定します。

tolerance

ネットワーク内のジオメトリに関連付けられた許容差を指定します。(許容差については、『Oracle Spatial and Graph開発者ガイド』の第1章を参照してください。)この値は、ネットワークのリンク表およびノード表のジオメトリの許容差と一致している必要があります。

使用上の注意

このファンクションは、指定されたパスについて、SDO_GEOMETRYオブジェクトを計算して戻します。

このファンクションおよびSDO_NET_MEM.PATH.COMPUTE_GEOMETRYプロシージャ(「SDO_NETパッケージ・サブプログラム」を参照)は両方ともパスのジオメトリを計算しますが、次のような相違点があります。

- SDO_NET.COMPUTE_PATH_GEOMETRYファンクションは、データベース内のリンクからのパスを計算し、ネットワーク・メモリー・オブジェクトを使用しません。これは、パスのジオメトリを戻します。

- SDO_NET_MEM.PATH.COMPUTE_GEOMETRYプロシージャは、ロード済のネットワーク・メモリー・オブジェクトを使用してパスを計算します。パスのジオメトリは戻されないため、SDO_NET_MEM.PATH.GET_GEOMETRYファンクションを使用してジオメトリを取得する必要があります。

例

次の例では、SDO_NET1という名前のネットワーク内にパスIDが1のパスの空間ジオメトリを計算して戻します(許容差は0.005を使用)。このパスは単一リンクで構成されているため、戻されるパスのジオメトリは(1,1)から(15,1)への直線になります。

SELECT SDO_NET.COMPUTE_PATH_GEOMETRY('SDO_NET1', 1, 0.005) FROM DUAL;

SDO_NET.COMPUTE_PATH_GEOMETRY('SDO_NET1',1,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
1, 1, 15, 1))

SDO_NET.COPY_NETWORK

構文

SDO_NET.COPY_NETWORK(
source_network     IN VARCHAR2,
target_network     IN VARCHAR2,
storage_parameters IN VARCHAR2 DEFAULT NULL);

説明

メタデータ表を含む、ネットワークのコピーを作成します。

パラメータ

source_network

コピーするネットワークの名前を指定します。

target_network

source_networkのコピーとして作成するネットワークの名前を指定します。

storage_parameters

ネットワーク表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

このプロシージャは、xxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に、source_networkと同じ情報(新しいネットワーク名を除く)を持つtarget_networkのエントリを作成します。

また、target_networkの新しいノード表、リンク表およびパス表(source_networkにパス表が存在する場合)を、source_networkのこれらの表のメタデータおよびデータに基づいて作成します。これらの表には、<target-network>_NODE$、<target-network>_LINK$および<target-network>_PATH$の形式の名前が付けられます。たとえば、target_networkの値がROADS_NETWORK2で、source_networkにパス表が存在する場合、作成されるメタデータ表の名前はROADS_NETWORK2_NODE$、ROADS_NETWORK2_LINK$およびROADS_NETWORK2_PATH$になります。

例

次の例では、ROADS_NETWORKという名前のネットワークのコピーであるROADS_NETWORK2という名前の新しいネットワークを作成します。

EXECUTE SDO_NET.COPY_NETWORK('ROADS_NETWORK', 'ROADS_NETWORK2');

SDO_NET.CREATE_LINK_TABLE

構文

SDO_NET.CREATE_LINK_TABLE(
table_name             IN VARCHAR2,
geom_type              IN VARCHAR2,
geom_column            IN VARCHAR2,
cost_column            IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
add_bidirected_column  IN BOOLEAN DEFALT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

説明

ネットワークのリンク表を作成します。

パラメータ

table_name

リンク表の名前を指定します。

geom_type

空間ネットワークのリンクのジオメトリ・タイプを示す値を指定します。非LRSのSDO_GEOMETRYオブジェクトの場合はSDO_GEOMETRY、LRSのSDO_GEOMETRYオブジェクトの場合はLRS_GEOMETRY、SDO_TOPO_GEOMETRYオブジェクトの場合はTOPO_GEOMETRYです。

geom_column

空間ネットワーク内のリンクに関連付けられたジオメトリ・オブジェクトを含む列の名前を指定します。(geom_type値の綴りが正しくない場合、geom_column列は表に含まれません。)

cost_column

リンクに関連付けるコスト値を含む列の名前を指定します。

no_of_hierarchy_levels

ネットワーク内のリンクの階層レベルの数を指定します。(ネットワーク階層については、「ネットワークの階層」を参照してください。)

add_bidirected_column

TRUEを指定すると、リンク表にBIDIRECTEDという名前の列が追加され、FALSE (デフォルト)を指定すると、リンク表にBIDIRECTEDという名前の列が追加されません。

storage_parameters

リンク表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

「リンク表」で説明するリンク表です。

例

次の例では、ROADS_LINKSという名前のリンク表を作成します。この表は、LRSジオメトリを含むLINK_GEOMETRYという名前のジオメトリ列とCOSTという名前のコスト列を含み、単一の階層レベルを持ちます。

EXECUTE SDO_NET.CREATE_LINK_TABLE('ROADS_LINKS', 'LRS_GEOMETRY', 'LINK_GEOMETRY', 'COST', 1);

SDO_NET.CREATE_LOGICAL_NETWORK

構文

SDO_NET.CREATE_LOGICAL_NETWORK(
network                IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_with_cost         IN BOOLEAN DEFAULT FALSE,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

or

SDO_NET.CREATE_LOGICAL_NETWORK(
network IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed IN BOOLEAN,
node_table_name IN VARCHAR2,
node_cost_column IN VARCHAR2,
link_table_name IN VARCHAR2,
link_cost_column IN VARCHAR2,
path_table_name IN VARCHAR2,
path_link_table_name IN VARCHAR2,
subpath_table_name IN VARCHAR2,
is_complex IN BOOLEAN DEFAULT FALSE,
storage_parameters IN VARCHAR2 DEFAULT NULL);

説明

論理ネットワークを作成してすべての必要な表を作成し、そのネットワークのメタデータを更新します。

パラメータ

network

ネットワーク名を指定します。

no_of_hierarchy_levels

ネットワーク内のリンクの階層レベルの数を指定します。(ネットワーク階層については、「ネットワークの階層」を参照してください。)

is_directed

ブール値を指定します。リンクが有向リンクである場合はTRUE、無向リンクの場合(有向リンクでない場合)はFALSEを指定します。

node_with_cost

ブール値を指定します。TRUEを指定した場合、COSTという名前の列が<network-name>_NODE$表に含まれます。FALSE (デフォルト)を指定した場合、COSTという名前の列は<network-name>_NODE$表に含まれません。

node_table_name

作成するノード表の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_NODE$という名前のノード表が作成されます。

node_cost_column

ノード表のコスト列の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

link_table_name

作成するリンク表の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_LINK$という名前のリンク表が作成されます。

link_cost_column

リンク表のコスト列の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

path_table_name

作成するパス表の名前を指定します。(パス表については、「パス表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PATH$という名前のパス表が作成されます。

path_link_table_name

作成するパスリンク表の名前を指定します。(パスリンク表については、「パスリンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PLINK$という名前のパスリンク表が作成されます。

subpath_table_name

作成するサブパス表の名前を指定します。(サブパス表については、「サブパス表」を参照してください。)

is_complex

将来の使用のために予約されています。今回のリリースでは、無視されます。

storage_parameters

ネットワーク表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

このプロシージャは、ノード、リンクおよびオプションの関連表が存在しないときに論理ネットワークを作成する場合に役立ちます。このプロシージャは、ネットワークを作成し、そのネットワークのノード表、リンク表、パス表およびパスリンク表を作成し、xxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に適切な情報を挿入します。

作成するいずれかの表がすでに存在する場合、例外が発生します。

このプロシージャには2つの形式があります。簡単な方の形式では、表名およびコスト列名にデフォルト値を使用して表を作成します。もう一方の形式では、表およびコスト列の名前を指定できます。

このプロシージャを使用するかわりに、SDO_NET.CREATE_NODE_TABLE、SDO_NET.CREATE_LINK_TABLE、SDO_NET.CREATE_PATH_TABLEおよびSDO_NET.CREATE_PATH_LINK_TABLEプロシージャを使用して表を作成し、USER_SDO_NETWORK_METADATAビューに適切な行を挿入することによって、ネットワークを作成できます。

例

次の例では、LOG_NET1という名前の有向論理ネットワークを作成します。また、LOG_NET1_NODE$、LOG_NET1_LINK$、LOG_NET1_PATH$およびLOG_NET1_PLINK$表を作成し、xxx_SDO_NETWORK_METADATAビューを更新します。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。

EXECUTE SDO_NET.CREATE_LOGICAL_NETWORK('LOG_NET1', 1, TRUE, TRUE);

SDO_NET.CREATE_LRS_NETWORK

構文

SDO_NET.CREATE_LRS_NETWORK(
network IN VARCHAR2,
lrs_table_name         IN VARCHAR2,
lrs_geom_column        IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_with_cost         IN BOOLEAN DEFAULT FALSE,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

or

SDO_NET.CREATE_LRS_NETWORK(
network                IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_table_name        IN VARCHAR2,
node_cost_column       IN VARCHAR2,
link_table_name        IN VARCHAR2,
link_cost_column       IN VARCHAR2,
lrs_table_name         IN VARCHAR2,
lrs_geom_column        IN VARCHAR2,
path_table_name        IN VARCHAR2,
path_geom_column       IN VARCHAR2,
path_link_table_name   IN VARCHAR2,
subpath_table_name     IN VARCHAR2,
subpath_geom_column    IN VARCHAR2,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

説明

LRSのSDO_GEOMETRYオブジェクトを含む空間ネットワークを作成してすべての必要な表を作成し、ネットワークのメタデータを更新します。

パラメータ

network

ネットワーク名を指定します。

lrs_table_name

LRSジオメトリ列を含む表の名前を指定します。

lrs_geom_column

LRSジオメトリ(線形参照のメジャー情報を含むSDO_GEOMETRYオブジェクト)を含むlrs_table_nameの列の名前を指定します。

is_directed

ブール値を指定します。リンクが有向リンクである場合はTRUE、無向リンクの場合(有向リンクでない場合)はFALSEを指定します。

no_of_hierarchy_levels

ネットワーク内のリンクの階層レベルの数を指定します。(ネットワーク階層については、「ネットワークの階層」を参照してください。)

node_with_cost

ブール値を指定します。TRUEを指定した場合、COSTという名前の列が<network-name>_NODE$表に含まれます。FALSE (デフォルト)を指定した場合、COSTという名前の列は<network-name>_NODE$表に含まれません。

is_complex

将来の使用のために予約されています。今回のリリースでは、無視されます。

node_table_name

作成するノード表の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_NODE$という名前のノード表が作成されます。

node_cost_column

ノード表のコスト列の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

link_table_name

作成するリンク表の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_LINK$という名前のリンク表が作成されます。

link_cost_column

リンク表のコスト列の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

path_table_name

作成するパス表の名前を指定します。(パス表については、「パス表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PATH$という名前のパス表が作成されます。

path_geom_column

パス表のジオメトリ列の名前を指定します。(パス表については、「パス表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はGEOMETRYになります。

path_link_table_name

作成するパスリンク表の名前を指定します。(パスリンク表については、「パスリンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PLINK$という名前のパスリンク表が作成されます。

subpath_table_name

作成するサブパス表の名前を指定します。(サブパス表については、「サブパス表」を参照してください。)

subpath_geom_column

サブパス表のジオメトリ列の名前を指定します。(サブパス表については、「サブパス表」を参照してください。)

storage_parameters

ネットワーク表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

このプロシージャは、ノード、リンクおよびオプションの関連表が存在しないときにLRSジオメトリの空間ネットワークを作成する場合に役立ちます。このプロシージャは、ネットワークを作成し、そのネットワークのノード表、リンク表、パス表およびパスリンク表を作成し、xxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に適切な情報を挿入します。

作成するいずれかの表がすでに存在する場合、例外が発生します。

このプロシージャには2つの形式があります。簡単な方の形式では、表名およびジオメトリ列名とコスト列名にデフォルト値を使用して表を作成します。もう一方の形式では、表およびジオメトリ列とコスト列の名前を指定できます。

このプロシージャを使用するかわりに、SDO_NET.CREATE_NODE_TABLE、SDO_NET.CREATE_LINK_TABLE、SDO_NET.CREATE_PATH_TABLEおよびSDO_NET.CREATE_PATH_LINK_TABLEプロシージャを使用して表を作成し、USER_SDO_NETWORK_METADATAビューに適切な行を挿入することによって、ネットワークを作成できます。

例

次の例では、LRS_NET1という名前の有向空間ネットワークを作成します。LRSジオメトリは、LRS_TABという名前の表のLRS_GEOMという名前の列に存在します。また、LRS_NET1_NODE$、LRS_NET1_LINK$、LRS_NET1_PATH$およびLRS_NET1_PLINK$表を作成し、xxx_SDO_NETWORK_METADATAビューを更新します。すべてのジオメトリ列は、GEOMETRYという名前になります。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。

EXECUTE SDO_NET.CREATE_LRS_NETWORK('LRS_NET1', 'LRS_TAB', 'LRS_GEOM', 1, TRUE, TRUE);

SDO_NET.CREATE_LRS_TABLE

構文

SDO_NET.CREATE_LRS_TABLE(
table_name         IN VARCHAR2,
geom_column        IN VARCHAR2,
storage_parameters IN VARCHAR2 DEFAULT NULL);

説明

Oracle Spatial and Graphの線形参照システム(LRS)・ジオメトリを格納するための表を作成します。

パラメータ

table_name

geom_columnで指定したジオメトリ列を含む表の名前を指定します。

geom_column

ジオメトリ・オブジェクトを含む(SDO_GEOMETRY型の)列の名前を指定します。

storage_parameters

LRS表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

このプロシージャは、2つの列(NUMBER型のGEOM_IDおよびSDO_GEOMETRY型のgeom_column)を含むtable_nameという名前の表を作成します。

作成された表をLRSジオメトリの格納に使用する必要はありませんが、このプロシージャは、そのようなジオメトリを格納するための表の作成に役立ちます。多くの場合、表にデータを格納する前に、表を変更して他の列を追加します。

例

次の例では、GEOMという名前のジオメトリ列を含むHIGHWAYSという名前の表を作成します。

EXECUTE SDO_NET.CREATE_LRS_TABLE('HIGHWAYS', 'GEOM');

PL/SQL procedure successfully completed.

DESCRIBE highways
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
GEOM_ID                                   NOT NULL NUMBER
GEOM                                               MDSYS.SDO_GEOMETRY

SDO_NET.CREATE_NODE_TABLE

構文

SDO_NET.CREATE_NODE_TABLE(
table_name             IN VARCHAR2,
geom_type              IN VARCHAR2,
geom_column            IN VARCHAR2,
cost_column            IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

or

SDO_NET.CREATE_NODE_TABLE(
table_name             IN VARCHAR2,
geom_type              IN VARCHAR2,
geom_column            IN VARCHAR2,
cost_column            IN VARCHAR2,
partition_column       IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

説明

ノード表を作成します。

パラメータ

table_name

ノード表の名前を指定します。

geom_type

空間ネットワーク内のノードのジオメトリ・タイプを示す値を指定します。非LRSのSDO_GEOMETRYオブジェクトの場合はSDO_GEOMETRY、LRSのSDO_GEOMETRYオブジェクトの場合はLRS_GEOMETRY、SDO_TOPO_GEOMETRYオブジェクトの場合はTOPO_GEOMETRYです。(geom_type値の綴りが正しくない場合、geom_column列は表に含まれません。)

geom_column

空間ネットワーク内のノードに関連付けられたジオメトリ・オブジェクトを含む列の名前を指定します。

cost_column

ノードに関連付けるコスト値を含む列の名前を指定します。

partition_column

ノードに関連付けるパーティションID値を含む列の名前を指定します。

no_of_hierarchy_levels

ネットワーク内のノードの階層レベルの数を指定します。(ネットワーク階層については、「ネットワークの階層」を参照してください。)

is_complex

将来の使用のために予約されています。今回のリリースでは、無視されます。

storage_parameters

<network-name>_NODE$表(「ノード表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

このプロシージャには、2つの形式があります。1つはpartition_columnパラメータが含まれておらず、1つはpartition_columnパラメータが含まれています。

ノード表については、「ノード表」を参照してください。

例

次の例では、ROADS_NODESという名前のノード表を作成します。この表は、LRSジオメトリを含むNODE_GEOMETRYという名前のジオメトリ列を含み、単一の階層レベルを持ちます。コスト列は含みません。

EXECUTE SDO_NET.CREATE_NODE_TABLE('ROADS_NODES', 'LRS_GEOMETRY', 'NODE_GEOMETRY', NULL, 1);

SDO_NET.CREATE_PARTITION_TABLE

構文

SDO_NET.CREATE_PARTITION_TABLE(
table_name IN VARCHAR2);

説明

パーティション表を作成します。

パラメータ

table_name

パーティション表の名前を指定します。

使用上の注意

パーティション表については、「パーティション表」を参照してください。

ロード・オンデマンド方式を使用した分析を実行するための、パーティション化されたネットワークの使用方法については、「ロード・オンデマンドを使用したネットワーク分析」を参照してください。

例

次の例では、MY_PART_TABという名前のパーティション表を作成します。

EXECUTE SDO_NET.CREATE_PARTITION_TABLE('MY_PART_TAB');

SDO_NET.CREATE_PATH_LINK_TABLE

構文

SDO_NET.CREATE_PATH_LINK_TABLE(
table_name         IN VARCHAR2,
storage_parameters IN VARCHAR2 DEFAULT NULL);

説明

パスリンク表(パス表の各パスに各リンクの行を持つ表)を作成します。

パラメータ

table_name

パスリンク表の名前を指定します。

storage_parameters

パスリンク表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

パスリンク表については、「パスリンク表」を参照してください。

ネットワークでパスを使用するには、パスリンク表を移入する必要があります。

例

次の例では、ROADS_PATHS_LINKSという名前のパスリンク表を作成します。

EXECUTE SDO_NET.CREATE_PATH_LINK_TABLE('ROADS_PATHS_LINKS');

SDO_NET.CREATE_PATH_TABLE

構文

SDO_NET.CREATE_PATH_TABLE(
table_name         IN VARCHAR2,
geom_column        IN VARCHAR2,
storage_parameters IN VARCHAR2 DEFAULT NULL);

説明

パス表を作成します。

パラメータ

table_name

パス表の名前を指定します。

geom_column

空間ネットワークのパスに関連付けられたジオメトリ・オブジェクトを含む列の名前を指定します。

storage_parameters

パス表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

パス表については、「パス表」を参照してください。

ネットワークでパスを使用するには、パス表の作成後にSDO_NET.CREATE_PATH_LINK_TABLEプロシージャを使用してパスリンク表を作成し、そのパスリンク表を移入する必要があります。

例

次の例では、PATH_GEOMETRYという名前のジオメトリ列を含むROADS_PATHSという名前のパス表を作成します。

EXECUTE SDO_NET.CREATE_PATH_TABLE('ROADS_PATHS', 'PATH_GEOMETRY');

SDO_NET.CREATE_SDO_NETWORK

構文

SDO_NET.CREATE_SDO_NETWORK(
network                IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_with_cost         IN BOOLEAN DEFAULT FALSE,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

or

SDO_NET.CREATE_SDO_NETWORK(
network                IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_table_name        IN VARCHAR2,
node_geom_column       IN VARCHAR2,
node_cost_column       IN VARCHAR2,
link_table_name        IN VARCHAR2,
link_geom_column       IN VARCHAR2,
link_cost_column       IN VARCHAR2,
path_table_name        IN VARCHAR2,
path_geom_column       IN VARCHAR2,
path_link_table_name   IN VARCHAR2,
subpath_table_name     IN VARCHAR2,
subpath_geom_column    IN VARCHAR2,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

説明

非LRSのSDO_GEOMETRYオブジェクトを含む空間ネットワークを作成してすべての必要な表を作成し、ネットワークのメタデータを更新します。

パラメータ

network

ネットワーク名を指定します。

no_of_hierarchy_levels

ネットワーク内のリンクの階層レベルの数を指定します。(ネットワーク階層については、「ネットワークの階層」を参照してください。)

is_directed

ブール値を指定します。リンクが有向リンクである場合はTRUE、無向リンクの場合(有向リンクでない場合)はFALSEを指定します。

node_with_cost

ブール値を指定します。TRUEを指定した場合、COSTという名前の列が<network-name>_NODE$表に含まれます。FALSE (デフォルト)を指定した場合、COSTという名前の列は<network-name>_NODE$表に含まれません。

node_table_name

作成するノード表の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_NODE$という名前のノード表が作成されます。

node_geom_column

ノード表のジオメトリ列の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はGEOMETRYになります。

node_cost_column

ノード表のコスト列の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

link_table_name

作成するリンク表の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_LINK$という名前のリンク表が作成されます。

link_geom_column

リンク表のジオメトリ列の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はGEOMETRYになります。

link_cost_column

リンク表のコスト列の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

path_table_name

作成するパス表の名前を指定します。(パス表については、「パス表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PATH$という名前のパス表が作成されます。

path_geom_column

パス表のジオメトリ列の名前を指定します。(パス表については、「パス表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はGEOMETRYになります。

path_link_table_name

作成するパスリンク表の名前を指定します。(パスリンク表については、「パスリンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PLINK$という名前のパスリンク表が作成されます。

subpath_table_name

作成するサブパス表の名前を指定します。(サブパス表については、「サブパス表」を参照してください。)

subpath_geom_column

サブパス表のジオメトリ列の名前を指定します。(サブパス表については、「サブパス表」を参照してください。)

is_complex

将来の使用のために予約されています。今回のリリースでは、無視されます。

storage_parameters

ネットワーク表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

このプロシージャは、ノード、リンクおよびオプションの関連表が存在しないときに空間ネットワークを作成する場合に役立ちます。このプロシージャは、ネットワークを作成し、そのネットワークのノード表、リンク表、パス表およびパスリンク表を作成し、xxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に適切な情報を挿入します。

作成するいずれかの表がすでに存在する場合、例外が発生します。

このプロシージャには2つの形式があります。簡単な方の形式では、表名およびジオメトリ列名とコスト列名にデフォルト値を使用して表を作成します。もう一方の形式では、表およびジオメトリ列とコスト列の名前を指定できます。

このプロシージャを使用するかわりに、SDO_NET.CREATE_NODE_TABLE、SDO_NET.CREATE_LINK_TABLE、SDO_NET.CREATE_PATH_TABLEおよびSDO_NET.CREATE_PATH_LINK_TABLEプロシージャを使用して表を作成し、USER_SDO_NETWORK_METADATAビューに適切な行を挿入することによって、ネットワークを作成できます。

例

次の例では、SDO_NET1という名前の有向空間ネットワークを作成します。また、SDO_NET1_NODE$、SDO_NET1_LINK$、SDO_NET1_PATH$およびSDO_NET1_PLINK$表を作成し、xxx_SDO_NETWORK_METADATAビューを更新します。すべてのジオメトリ列は、GEOMETRYという名前になります。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。

EXECUTE SDO_NET.CREATE_SDO_NETWORK('SDO_NET1', 1, TRUE, TRUE);

SDO_NET.CREATE_SUBPATH_TABLE

構文

SDO_NET.CREATE_SUBPATH_TABLE(
table_name         IN VARCHAR2,
geom_column        IN VARCHAR2,
storage_parameters IN VARCHAR2 DEFAULT NULL);

説明

サブパス表を作成します。

パラメータ

table_name

サブパス表の名前を指定します。

geom_column

空間ネットワークのサブパスに関連付けられたジオメトリ・オブジェクトを含む列の名前を指定します。

storage_parameters

サブパス表(「ノード表」を参照)を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

サブパス表については、「サブパス表」を参照してください。

ネットワークでサブパスを使用するには、1つ以上のパス表およびそれに関連するパスリンク表を作成する必要があります。

例

次の例では、SUBPATH_GEOMETRYという名前のジオメトリ列を含むROADS_SUBPATHSという名前のサブパス表を作成します。

EXECUTE SDO_NET.CREATE_SUBPATH_TABLE('ROADS_SUBPATHS', 'SUBPATH_GEOMETRY');

SDO_NET.CREATE_TOPO_NETWORK

構文

SDO_NET.CREATE_TOPO_NETWORK(
network                IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_with_cost         IN BOOLEAN DEFAULT FALSE,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

or

SDO_NET.CREATE_TOPO_NETWORK(
network                IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_table_name        IN VARCHAR2,
node_cost_column       IN VARCHAR2,
link_table_name        IN VARCHAR2,
link_cost_column       IN VARCHAR2,
path_table_name        IN VARCHAR2,
path_geom_column       IN VARCHAR2,
path_link_table_name   IN VARCHAR2,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

or

SDO_NET.CREATE_TOPO_NETWORK(
network                IN VARCHAR2,
no_of_hierarchy_levels IN NUMBER,
is_directed            IN BOOLEAN,
node_table_name        IN VARCHAR2,
node_geom_column       IN VARCHAR2,
node_cost_column       IN VARCHAR2,
link_table_name        IN VARCHAR2,
link_cost_column       IN VARCHAR2,
path_table_name        IN VARCHAR2,
path_geom_column       IN VARCHAR2,
path_link_table_name   IN VARCHAR2,
subpath_table_name     IN VARCHAR2,
subpath_geom_column    IN VARCHAR2,
is_complex             IN BOOLEAN DEFAULT FALSE,
storage_parameters     IN VARCHAR2 DEFAULT NULL);

説明

SDO_TOPO_GEOMETRYオブジェクトを含む空間トポロジ・ネットワークを作成してすべての必要な表を作成し、そのネットワークのメタデータを更新します。

パラメータ

network

ネットワーク名を指定します。

no_of_hierarchy_levels

ネットワーク内のリンクの階層レベルの数を指定します。(ネットワーク階層については、「ネットワークの階層」を参照してください。)

is_directed

ブール値を指定します。リンクが有向リンクである場合はTRUE、無向リンクの場合(有向リンクでない場合)はFALSEを指定します。

node_with_cost

ブール値を指定します。TRUEを指定した場合、COSTという名前の列が<network-name>_NODE$表に含まれます。FALSE (デフォルト)を指定した場合、COSTという名前の列は<network-name>_NODE$表に含まれません。

node_table_name

作成するノード表の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_NODE$という名前のノード表が作成されます。

node_cost_column

ノード表のコスト列の名前を指定します。(ノード表については、「ノード表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

link_table_name

作成するリンク表の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_LINK$という名前のリンク表が作成されます。

link_cost_column

リンク表のコスト列の名前を指定します。(リンク表については、「リンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はCOSTになります。

path_table_name

作成するパス表の名前を指定します。(パス表については、「パス表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PATH$という名前のパス表が作成されます。

path_geom_column

パス表のジオメトリ列の名前を指定します。(パス表については、「パス表」を参照してください。)このパラメータを指定しない形式を使用した場合、ジオメトリ列の名前はGEOMETRYになります。

path_link_table_name

作成するパスリンク表の名前を指定します。(パスリンク表については、「パスリンク表」を参照してください。)このパラメータを指定しない形式を使用した場合、<network-name>_PLINK$という名前のパスリンク表が作成されます。

subpath_table_name

作成するサブパス表の名前を指定します。(サブパス表については、「サブパス表」を参照してください。)

subpath_geom_column

サブパス表のジオメトリ列の名前を指定します。(サブパス表については、「サブパス表」を参照してください。)

is_complex

将来の使用のために予約されています。今回のリリースでは、無視されます。

storage_parameters

ネットワーク表を作成するために内部的に使用される物理記憶域パラメータを指定します。CREATE TABLE文で使用するために、有効な文字列を指定する必要があります。たとえば、TABLESPACE tbs_3 STORAGE (INITIAL 100K NEXT 200K)のように指定します。このパラメータを指定しない場合、物理記憶域のデフォルト値が使用されます。

使用上の注意

このプロシージャは、ノード、リンクおよびオプションの関連表が存在しないときに空間ネットワークを作成する場合に役立ちます。このプロシージャは、ネットワークを作成し、そのネットワークのノード表、リンク表、パス表およびパスリンク表を作成し、xxx_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に適切な情報を挿入します。ノード表およびリンク表に、SDO_TOPO_GEOMETRY型のTOPO_GEOMETRYという名前のトポロジ・ジオメトリ列が含まれます。

作成するいずれかの表がすでに存在する場合、例外が発生します。

このプロシージャには2つの形式があります。簡単な方の形式では、表名およびジオメトリ列名とコスト列名にデフォルト値を使用して表を作成します。もう一方の形式では、表およびジオメトリ列とコスト列の名前を指定できます。

このプロシージャを使用するかわりに、SDO_NET.CREATE_NODE_TABLE、SDO_NET.CREATE_LINK_TABLE、SDO_NET.CREATE_PATH_TABLEおよびSDO_NET.CREATE_PATH_LINK_TABLEプロシージャを使用して表を作成し、USER_SDO_NETWORK_METADATAビューに適切な行を挿入することによって、ネットワークを作成できます。

例

次の例では、TOPO_NET1という名前の有向空間トポロジ・ジオメトリ・ネットワークを作成します。また、TOPO_NET1_NODE$、TOPO_NET1_LINK$、TOPO_NET1_PATH$およびTOPO_NET1_PLINK$表を作成し、xxx_SDO_NETWORK_METADATAビューを更新します。トポロジ・ジオメトリ列の名前はTOPO_GEOMETRYになります。ノード表とリンク表の両方に、COSTという名前のコスト列が含まれます。

EXECUTE SDO_NET.CREATE_TOPO_NETWORK('TOPO_NET1', 1, TRUE, TRUE);

SDO_NET.DELETE_CHILD_FEATURES

構文

SDO_NET.DELETE_CHILD_FEATURES(
parent_layer_id   IN NUMBER,
parent_feature_id IN NUMBER,
child_feature_ids IN SDO_NET_LAYER_FEAT_ARRAY);

説明

入力子フィーチャの親子関係を削除します。

パラメータ

parent_layer_id

親フィーチャ・レイヤーのIDを指定します。

parent_feature_id

指定した子フィーチャの親フィーチャのIDを指定します。

child_feature_ids

子フィーチャのIDを指定します。(SDO_NET_LAYER_FEAT_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

使用上の注意

指定した親フィーチャおよび子フィーチャは、必ず存在している必要があります。

指定した順序点で子フィーチャを削除するには、SDO_NET.DELETE_CHILD_FEATURES_ATプロシージャを使用します。

例

次の例では、POIフィーチャ・レイヤー内のフィーチャIDが1の子フィーチャを削除します。

DECLARE
parent_layer_id NUMBER;
parent_feature_id NUMBER := 1;
child_layer_id NUMBER;
child_feature_ids SDO_NET_LAYER_FEAT_ARRAY := SDO_NET_LAYER_FEAT_ARRAY();
BEGIN
parent_layer_id := sdo_net.get_feature_layer_id('GRID', 'PARENT_LAYER');
child_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
child_feature_ids.extend;
child_feature_ids(1) := SDO_NET_LAYER_FEAT(child_layer_id, 1);
sdo_net.delete_child_features(parent_layer_id, parent_feature_id, child_feature_ids);
END;
/

SDO_NET.DELETE_CHILD_FEATURES_AT

構文

SDO_NET.DELETE_CHILD_FEATURES_AT(
parent_layer_id   IN NUMBER,
parent_feature_id IN NUMBER,
sequence_numbers  IN SDO_NUMBER_ARRAY);

説明

指定した順序番号の子フィーチャの親子関係を削除します。

パラメータ

parent_layer_id

親フィーチャ・レイヤーのIDを指定します。

parent_feature_id

指定した子フィーチャの親フィーチャのIDを指定します。

child_feature_ids

子フィーチャのIDを指定します。(SDO_NET_LAYER_FEAT_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

使用上の注意

指定した親フィーチャおよび子フィーチャは、必ず存在している必要があります。

ID値で指定した子フィーチャを削除するには、SDO_NET.DELETE_CHILD_FEATURESプロシージャを使用します。

例

次の例では、順序番号1の子フィーチャを削除します。

DECLARE
parent_layer_id NUMBER;
parent_feature_id NUMBER := 1;
sequence_numbers SDO_NUMBER_ARRAY := SDO_NUMBER_ARRAY(1);
BEGIN
parent_layer_id := sdo_net.get_feature_layer_id('GRID', 'PARENT_LAYER');
sdo_net.delete_child_features_at(parent_layer_id, parent_feature_id, sequence_numbers);
END;
/

SDO_NET.DELETE_DANGLING_FEATURES

構文

SDO_NET.DELETE_DANGLING_FEATURES(
feature_layer_id IN NUMBER);

説明

フィーチャ・レイヤー内のダングリング・フィーチャを削除します。ダングリング・フィーチャとは、ネットワーク要素(ノードまたはリンク)に関連付けられていないフィーチャです。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

使用上の注意

フィーチャ・レイヤー内のダングリング・フィーチャを検出するには、SDO_NET.GET_DANGLING_FEATURESファンクションを使用します。

例

次の例では、GRIDネットワーク内のPOIフィーチャ・レイヤーのダングリング・フィーチャを削除します。

DECLARE
feature_layer_id NUMBER;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
sdo_net.delete_dangling_features(feature_layer_id);
END;
/

SDO_NET.DELETE_DANGLING_LINKS

構文

SDO_NET.DELETE_DANGLING_LINKS(
network IN VARCHAR2);

説明

任意のフィーチャ・レイヤー内のいずれのフィーチャからも参照されていないリンクを削除します。

パラメータ

network

ネットワーク名です。

使用上の注意

ネットワーク内のダングリング・リンクを検出するには、SDO_NET.GET_DANGLING_LINKSファンクションを使用します。

例

次の例では、GRIDネットワーク内のダングリング・リンクを削除します。

EXECUTE sdo_net.delete_dangling_links('GRID');

SDO_NET.DELETE_DANGLING_NODES

構文

SDO_NET.DELETE_DANGLING_NODES(
network IN VARCHAR2);

説明

任意のフィーチャ・レイヤー内のいずれのフィーチャからも参照されていないノードを削除します。

パラメータ

network

ネットワーク名です。

使用上の注意

ネットワーク内のダングリング・ノードを検出するには、SDO_NET.GET_DANGLING_NODESファンクションを使用します。

例

次の例では、GRIDネットワーク内のダングリング・ノードを削除します。

EXECUTE sdo_net.delete_dangling_nodes('GRID');

SDO_NET.DELETE_FEATURE_ELEMENTS

構文

SDO_NET.DELETE_FEATURE_ELEMENTS(
feature_layer_id IN NUMBER,
feature_id       IN NUMBER,
feature_elements IN SDO_NET_FEAT_ELEM_ARRAY,
delete_net_elems IN BOOLEAN DEFAULT FALSE);

説明

フィーチャからフィーチャ要素を削除します。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャ要素の削除元となるフィーチャのIDを指定します。

feature_elements

削除されるフィーチャ要素を指定します。(SDO_NET_FEAT_ELEM_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

delete_net_elems

指定したフィーチャのみによって参照されるネットワーク要素もすべて削除するかどうかを制御します(TRUEを指定すると、このような要素も削除され、FALSE (デフォルト)を指定すると、このような要素は削除されません)。

使用上の注意

このプロシージャは、SDO_NET.DELETE_FEATURE_ELEMENTS_ATとは対照的です。

例

次の例では、指定したフィーチャ・レイヤーから2つの点フィーチャ要素を削除します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
elements SDO_NET_FEAT_ELEM_ARRAY := SDO_NET_FEAT_ELEM_ARRAY();
link_id NUMBER := 1314;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
elements.extend;
elements(1) := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.2, null);
elements.extend;
elements(2) := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.7, null);
sdo_net.delete_feature_elements(feature_layer_id, feature_id, elements);
END;
/

SDO_NET.DELETE_FEATURE_ELEMENTS_AT

構文

SDO_NET.DELETE_FEATURE_ELEMENTS_AT(
feature_layer_id IN NUMBER,
feature_id       IN NUMBER,
sequence_numbers IN SDO_NUMBER_ARRAY,
delete_net_elems IN BOOLEAN DEFAULT FALSE);

説明

指定した順序番号のフィーチャ要素をフィーチャから削除します。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャ要素の削除元となるフィーチャのIDを指定します。

sequence_numbers

削除されるフィーチャ要素の順序番号の配列を指定します。

delete_net_elems

指定したフィーチャのみによって参照されるネットワーク要素もすべて削除するかどうかを制御します(TRUEを指定すると、このような要素も削除され、FALSE (デフォルト)を指定すると、このような要素は削除されません)。

使用上の注意

このプロシージャは、SDO_NET.DELETE_FEATURE_ELEMENTSとは対照的です。

例

次の例では、順序番号1のフィーチャ要素を削除します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
sequence_numbers SDO_NUMBER_ARRAY := SDO_NUMBER_ARRAY();
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
sequence_numbers.extend;
sequence_numbers(1) := 1;
sdo_net.delete_feature_elements_at(feature_layer_id, feature_id, sequence_numbers);
END;
/

SDO_NET.DELETE_FEATURES

構文

SDO_NET.DELETE_FEATURES(
feature_layer_id IN NUMBER,
feature_ids      IN SDO_NUMBER_ARRAY,
delete_net_elems IN BOOLEAN DEFAULT FALSE,
delete_children  IN BOOLEAN DEFAULT FALSE);

説明

フィーチャを削除します。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

feature_ids

削除するフィーチャのIDを指定します。

delete_net_elems

指定したフィーチャのみによって参照されるネットワーク要素もすべて削除するかどうかを制御します(TRUEを指定すると、このような要素も削除され、FALSE (デフォルト)を指定すると、このような要素は削除されません)。

delete_children

指定したフィーチャのみによって参照される子フィーチャもすべて削除するかどうかを制御します(TRUEを指定すると、このようなフィーチャも削除され、FALSE (デフォルト)を指定すると、このようなフィーチャは削除されません)。

使用上の注意

(なし。)

例

次の例では、GRIDネットワーク内のPOIフィーチャ・レイヤーからフィーチャID 1のフィーチャを削除します。

DECLARE
feature_layer_id NUMBER;
feature_ids SDO_NUMBER_ARRAY := SDO_NUMBER_ARRAY(1);
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
sdo_net.delete_features(feature_layer_id, feature_ids, false, false);
END;
/

SDO_NET.DELETE_LINK

構文

SDO_NET.DELETE_LINK(
network IN VARCHAR2,
link_id IN NUMBER);

説明

リンクを削除し、すべての依存するネットワーク要素およびフィーチャからこのリンクへのすべての参照も削除します。

パラメータ

network

ネットワーク名を指定します。

link_id

削除するリンクのIDを指定します。

使用上の注意

このプロシージャは、指定したリンクをリンク表(「リンク表」を参照)から削除して、このリンクに依存する他のすべてのネットワーク要素を削除します。たとえば、指定したリンクがパスおよびサブパスに含まれている場合は、それらのパスやサブパスも削除されます。

例

次の例では、SDO_NET2ネットワーク内のリンクIDが1のリンクを削除します。

SELECT SDO_NET.DELETE_LINK('SDO_NET2', 1);

SDO_NET.DELETE_NODE

構文

SDO_NET.DELETE_NODE(
network IN VARCHAR2,
node_id IN NUMBER);

説明

ノードを削除し、すべての依存するネットワーク要素およびフィーチャからこのノードへのすべての参照も削除します。

パラメータ

network

ネットワーク名を指定します。

node_id

削除するノードのIDを指定します。

使用上の注意

このプロシージャは、指定したノードをノード表(「ノード表」を参照)から削除して、このノードに依存する他のすべてのネットワーク要素を削除します。たとえば、指定したノードがリンク定義に含まれている場合は、それらのリンクは削除されます。削除されたリンクがパスおよびサブパスに含まれている場合は、それらのパスやサブパスも削除されます。

例

次の例では、SDO_NET2ネットワーク内のノードIDが1のノードを削除します。

SELECT SDO_NET.DELETE_NODE('SDO_NET2', 1);

SDO_NET.DELETE_PATH

構文

SDO_NET.DELETE_PATH(
network IN VARCHAR2,
path_id IN NUMBER);

説明

パスおよびすべての依存するネットワーク要素を削除します。

パラメータ

network

ネットワーク名を指定します。

path_id

削除するパスのIDを指定します。

使用上の注意

このプロシージャは、指定したパスをパス表(「パス表」を参照)から削除して、このパスに依存する他のすべてのネットワーク要素を削除します。たとえば、指定したパスにサブパスが含まれている場合は、それらのサブパスも削除されます。

例

次の例では、SDO_NET2ネットワーク内のパスIDが1のパスを削除します。

SELECT SDO_NET.DELETE_PATH('SDO_NET2', 1);

SDO_NET.DELETE_PHANTOM_FEATURES

構文

SDO_NET.DELETE_PHANTOM_FEATURES(
feature_layer_id IN NUMBER);

説明

フィーチャ・レイヤー内のファントム・フィーチャを削除します。ファントム・フィーチャとは、存在しないネットワーク要素(ノードまたはリンク)を参照するフィーチャです。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

使用上の注意

フィーチャ・レイヤー内のファントム・フィーチャを検出するには、SDO_NET.GET_PHANTOM_FEATURESファンクションを使用します。

例

次の例では、GRIDネットワーク内のPOIフィーチャ・レイヤーのファントム・フィーチャを削除します。

DECLARE
feature_layer_id NUMBER;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
sdo_net.delete_phantom_features(feature_layer_id);
END;
/

SDO_NET.DELETE_SUBPATH

構文

SDO_NET.DELETE_SUBPATH(
network    IN VARCHAR2,
subpath_id IN NUMBER);

説明

サブパスを削除します。

パラメータ

network

ネットワーク名を指定します。

subpath_id

削除するサブパスのIDを指定します。

使用上の注意

このプロシージャは、指定したサブパスをパス表(「パス表」を参照)から削除します。サブパス定義に依存している他の要素がないため、このプロシージャでは、他のネットワーク要素は削除されません。

例

次の例では、SDO_NET2ネットワーク内のサブパスIDが17のサブパスを削除します。

SELECT SDO_NET.DELETE_SUBPATH('SDO_NET2', 17);

SDO_NET.DEREGISTER_CONSTRAINT

構文

SDO_NET.DEREGISTER_CONSTRAINT(
constraint_name IN VARCHAR2);

説明

データベースのJavaリポジトリから、指定したネットワーク制約のクラスをアンロード(削除)し、USER_SDO_NETWORK_CONSTRAINTSビュー(「xxx_SDO_NETWORK_CONSTRAINTSビュー」を参照)から該当する制約の行を削除します。

パラメータ

constraint_name

ネットワーク制約の名前を指定します。USER_SDO_NETWORK_CONSTRAINTSビューのCONSTRAINT列の値を一致させる必要があります。

使用上の注意

このプロシージャは、SDO_NET.REGISTER_CONSTRAINTプロシージャなどで、すでに有効化されているネットワーク制約を無効にする場合に使用します。ネットワーク制約の詳細は、「ネットワーク制約」を参照してください。

例

次の例では、GivenProhibitedTurnという名前のネットワーク制約を登録解除(無効化)します。

EXECUTE SDO_NET.DEREGISTER_CONSTRAINT('GivenProhibitedTurn');

SDO_NET.DROP_FEATURE_LAYER

構文

SDO_NET.DROP_FEATURE_LAYER(
network_name       IN VARCHAR2,
feature_layer_name IN VARCHAR2,
drop_tables        IN BOOLEAN DEFAULT FALSE);

説明

フィーチャ・レイヤーを削除します。

パラメータ

network_name

削除するフィーチャ・レイヤーを含むネットワークの名前を指定します。

feature_layer_name

削除するフィーチャ・レイヤーの名前を指定します。

drop_tables

関連するすべての表をフィーチャ・レイヤー・メタデータとともに削除するかどうかを制御します(TRUEを指定すると、フィーチャ表、フィーチャ要素関係表およびフィーチャ階層表を削除し、さらにフィーチャ・レイヤー・メタデータを削除しますが、FALSE (デフォルト)を指定すると、フィーチャ・レイヤー・メタデータは削除しますが、フィーチャ表、フィーチャ要素関係表およびフィーチャ階層表は削除しません)。

使用上の注意

(なし。)

例

次の例では、GRIDネットワーク内のPOIフィーチャ・レイヤーを削除し、さらに(drop_tablesがtrueであるため)フィーチャ表、フィーチャ要素関係表およびフィーチャ階層表を削除し、フィーチャ・レイヤー・メタデータを削除します。

EXECUTE sdo_net.drop_feature_layer('GRID', 'POI', true);

SDO_NET.DROP_NETWORK

構文

SDO_NET.DROP_NETWORK(
network IN VARCHAR2);

説明

ネットワークを削除します。

パラメータ

network

削除するネットワークの名前を指定します。

使用上の注意

このプロシージャは、ネットワークに関連付けられたノード表、リンク表およびパス表と、そのネットワークのメタデータも削除します。

例

次の例では、ROADS_NETWORKという名前のネットワークを削除します。

EXECUTE SDO_NET.DROP_NETWORK('ROADS_NETWORK');

SDO_NET.FIND_CONNECTED_COMPONENTS

構文

SDO_NET.FIND_CONNECTED_COMPONENTS(
network IN VARCHAR2);

説明

ネットワーク内で指定したリンク・レベルに接続されているすべてのコンポーネントを検索し、接続されているコンポーネントの表にその情報を格納します。

パラメータ

network

ネットワーク名を指定します。

link_level

接続されているコンポーネントを検索するためのリンク・レベルを指定します(デフォルトは1)。リンク・レベルは、リンクの優先順位であり、ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

component_table_name

このプロシージャで作成される、接続されているコンポーネントの表の名前を指定します。(指定した名前の表がすでに存在する場合は、指定したリンク・レベルの情報で更新されます。)接続されているコンポーネント表については、「接続されているコンポーネント表」を参照してください。

log_loc

ログ・ファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

log_file

発生する可能性があるエラーや問題など、空間ネットワーク操作に関する情報を格納するログ・ファイルを指定します。

open_mode

ログ・ファイルを開く際のモードを示す1文字のコードを指定します。Wは上書き(指定した場所および名前の既存のログ・ファイルをすべて削除し、新規ファイルを作成)、A (デフォルト)は追加(指定した既存のログ・ファイルに情報を追加)を表します。Aを指定し、そのログ・ファイルが存在しない場合は、新規ログ・ファイルが作成されます。

使用上の注意

このプロシージャは、指定したネットワークの各ノードについて、そのノードから到達可能な他のすべてのノードの情報を検索し、接続されているコンポーネントの指定した表にその情報を格納します。この情報が表に格納されていると、ネットワーク分析の多くの操作でパフォーマンスが向上します。

例

次の例では、SDO_PARTITIONEDネットワーク内のリンク・レベル1で接続されているコンポーネントを検索し、SDO_PARTITIONED_CONN_COMP_TAB表を作成または更新します。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるsdo_partitioned.logファイルに追加されます(open_mode => 'a')。

EXECUTE SDO_NET.FIND_CONNECTED_COMPONENTS(-
network => 'SDO_PARTITIONED', -
link_level => 1,-
component_table_name => 'sdo_partitioned_conn_comp_tab',-
log_loc => 'LOG_DIR', log_file=> 'sdo_partitioned.log',-
open_mode => 'a');

SDO_NET.GENERATE_NODE_LEVELS

構文

SDO_NET.GENERATE_NODE_LEVELS(
network               IN VARCHAR2,
node_level_table_name IN VARCHAR2,
overwrite             IN BOOLEAN DEFAULT FALSE,
log_loc               IN VARCHAR2,
log_file              IN VARCHAR2,
open_mode             IN VARCHAR2 DEFAULT 'A');

説明

指定したマルチレベル・ネットワークのノード・レベルを生成し、その情報を表に格納します。

パラメータ

network

ネットワーク名を指定します。

node_level_table_name

ノード・レベル情報を格納する表を指定します。この表には、(node_id NUMBER PRIMARY KEY, link_level NUMBER)という定義が必要です。

overwrite

node_level_table_nameで指定された表がすでに存在する場合の動作を制御し、TRUEを指定すると、その表の内容が新しいデータに置き換えられ、FALSE (デフォルト)を指定すると、エラーが生成されます。(node_level_table_nameで指定された表が存在しない場合、このパラメータは無視されます。)

log_loc

ログ・ファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

log_file

発生する可能性があるエラーや問題など、空間ネットワーク操作に関する情報を格納するログ・ファイルを指定します。

open_mode

ログ・ファイルを開く際のモードを示す1文字のコードを指定します。Wは上書き(指定した場所および名前の既存のログ・ファイルをすべて削除し、新規ファイルを作成)、A (デフォルト)は追加(指定した既存のログ・ファイルに情報を追加)を表します。Aを指定し、そのログ・ファイルが存在しない場合は、新規ログ・ファイルが作成されます。

使用上の注意

networkがマルチレベル・ネットワーク(複数のリンク・レベルを持つネットワーク)ではない場合、このプロシージャは処理を実行しません。

このプロシージャは、SDO_NET.GENERATE_PARTITION_BLOBSプロシージャによって内部的に使用されます。したがって、SDO_NET.GENERATE_PARTITION_BLOBSを実行済の場合は、このプロシージャを実行する必要はありません。ただし、次のケースでは、このプロシージャを明示的に実行する必要があります。

- BLOBからではなく、ノード表またはリンク表からパーティションを読み取るようにJavaアプリケーションが構成されており、ネットワーク上にパーティションBLOBが生成されたことがない場合。

- 上位レベルのノードがネットワークに対して追加または削除され、ノードとパーティションの関係が更新された場合。SDO_NET.GENERATE_PARTITION_BLOBを実行して、中に含まれるパーティションBLOBを再生成する前に、手動でノード・レベル表の更新またはこのプロシージャ(SDO_NET.GENERATE_NODE_LEVELS)の実行を行う必要があります。

ノード・レベル表の名前は、USER_SDO_NETWORK_METADATAビューのNODE_LEVEL_TABLE_NAME列(「xxx_SDO_NETWORK_METADATAビュー」を参照)に格納されます。

例

次の例では、MY_MULTILEVEL_NETネットワークのノード・レベル情報を生成して、その情報をMY_NET_NODE_LEVELS表に格納します。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるmy_multilevel_net.logファイルに追加されます(open_mode => 'a')。

EXECUTE SDO_NET.GENERATE_NODE_LEVELS(-
network => 'MY_MULTILEVEL_NET', -
node_level_table_name => 'MY_NET_NODE_LEVELS',-
overwrite => FALSE,-
log_loc => 'LOG_DIR', log_file=> 'my_multilevel_net.log',-
open_mode => 'a');

SDO_NET.GENERATE_PARTITION_BLOB

構文

SDO_NET.GENERATE_PARTITION_BLOB(
network              IN VARCHAR2,
link_level           IN NUMBER DEFAULT 1,
partition_id         N VARCHAR2,
include_user_data    IN BOOLEAN,
log_loc              IN VARCHAR2,
log_file             IN VARCHAR2,
open_mode            IN VARCHAR2 DEFAULT 'A',
preform_delta_update IN BOOLEAN DEFAULT FALSE);

説明

ネットワーク内の指定のリンク・レベルに関連付けられた指定のパーティションに対して、1つのバイナリ・ラージ・オブジェクト(BLOB)表現を生成し、その情報を既存のパーティションBLOB表に格納します。

パラメータ

network

ネットワーク名を指定します。

link_level

BLOBに含まれるリンクのリンク・レベル(デフォルトは1)を指定します。リンク・レベルは、リンクの優先順位であり、ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

partition_id

パーティションID番号を指定します。リンク・レベルとパーティションIDの指定した組合せに関連付けられたネットワーク要素は、生成されたBLOBに含まれています。

include_user_data

各BLOBで表現されるネットワーク要素に関連付けられたカテゴリ0 (ゼロ)のユーザー・データについて、BLOBに含める場合はTRUE、BLOBに含めない場合はFALSEを指定します。

log_loc

ログ・ファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

log_file

発生する可能性があるエラーや問題など、空間ネットワーク操作に関する情報を格納するログ・ファイルを指定します。

open_mode

ログ・ファイルを開く際のモードを示す1文字のコードを指定します。Wは上書き(指定した場所および名前の既存のログ・ファイルをすべて削除し、新規ファイルを作成)、A (デフォルト)は追加(指定した既存のログ・ファイルに情報を追加)を表します。Aを指定し、そのログ・ファイルが存在しない場合は、新規ログ・ファイルが作成されます。

perform_delta_update

(将来使用するために予約されています。唯一許可されている値はFALSEであり、これがデフォルトです。)

使用上の注意

このプロシージャは、1つの新しいBLOBを追加するか、またはパーティションBLOB表内の1つの既存のBLOBを置換します。パーティションBLOB表は、あらかじめSDO_NET.GENERATE_PARTITION_BLOBSプロシージャで作成しておく必要があります。

SDO_NET.GENERATE_PARTITION_BLOBSプロシージャを使用してすべてのパーティションのBLOBを更新するのとは対照的に、複数の大きなパーティションを含むネットワークにおいて、目的のパーティションのBLOBをより短時間で更新できることも、このプロシージャの用途の1つです。

例

次の例では、SDO_PARTITIONEDネットワークでパーティションIDが1、リンク・レベルが1にそれぞれ関連付けられたパーティションに対してパーティションBLOBを生成し、SDO_PARTITIONED_PART_BLOB_TAB表の適切なBLOBを追加または置換します。また、ネットワーク要素に関連付けられたカテゴリ0 (ゼロ)のすべてのユーザー・データも格納します。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるsdo_partitioned.logファイルに追加されます(open_mode => 'a')。

EXECUTE SDO_NET.GENERATE_PARTITION_BLOB(-
network => 'SDO_PARTITIONED', -
link_level => 1,-
partition_id => 1,-
include_user_data => true,-
log_loc => 'LOG_DIR', log_file=> 'sdo_partitioned.log',-
open_mode => 'a');

SDO_NET.GENERATE_PARTITION_BLOBS

構文

SDO_NET.GENERATE_PARTITION_BLOBS(
network                   IN VARCHAR2,
link_level                IN NUMBER DEFAULT 1,
partition_blob_table_name IN VARCHAR2,
include_user_data         IN BOOLEAN,
commit_for_each_blob      IN BOOLEAN DEFAULT TRUE,
log_loc                   IN VARCHAR2,
log_file                  IN VARCHAR2,
open_mode                 IN VARCHAR2 DEFAULT 'A',
perform_delta_update      IN BOOLEAN DEFAULT FALSE,
regenerate_node_levels    IN BOOLEAN DEFAULT FALSE);

説明

ネットワーク内の指定のリンク・レベルに関連付けられたパーティションに対して、バイナリ・ラージ・オブジェクト(BLOB)表現を生成し、その情報をパーティションBLOB表に格納します。

パラメータ

network

ネットワーク名を指定します。

link_level

各BLOBに含まれるリンクのリンク・レベル(デフォルトは1)を指定します。リンク・レベルは、リンクの優先順位であり、ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

partition_blob_table_name

このプロシージャで作成されるパーティションBLOB表の名前を指定します。(指定した名前の表がすでに存在する場合は、指定したリンク・レベルの情報で更新されます。)パーティションBLOB表については、「パーティションBLOB表」を参照してください。

include_user_data

各BLOBで表現されるネットワーク要素に関連付けられたカテゴリ0 (ゼロ)のユーザー・データについて、各BLOBに含める場合はTRUE、各BLOBに含めない場合はFALSEを指定します。

commit_for_each_blob

各パーティションBLOBが生成後にデータベースにコミットされる場合はTRUE (デフォルト)、コミットされない場合はFALSEを指定します(この場合、1つ以上の明示的なコミット操作を実行する必要があります)。

log_loc

ログ・ファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

log_file

発生する可能性があるエラーや問題など、空間ネットワーク操作に関する情報を格納するログ・ファイルを指定します。

open_mode

ログ・ファイルを開く際のモードを示す1文字のコードを指定します。Wは上書き(指定した場所および名前の既存のログ・ファイルをすべて削除し、新規ファイルを作成)、A (デフォルト)は追加(指定した既存のログ・ファイルに情報を追加)を表します。Aを指定し、そのログ・ファイルが存在しない場合は、新規ログ・ファイルが作成されます。

perform_delta_update

(将来使用するために予約されています。唯一許可されている値はFALSEであり、これがデフォルトです。)

regenerate_node_levels

マルチレベル・ネットワークのノード・レベル表を再生成する場合はTRUEを、マルチレベル・ネットワークのノード・レベル表を再生成しない場合はFALSE (デフォルト)を指定します。ネットワークで上位レベル(第2レベルまたはそれ以上)のノードが追加または削除される場合、またはノードのレベルが変更される場合は、このパラメータをTRUEに設定する必要があります。ノードのレベルは、そのノードにつながる最大リンク・レベルとして定義されます。

使用上の注意

パーティションBLOBを生成すると、特に大規模なネットワークの場合には、ネットワーク分析の多くの操作でパフォーマンスが向上します。

ネットワークがパーティション化されていない場合、このプロシージャは、ネットワーク全体を表す1つのBLOBを生成します。

このプロシージャは、最初にマルチレベル・ネットワーク上で実行されるときに、SDO_NET.GENERATE_NODE_LEVELSを内部的にコールしてノード・レベル表(「ノード・レベル表(オプション)」を参照)を作成して移入します。その後、このプロシージャがマルチレベル・ネットワーク上でコールされるときは、regenerate_node_levelsパラメータを使用して、既存のノード・レベル表を上書きするかどうかを指定できます。

このプロシージャを、リンク・レベルとパーティションIDの指定した組合せに対して単一のBLOBを再生成し、既存のパーティションBLOB表に情報を追加するSDO_NET.GENERATE_PARTITION_BLOBと混同しないように注意してください。

例

次の例では、SDO_PARTITIONEDネットワーク内にリンク・レベル1のパーティションBLOBを生成し、SDO_PARTITIONED_PART_BLOB_TAB表を作成または更新します。また、ネットワーク要素に関連付けられたカテゴリ0 (ゼロ)のすべてのユーザー・データも格納します。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるsdo_partitioned.logファイルに追加されます(open_mode => 'a')。

EXECUTE SDO_NET.GENERATE_PARTITION_BLOBS(-
network => 'SDO_PARTITIONED', -
link_level => 1,-
partition_blob_table_name => 'sdo_partitioned_part_blob_tab',-
include_user_data => true,-
log_loc => 'LOG_DIR', log_file=> 'sdo_partitioned.log',-
open_mode => 'a');

SDO_NET.GET_CHILD_FEATURE_IDS

構文

SDO_NET.GET_CHILD_FEATURE_IDS(
feature_layer_id IN NUMBER,
feature_id       IN NUMBER
) RETURN SDO_NET_LAYER_FEAT_ARRAY;

説明

指定したフィーチャのフィーチャ・レイヤーIDおよび子フィーチャIDを戻します。(SDO_NET_LAYER_FEAT_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

パラメータ

feature_layer_id

フィーチャ(親フィーチャ)のフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャのIDです。

使用上の注意

指定したフィーチャについて親フィーチャのフィーチャ・レイヤーIDおよびフィーチャIDを取得するには、SDO_NET.GET_PARENT_FEATURE_IDSファンクションを使用します。

親フィーチャおよび子フィーチャを含むフィーチャの詳細は、「フィーチャおよびフィーチャ・レイヤー」を参照してください。

例

次の例では、PARENT_LAYERフィーチャ・レイヤー内のフィーチャ1の子フィーチャIDを戻して表示します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
feature_ids SDO_NET_LAYER_FEAT_ARRAY;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'PARENT_LAYER');
feature_ids := sdo_net.get_child_feature_ids(feature_layer_id, feature_id);
FOR i in 1..feature_ids.count
LOOP
--dbms_output.put_line('['||i||']'||' FEATURE_LAYER_ID   = '||feature_ids(i).feature_layer_id);
dbms_output.put_line('['||i||']'||' FEATURE_ID         = '||feature_ids(i).feature_id);
dbms_output.put_line('---');
END LOOP;
END;
/

SDO_NET.GET_CHILD_LINKS

構文

SDO_NET.GET_CHILD_LINKS(
network IN VARCHAR2,
link_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;

説明

リンクの子リンクを戻します。

パラメータ

network

ネットワーク名を指定します。

link_id

子リンクを戻すリンクのIDを指定します。

使用上の注意

ネットワーク階層の親ノードと子ノード、および親リンクと子リンクの詳細は、「ネットワークの階層」を参照してください。

例

次の例では、XYZ_NETWORKネットワークに含まれる、リンクIDが1001のリンクの子リンクを戻します。

SELECT SDO_NET.GET_CHILD_LINKS('XYZ_NETWORK', 1001) FROM DUAL;

SDO_NET.GET_CHILD_LINKS('XYZ_NETWORK',1001)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(1108, 1109)

SDO_NET.GET_CHILD_NODES

構文

SDO_NET.GET_CHILD_NODES(
network IN VARCHAR2,
node_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;

説明

ノードの子ノードを戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

子ノードを戻すノードのIDを指定します。

使用上の注意

ネットワーク階層の親ノードと子ノード、および親リンクと子リンクの詳細は、「ネットワークの階層」を参照してください。

例

次の例では、XYZ_NETWORKネットワークに含まれる、ノードIDが1のノードの子ノードを戻します。

SELECT SDO_NET.GET_CHILD_NODES('XYZ_NETWORK', 1) FROM DUAL;

SDO_NET.GET_CHILD_NODES('XYZ_NETWORK',1)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(101, 102, 103, 104, 105, 106)

SDO_NET.GET_DANGLING_FEATURES

構文

SDO_NET.GET_DANGLING_FEATURES(
feature_layer_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;

説明

フィーチャ・レイヤー内のダングリング・フィーチャのIDを戻します。ダングリング・フィーチャとは、ネットワーク要素(ノードまたはリンク)に関連付けられていないフィーチャです。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

使用上の注意

フィーチャ・レイヤー内のダングリング・フィーチャを削除するには、SDO_NET.DELETE_DANGLING_FEATURESプロシージャを使用します。

例

次の例では、GRIDネットワーク内のPOIフィーチャ・レイヤーのダングリング・フィーチャを取得してから、そのフィーチャIDを表示します。

DECLARE
feature_layer_id NUMBER;
feature_ids SDO_NUMBER_ARRAY;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
feature_ids := sdo_net.get_dangling_features(feature_layer_id);
dbms_output.put_line('Dangling Features:');
for i in 1..feature_ids.count loop
dbms_output.put_line('['||i||'] '||feature_ids(i));
end loop;
END;
/

SDO_NET.GET_DANGLING_LINKS

構文

SDO_NET.GET_DANGLING_LINKS(
network IN VARCHAR2
) RETURN SDO_NUMBER_ARRAY;

説明

任意のフィーチャ・レイヤー内のいずれのフィーチャからも参照されていないリンクを戻します。

パラメータ

network

ネットワーク名です。

使用上の注意

ネットワーク内のダングリング・リンクを削除するには、SDO_NET.DELETE_DANGLING_LINKSプロシージャを使用します。

例

次の例では、GRIDネットワーク内のダングリング・リンクを取得してから、検出されたダングリング・リンクの数(合計)を表示します。

DECLARE
link_ids SDO_NUMBER_ARRAY;
BEGIN
link_ids := sdo_net.get_dangling_links('GRID');
dbms_output.put_line('Number of dangling Links: '||link_ids.count);
END;
/

SDO_NET.GET_DANGLING_NODES

構文

SDO_NET.GET_DANGLING_NODES(
network IN VARCHAR2
) RETURN SDO_NUMBER_ARRAY;

説明

どのフィーチャ・レイヤー内のどのフィーチャによっても参照されていないノードを戻します。

パラメータ

network

ネットワーク名です。

使用上の注意

ネットワーク内のダングリング・ノードを削除するには、SDO_NET.DELETE_DANGLING_NODESプロシージャを使用します。

例

次の例では、GRIDネットワーク内のダングリング・ノードを取得してから、検出されたダングリング・ノードの数(合計)を表示します。

DECLARE
node_ids SDO_NUMBER_ARRAY;
BEGIN
node_ids := sdo_net.get_dangling_nodes('GRID');
dbms_output.put_line('Number of dangling Nodes: '||node_ids.count);
END;
/

SDO_NET.GET_FEATURE_ELEMENTS

構文

SDO_NET.GET_FEATURE_ELEMENTS(
feature_layer_id IN NUMBER,
feature_id       IN NUMBER
) RETURN SDO_NET_FEAT_ELEM_ARRAY;

説明

フィーチャ・レイヤー内のフィーチャ要素を戻します。(SDO_NET_FEAT_ELEM_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

パラメータ

feature_layer_id

フィーチャのフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャのIDです。

使用上の注意

フィーチャ要素をフィーチャに追加するには、SDO_NET.ADD_FEATURE_ELEMENTプロシージャを使用し、1回の操作で複数のフィーチャ要素を追加するには、SDO_NET.ADD_FEATURE_ELEMENTSプロシージャを使用します。

例

次の例では、指定したフィーチャ・レイヤーのフィーチャ・レイヤーIDを取得してから、このフィーチャ・レイヤー内にあるフィーチャ1のフィーチャ要素に関する情報を取得して表示します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
elements SDO_NET_FEAT_ELEM_ARRAY;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
elements := sdo_net.get_feature_elements(feature_layer_id, feature_id);
FOR i in 1..elements.count
LOOP
dbms_output.put_line('['||i||']'||' FEAT_ELEM_TYPE   = '||elements(i).feat_elem_type);
dbms_output.put_line('['||i||']'||' NET_ELEM_ID      = '||elements(i).net_elem_id);
dbms_output.put_line('['||i||']'||' START_PERCENTAGE = '||elements(i).start_percentage);
dbms_output.put_line('['||i||']'||' END_PERCENTAGE   = '||elements(i).end_percentage);
dbms_output.put_line('---');
END LOOP;
END;
/

SDO_NET.GET_FEATURE_LAYER_ID

構文

SDO_NET.GET_FEATURE_LAYER_ID(
network_name       IN VARCHAR2
feature_layer_name IN VARCHAR2
) RETURN NUMBER;

説明

指定したフィーチャ・レイヤーのフィーチャ・レイヤーIDを戻します。

パラメータ

network_name

ネットワーク名を指定します。

feature_layer_name

フィーチャ・レイヤーの名前です。

使用上の注意

このファンクションは、USER_SDO_NETWORK_FEATUREビュー内の、指定されたネットワークとフィーチャ・レイヤーの組合せのFEATURE_LAYER_ID列の値を戻します(「xxx_SDO_NETWORK_FEATUREビュー」の図5-19を参照)。

例

次の例では、指定したフィーチャ・レイヤーのフィーチャ・レイヤーIDを取得して表示します。

DECLARE
feature_layer_id NUMBER;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
dbms_output.put_line('Feature layer ID for the POI feature layer is '||feature_layer_id);
END;
/

SDO_NET.GET_FEATURES_ON_LINKS

構文

SDO_NET.GET_FEATURES_ON_LINKS
feature_layer_id IN NUMBER,
link_ids         IN SDO_NUMBER_ARRAY
) RETURN SDO_NUMBER_ARRAY;

説明

指定したリンクを参照するフィーチャ・レイヤー内のフィーチャのIDを戻します。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

link_ids

フィーチャをチェックするリンクのIDを指定します。

使用上の注意

指定したノードを参照するフィーチャ・レイヤー内のフィーチャのIDを検出するには、SDO_NET.GET_FEATURES_ON_NODESプロシージャを使用します。

例

次の例では、指定したリンク上にあるフィーチャのフィーチャIDを取得して表示します。

DECLARE
feature_layer_id NUMBER;
link_ids SDO_NUMBER_ARRAY := SDO_NUMBER_ARRAY(1314);
feature_ids SDO_NUMBER_ARRAY;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
feature_ids := sdo_net.get_features_on_links(feature_layer_id, link_ids);
dbms_output.put_line('Features On Link '||link_ids(1)||':');
for i in 1..feature_ids.count loop
dbms_output.put_line('['||i||'] '||feature_ids(i));
end loop;
END;
/

SDO_NET.GET_FEATURES_ON_NODES

構文

SDO_NET.GET_FEATURES_ON_NODES
feature_layer_id IN NUMBER,
node_ids         IN SDO_NUMBER_ARRAY
) RETURN SDO_NUMBER_ARRAY;

説明

指定したノードを参照するフィーチャ・レイヤー内のフィーチャのIDを戻します。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

node_ids

フィーチャをチェックするノードのIDを指定します。

使用上の注意

指定したリンクを参照するフィーチャ・レイヤー内のフィーチャのIDを検出するには、SDO_NET.GET_FEATURES_ON_LINKSプロシージャを使用します。

例

次の例では、指定したノード上にあるフィーチャのフィーチャIDを取得して表示します。

DECLARE
feature_layer_id NUMBER;
node_ids SDO_NUMBER_ARRAY := SDO_NUMBER_ARRAY(13);
feature_ids SDO_NUMBER_ARRAY;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
feature_ids := sdo_net.get_features_on_nodes(feature_layer_id, node_ids);
dbms_output.put_line('Features On Node '||node_ids(1)||':');
for i in 1..feature_ids.count loop
dbms_output.put_line('['||i||'] '||feature_ids(i));
end loop;
END;
/

SDO_NET.GET_GEOMETRY_TYPE

構文

SDO_NET.GET_GEOMETRY_TYPE(
network IN VARCHAR2
) RETURN VARCHAR2;

説明

空間ネットワークのジオメトリ・タイプを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのGEOMETRY_TYPE列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークのジオメトリ・タイプを戻します。

SELECT SDO_NET.GET_GEOMETRY_TYPE('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_GEOMETRY_TYPE('ROADS_NETWORK')
--------------------------------------------------------------------------------
LRS_GEOMETRY

SDO_NET.GET_IN_LINKS

構文

SDO_NET.GET_IN_LINKS(
network IN VARCHAR2,
node_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;

説明

ノードへのインバウンド・リンクのリンクID番号の配列を戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

インバウンド・リンクの配列を戻すノードのIDを指定します。

使用上の注意

インバウンド・リンクおよび関連するネットワーク・データ・モデル・グラフの概念については、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、ノードIDが3のノードへのインバウンド・リンクのリンクID番号の配列を戻します。

SELECT SDO_NET.GET_IN_LINKS('ROADS_NETWORK', 3) FROM DUAL;

SDO_NET.GET_IN_LINKS('ROADS_NETWORK',3)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(102)

SDO_NET.GET_INVALID_LINKS

構文

SDO_NET.GET_INVALID_LINKS(
network IN VARCHAR2
) RETURN SDO_NUMBER_ARRAY;

説明

ネットワーク内の無効なリンクを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、指定されたネットワーク内の無効なリンクについて、ノードID番号のカンマ区切りのリストとともにSDO_NUMBER_ARRAYオブジェクトを戻します。無効なリンクが存在しない場合、このファンクションはNULL値を戻します。

例

次の例では、SDO_PARTITIONEDネットワーク内の無効なリンクを戻します。

SELECT SDO_NET.GET_INVALID_LINKS('SDO_PARTITIONED') FROM DUAL;

SDO_NET.GET_INVALID_NODES

構文

SDO_NET.GET_INVALID_NODES(
network IN VARCHAR2
) RETURN SDO_NUMBER_ARRAY;

説明

ネットワーク内の無効なノードを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、指定されたネットワーク内の無効なノードについて、ノードID番号のカンマ区切りのリストとともにSDO_NUMBER_ARRAYオブジェクトを戻します。無効なノードが存在しない場合、このファンクションはNULL値を戻します。

例

次の例では、SDO_PARTITIONEDネットワーク内の無効なノードを戻します。

SELECT SDO_NET.GET_INVALID_NODES('SDO_PARTITIONED') FROM DUAL;

SDO_NET.GET_INVALID_PATHS

構文

SDO_NET.GET_INVALID_PATHS(
network IN VARCHAR2
) RETURN SDO_NUMBER_ARRAY;

説明

ネットワーク内の無効なパスを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、指定されたネットワーク内の無効なパスについて、ノードID番号のカンマ区切りのリストとともにSDO_NUMBER_ARRAYオブジェクトを戻します。無効なパスが存在しない場合、このファンクションはNULL値を戻します。

例

次の例では、SDO_PARTITIONEDネットワーク内の無効なパスを戻します。

SELECT SDO_NET.GET_INVALID_PATHS('SDO_PARTITIONED') FROM DUAL;

SDO_NET.GET_ISOLATED_NODES

構文

SDO_NET.GET_ISOLATED_NODES(
network  IN VARCHAR2
) RETURN SDO_NUMBER_ARRAY;

説明

ネットワーク内の孤立ノードを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、指定されたネットワーク内の孤立ノードについて、ノードID番号のカンマ区切りのリストとともにSDO_NUMBER_ARRAYオブジェクトを戻します。孤立ノードが存在しない場合、このファンクションはNULL値を戻します。

ネットワークの孤立ノードの簡単な説明は、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、SDO_PARTITIONEDネットワーク内の孤立ノードを戻します。

SELECT SDO_NET.GET_ISOLATED_NODES('SDO_PARTITIONED') FROM DUAL;

SDO_NET.GET_LINK_COST_COLUMN

構文

SDO_NET.GET_LINK_COST_COLUMN(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークのリンク・コスト列の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのLINK_COST_COLUMN列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークのリンク・コスト列の名前を戻します。

SELECT SDO_NET.GET_LINK_COST_COLUMN('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_LINK_COST_COLUMN('ROADS_NETWORK')
--------------------------------------------------------------------------------
COST

SDO_NET.GET_LINK_DIRECTION

構文

SDO_NET.GET_LINK_DIRECTION(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークのリンクの方向を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのLINK_DIRECTION列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークのリンクの方向を戻します。

SELECT SDO_NET.GET_LINK_DIRECTION('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_LINK_DIRECTION('ROADS_NETWORK')
--------------------------------------------------------------------------------
DIRECTED

SDO_NET.GET_LINK_GEOM_COLUMN

構文

SDO_NET.GET_LINK_GEOM_COLUMN(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

空間ネットワークのリンク・ジオメトリ列の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのLINK_GEOM_COLUMN列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークのリンク・ジオメトリ列の名前を戻します。

SELECT SDO_NET.GET_LINK_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_LINK_GEOM_COLUMN('ROADS_NETWORK')
--------------------------------------------------------------------------------
LINK_GEOMETRY

SDO_NET.GET_LINK_GEOMETRY

構文

SDO_NET.GET_LINK_GEOMETRY(
network          IN VARCHAR2,
link_id          IN NUMBER,
start_percentage IN NUMBER DEFAULT 0,
end_percentage   IN NUMBER DEFAULT 1.0
) RETURN SDO_GEOMETRY;

説明

空間ネットワーク内のリンクに関連付けられたジオメトリ全体またはジオメトリの一部を戻します。

パラメータ

network

ネットワーク名を指定します。

link_id

ジオメトリを戻すリンクのID番号を指定します。

start_percentage

戻されたジオメトリの開始点に使用されるリンクに沿った距離の割合を指定します。0から1.0までの数字として表します(たとえば、0.5は50パーセントです)。デフォルト値は0です(つまり、戻されたジオメトリの開始はリンクの開始点に関連付けられています)。

end_percentage

戻されたジオメトリの終了点に使用されるリンクに沿った距離の割合を指定します。0から1.0までの数字として表します(たとえば、0.5は50パーセントです)。デフォルト値は1.0です(つまり、戻されたジオメトリの終了はリンクの終了点に関連付けられています)。

使用上の注意

なし。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、リンクIDが103のリンクに関連付けられたジオメトリを戻します。

SELECT SDO_NET.GET_LINK_GEOMETRY('ROADS_NETWORK', 103) FROM DUAL;

SDO_NET.GET_LINK_GEOMETRY('ROADS_NETWORK',103)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 4, 12, 4))

SDO_NET.GET_LINK_TABLE_NAME

構文

SDO_NET.GET_LINK_TABLE_NAME(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークのリンク表の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのLINK_TABLE_NAME列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークのリンク表の名前を戻します。

SELECT SDO_NET.GET_LINK_TABLE_NAME('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_LINK_TABLE_NAME('ROADS_NETWORK')
--------------------------------------------------------------------------------
ROADS_LINKS

SDO_NET.GET_LINKS_IN_PATH

構文

SDO_NET.GET_LINKS_IN_PATH(
network  IN VARCHAR2,
path_id IN NUMBER
) RETURN SDO_NUMBER_ARRAY;

説明

パスに含まれるリンクを戻します。

パラメータ

network

ネットワーク名を指定します。

path_id

リンクを戻すパスのIDを指定します。

使用上の注意

リンクおよびパスの詳細は、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、XYZ_NETWORKネットワーク内のパスに含まれる、パスIDが1のリンクのリンクID値を戻します。

SELECT SDO_NET.GET_LINKS_IN_PATH('XYZ_NETWORK', 1) FROM DUAL;

SDO_NET.GET_LINKS_IN_PATH('XYZ_NETWORK',1)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(1102, 1104, 1105)

SDO_NET.GET_LRS_GEOM_COLUMN

構文

SDO_NET.GET_LRS_GEOM_COLUMN(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

空間ネットワークのLRSジオメトリ列の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのLRS_GEOM_COLUMN列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークのLRSジオメトリ列の名前を戻します。

SELECT SDO_NET.GET_LRS_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_LRS_GEOM_COLUMN('ROADS_NETWORK')
--------------------------------------------------------------------------------
ROAD_GEOM

SDO_NET.GET_LRS_LINK_GEOMETRY

構文

SDO_NET.GET_LRS_LINK_GEOMETRY(
network  IN VARCHAR2,
link_id  IN NUMBER
) RETURN SDO_GEOMETRY;

説明

空間LRSネットワーク内のリンクに関連付けられたLRSジオメトリを戻します。

パラメータ

network

ネットワーク名を指定します。

link_id

ジオメトリを戻すリンクのID番号を指定します。

使用上の注意

なし。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、リンクIDが103のリンクに関連付けられたLRSジオメトリを戻します。

SELECT SDO_NET.GET_LRS_LINK_GEOMETRY('ROADS_NETWORK', 103) FROM DUAL;

SDO_NET.GET_LRS_LINK_GEOMETRY('ROADS_NETWORK',103)(SDO_GTYPE, SDO_SRID, SDO_POIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 4, 12, 4))

SDO_NET.GET_LRS_NODE_GEOMETRY

構文

SDO_NET.GET_LRS_NODE_GEOMETRY(
network IN VARCHAR2,
node_id IN NUMBER
) RETURN SDO_GEOMETRY;

説明

空間LRSネットワーク内のノードに関連付けられたLRSジオメトリを戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

ジオメトリを戻すノードのID番号を指定します。

使用上の注意

なし。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、ノードIDが3のノードに関連付けられたLRSジオメトリを戻します。

SELECT SDO_NET.GET_LRS_NODE_GEOMETRY('ROADS_NETWORK', 3) FROM DUAL;

SDO_NET.GET_LRS_NODE_GEOMETRY('ROADS_NETWORK',3)(SDO_GTYPE, SDO_SRID, SDO_POINT(
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8, 4, NULL), NULL, NULL)

SDO_NET.GET_LRS_TABLE_NAME

構文

SDO_NET.GET_LRS_TABLE_NAME(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

空間LRSネットワーク内のLRSジオメトリを含む表の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのLRS_TABLE_NAME列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のLRSジオメトリを含む表の名前を戻します。

SELECT SDO_NET.GET_LRS_TABLE_NAME('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_LRS_TABLE_NAME('ROADS_NETWORK')
--------------------------------------------------------------------------------
ROADS

SDO_NET.GET_NETWORK_TYPE

構文

SDO_NET.GET_NETWORK_TYPE(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワーク・タイプを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのNETWORK_TYPE列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークのネットワーク・タイプを戻します。

SELECT SDO_NET.GET_NETWORK_TYPE('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_NETWORK_TYPE('ROADS_NETWORK')
--------------------------------------------------------------------------------
Roadways

SDO_NET.GET_NO_OF_HIERARCHY_LEVELS

構文

SDO_NET.GET_NO_OF_HIERARCHY_LEVELS(
network  IN VARCHAR2
) RETURN NUMBER;

説明

ネットワークの階層レベルの数を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのNO_OF_HIERARCHY_LEVELS列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

ネットワーク階層については、「ネットワークの階層」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワークの階層レベルの数を戻します。

SELECT SDO_NET.GET_NO_OF_HIERARCHY_LEVELS('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_NO_OF_HIERARCHY_LEVELS('ROADS_NETWORK')
---------------------------------------------------
1

SDO_NET.GET_NO_OF_LINKS

構文

SDO_NET.GET_NO_OF_LINKS(
network  IN VARCHAR2
) RETURN NUMBER;

または

SDO_NET.GET_NO_OF_LINKS(
network       IN VARCHAR2,
hierarchy_id  IN NUMBER
) RETURN NUMBER;

説明

ネットワーク内のリンク数またはネットワーク内の任意の階層レベルでのリンク数を戻します。

パラメータ

network

ネットワーク名を指定します。

hierarchy_id

リンク数を戻す階層レベルの番号を指定します。

使用上の注意

なし。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のリンク数を戻します。

SELECT SDO_NET.GET_NO_OF_LINKS('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_NO_OF_LINKS('ROADS_NETWORK')
----------------------------------------
10

SDO_NET.GET_NO_OF_NODES

構文

SDO_NET.GET_NO_OF_NODES(
network  IN VARCHAR2
) RETURN NUMBER;

または

SDO_NET.GET_NO_OF_NODES(
network       IN VARCHAR2,
hierarchy_id  IN NUMBER
) RETURN NUMBER;

説明

ネットワーク内のノード数またはネットワーク内の任意の階層レベルでのノード数を戻します。

パラメータ

network

ネットワーク名を指定します。

hierarchy_id

ノード数を戻す階層レベルの番号を指定します。

使用上の注意

ノードおよび関連する概念については、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のノード数を戻します。

SELECT SDO_NET.GET_NO_OF_NODES('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_NO_OF_NODES('ROADS_NETWORK')
----------------------------------------
8

SDO_NET.GET_NODE_DEGREE

構文

SDO_NET.GET_NODE_DEGREE(
network  IN VARCHAR2,
node_id  IN NUMBER
) RETURN NUMBER;

説明

ノードへのリンク数を戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

リンク数を戻すノードのノードIDを指定します。

使用上の注意

ノードの度数および関連するネットワーク・データ・モデル・グラフの概念については、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、ノードIDが3のノードへのリンク数を戻します。

SELECT SDO_NET.GET_NODE_DEGREE('ROADS_NETWORK', 3) FROM DUAL;

SDO_NET.GET_NODE_DEGREE('ROADS_NETWORK',3)
------------------------------------------
3

SDO_NET.GET_NODE_GEOM_COLUMN

構文

SDO_NET.GET_NODE_GEOM_COLUMN(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

空間ネットワーク内のノードのジオメトリ列の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのNODE_GEOM_COLUMN列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のノードのジオメトリ列の名前を戻します。

SELECT SDO_NET.GET_NODE_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_NODE_GEOM_COLUMN('ROADS_NETWORK')
--------------------------------------------------------------------------------
NODE_GEOMETRY

SDO_NET.GET_NODE_GEOMETRY

構文

SDO_NET.GET_NODE_GEOMETRY(
network  IN VARCHAR2,
node_id  IN NUMBER
) RETURN SDO_GEOMETRY;

説明

空間ネットワーク内のノードに関連付けられたLRSジオメトリを戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

ジオメトリを戻すノードのID番号を指定します。

使用上の注意

なし。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、ノードIDが3のノードに関連付けられたジオメトリを戻します。

SELECT SDO_NET.GET_NODE_GEOMETRY('ROADS_NETWORK', 3) FROM DUAL;

SDO_NET.GET_NODE_GEOMETRY('ROADS_NETWORK',3)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8, 4, NULL), NULL, NULL)

SDO_NET.GET_NODE_IN_DEGREE

構文

SDO_NET.GET_NODE_IN_DEGREE(
network  IN VARCHAR2,
node_id  IN NUMBER
) RETURN NUMBER;

説明

ノードへのインバウンド・リンク数を戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

インバウンド・リンク数を戻すノードのノードIDを指定します。

使用上の注意

ノードの度数および関連するネットワーク・データ・モデル・グラフの概念については、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、ノードIDが3のノードへのインバウンド・リンク数を戻します。

SELECT SDO_NET.GET_NODE_IN_DEGREE('ROADS_NETWORK', 3) FROM DUAL;

SDO_NET.GET_NODE_IN_DEGREE('ROADS_NETWORK',3)
---------------------------------------------
1

SDO_NET.GET_NODE_OUT_DEGREE

構文

SDO_NET.GET_NODE_OUT_DEGREE(
network  IN VARCHAR2,
node_id  IN NUMBER
) RETURN NUMBER;

説明

ノードからのアウトバウンド・リンク数を戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

アウトバウンド・リンク数を戻すノードのノードIDを指定します。

使用上の注意

ノードの度数および関連するネットワーク・データ・モデル・グラフの概念については、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、ノードIDが3のノードからのアウトバウンド・リンク数を戻します。

SELECT SDO_NET.GET_NODE_OUT_DEGREE('ROADS_NETWORK', 3) FROM DUAL;

SDO_NET.GET_NODE_OUT_DEGREE('ROADS_NETWORK',3)
----------------------------------------------
2

SDO_NET.GET_NODE_TABLE_NAME

構文

SDO_NET.GET_NODE_TABLE_NAME(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

空間ネットワーク内のノードを含む表の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのNODE_TABLE_NAME列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のノードを含む表の名前を戻します。

SELECT SDO_NET.GET_NODE_TABLE_NAME('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_NODE_TABLE_NAME('ROADS_NETWORK')
--------------------------------------------------------------------------------
ROADS_NODES

SDO_NET.GET_OUT_LINKS

構文

SDO_NET.GET_OUT_LINKS(
network  IN VARCHAR2,
node_id  IN NUMBER
) RETURN SDO_NUMBER_ARRAY;

説明

ノードからのアウトバウンド・リンクのリンクID番号の配列を戻します。

パラメータ

network

ネットワーク名を指定します。

node_id

アウトバウンド・リンクの配列を戻すノードのIDを指定します。

使用上の注意

アウトバウンド・リンクおよび関連するネットワーク・データ・モデル・グラフの概念については、「ネットワーク・データ・モデル・グラフの概念」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、ノードIDが3のノードからのアウトバウンド・リンクのリンクID番号の配列を戻します。

SELECT SDO_NET.GET_OUT_LINKS('ROADS_NETWORK', 3) FROM DUAL;

SDO_NET.GET_OUT_LINKS('ROADS_NETWORK',3)
--------------------------------------------------------------------------------
SDO_NUMBER_ARRAY(103, 201)

SDO_NET.GET_PARENT_FEATURE_IDS

構文

SDO_NET.GET_PARENT_FEATURE_IDS(
feature_layer_id  IN NUMBER,
feature_id        IN NUMBER
) RETURN SDO_NET_LAYER_FEAT_ARRAY;

説明

指定したフィーチャのフィーチャ・レイヤーIDおよび親フィーチャIDを戻します。(SDO_NET_LAYER_FEAT_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

パラメータ

feature_layer_id

フィーチャ(子フィーチャ)のフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャのIDです。

使用上の注意

指定したフィーチャについて子フィーチャのフィーチャ・レイヤーIDおよびフィーチャIDを取得するには、SDO_NET.GET_CHILD_FEATURE_IDSファンクションを使用します。

親フィーチャおよび子フィーチャを含むフィーチャの詳細は、「フィーチャおよびフィーチャ・レイヤー」を参照してください。

例

次の例では、POIフィーチャ・レイヤー内のフィーチャ1の親フィーチャIDを戻して表示します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
feature_ids SDO_NET_LAYER_FEAT_ARRAY;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
feature_ids := sdo_net.get_parent_feature_ids(feature_layer_id, feature_id);
FOR i in 1..feature_ids.count
LOOP
--dbms_output.put_line('['||i||']'||' FEATURE_LAYER_ID   = '||feature_ids(i).feature_layer_id);
dbms_output.put_line('['||i||']'||' FEATURE_ID         = '||feature_ids(i).feature_id);
dbms_output.put_line('---');
END LOOP;
END;
/

SDO_NET.GET_PARTITION_SIZE

構文

SDO_NET.GET_PARTITION_SIZE(
network              IN VARCHAR2,
partition_id         IN VARCHAR2,
link_level           IN NUMBER DEFAULT 1,
include_user_data    IN VARCHAR2 DEFAULT 'FALSE',
include_spatial_data IN VARCHAR2 DEFAULT 'FALSE'
) RETURN NUMBER;

説明

パーティションIDとリンク・レベルの指定した組合せの推定サイズ(バイト単位)を取得します。

パラメータ

network

ネットワーク名を指定します。

partition_id

パーティションID番号を指定します。

link_level

リンク・レベル(デフォルトは1)を指定します。リンク・レベルは、リンクの優先順位であり、ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

include_user_data

各BLOBで表現されるネットワーク要素に関連付けられたユーザー・データについて、サイズに含める場合はTRUE、サイズに含めない場合はFALSE (デフォルト)を指定します。

include_spatial_data

各BLOBで表現されるネットワーク要素に関連付けられた空間ジオメトリの定義について、サイズに含める場合はTRUE、サイズに含めない場合はFALSE (デフォルト)を指定します。

使用上の注意

戻されるネットワーク・パーティションのサイズは、おおまかな推定であり、Java仮想マシンおよびガベージ・コレクションによって変動する場合があります。

ロード・オンデマンド方式を使用した分析を実行するための、パーティション化されたネットワークの使用方法については、「ロード・オンデマンドを使用したネットワーク分析」を参照してください。

例

次の例では、SDO_PARTITIONEDネットワーク内でパーティションIDが1、リンク・レベルが1にそれぞれ関連付けられたパーティションのバイト数を戻します。ユーザー・データおよび空間データは含まれません。

SELECT SDO_NET.GET_PARTITION_SIZE('SDO_PARTITIONED', 1, 1, 'N', 'N') FROM DUAL;

SDO_NET.GET_PARTITION_SIZE('SDO_PARTITIONED',1,1,'FALSE','FALSE')
---------------------------------------------------------
5192

SDO_NET.GET_PATH_GEOM_COLUMN

構文

SDO_NET.GET_PATH_GEOM_COLUMN(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

空間ネットワーク内のパスのジオメトリ列の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのPATH_GEOM_COLUMN列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のパスのジオメトリ列の名前を戻します。

SELECT SDO_NET.GET_PATH_GEOM_COLUMN('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_PATH_GEOM_COLUMN('ROADS_NETWORK')
--------------------------------------------------------------------------------
PATH_GEOMETRY

SDO_NET.GET_PATH_TABLE_NAME

構文

SDO_NET.GET_PATH_TABLE_NAME(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

空間ネットワーク内のパスを含む表の名前を戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、USER_SDO_NETWORK_METADATAビュー内の、指定されたネットワークのPATH_TABLE_NAME列の値を戻します(「xxx_SDO_NETWORK_METADATAビュー」の表5-16を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のパスを含む表の名前を戻します。

SELECT SDO_NET.GET_PATH_TABLE_NAME('ROADS_NETWORK') FROM DUAL;

SDO_NET.GET_PATH_TABLE_NAME('ROADS_NETWORK')
--------------------------------------------------------------------------------
ROADS_PATHS

SDO_NET.GET_PERCENTAGE

構文

SDO_NET.GET_PERCENTAGE(
network  IN VARCHAR2,
link_id  IN NUMBER,
pt_geom  IN SDO_GEOMETRY
) RETURN SDO_GEOMETRY;

説明

点ジオメトリの、リンクの線ストリング・ジオメトリに沿った距離の割合を戻します。

パラメータ

network

ネットワーク名を指定します。

link_id

リンクのID番号を指定します。

pt_geom

点ジオメトリを指定します。

使用上の注意

このファンクションは、0から1までの値を戻します。たとえば、点が、リンクの開始ノードと終了ノード間の距離の25パーセント(4分の1)の位置に存在する場合、このファンクションは.25を戻します。

pt_geomがリンク・ジオメトリ上にない場合は、リンク・ジオメトリ上でpt_geomに最も近い点が使用されます。

リンクの線ストリング・ジオメトリに沿った、指定された割合の距離に存在する点ジオメトリを検出するには、SDO_NET.GET_PTファンクションを使用します。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、リンクIDが101のリンクに関連付けられたジオメトリに沿った、指定された点の距離の割合(小数)を戻します。

SQL> SELECT SDO_NET.GET_PERCENTAGE('ROADS_NETWORK', 101,
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(2, 2.5, NULL), NULL, NULL))
FROM DUAL;  2    3

SDO_NET.GET_PERCENTAGE('ROADS_NETWORK',101,SDO_GEOMETRY(2001,NULL,SDO_POINT_TYPE
--------------------------------------------------------------------------------
.25

SDO_NET.GET_PHANTOM_FEATURES

構文

SDO_NET.GET_PHANTOM_FEATURES(
feature_layer_id  IN NUMBER
) RETURN SDO_NUMBER_ARRAY;

説明

フィーチャ・レイヤー内のファントム・フィーチャのIDを戻します。ファントム・フィーチャとは、存在しないネットワーク要素(ノードまたはリンク)を参照するフィーチャです。

パラメータ

feature_layer_id

フィーチャを含むフィーチャ・レイヤーのIDを指定します。

使用上の注意

フィーチャ・レイヤー内のファントム・フィーチャを削除するには、SDO_NET.DELETE_PHANTOM_FEATURESプロシージャを使用します。

例

次の例では、指定したフィーチャ・レイヤー内のファントム・フィーチャのフィーチャIDを取得して表示します。

DECLARE
feature_layer_id NUMBER;
feature_ids SDO_NUMBER_ARRAY;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
feature_ids := sdo_net.get_phantom_features(feature_layer_id);
dbms_output.put_line('Phantom Features:');
for i in 1..feature_ids.count loop
dbms_output.put_line('['||i||'] '||feature_ids(i));
end loop;
END;
/

SDO_NET.GET_PT

構文

SDO_NET.GET_PT(
network     IN VARCHAR2,
link_id     IN NUMBER,
percentage  IN NUMBER
) RETURN SDO_GEOMETRY;

説明

リンクの線ストリング・ジオメトリに沿った、指定された割合の距離に存在する点ジオメトリを戻します。

パラメータ

network

ネットワーク名を指定します。

link_id

指定されたpercentageの距離に存在する点ジオメトリを戻すリンクのID番号を指定します。

percentage

割合の値を0から1までの小数として指定します。たとえば、0.25は25パーセントです。

使用上の注意

指定した点に対するリンク・ジオメトリに沿った割合を検出するには、SDO_NET.GET_PERCENTAGEファンクションを使用します。

例

次の例では、ROADS_NETWORKという名前のネットワークに含まれる、リンクIDが101のリンクに関連付けられたジオメトリに沿った、開始ノードから25パーセントの距離に存在する点ジオメトリを戻します。

SELECT SDO_NET.GET_PT('ROADS_NETWORK', 101, 0.25) FROM DUAL;

SDO_NET.GET_PT('ROADS_NETWORK',101,0.25)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(2, 2.5, NULL), NULL, NULL)

SDO_NET.IS_HIERARCHICAL

構文

SDO_NET.IS_HIERARCHICAL(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークに複数の階層レベルが存在する場合、文字列TRUEを戻します。ネットワークに複数の階層レベルが存在しない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

ネットワーク階層については、「ネットワークの階層」を参照してください。

例

次の例では、ROADS_NETWORKという名前のネットワークに複数の階層レベルが存在するかどうかを確認します。

SELECT SDO_NET.IS_HIERARCHICAL('ROADS_NETWORK') FROM DUAL;

SDO_NET.IS_HIERARCHICAL('ROADS_NETWORK')
--------------------------------------------------------------------------------
TRUE

SDO_NET.IS_LINK_IN_PATH

構文

SDO_NET.IS_LINK_IN_PATH(
network  IN VARCHAR2,
path_id  IN NUMBER,
link_id  IN NUMBER,
) RETURN VARCHAR2;

説明

指定されたリンクが指定されたパスに含まれている場合、文字列TRUEを戻します。指定されたリンクが指定されたパスに含まれていない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

path_id

パスのID番号を指定します。

link_id

リンクのID番号を指定します。

使用上の注意

このファンクションは、特定のリンクが特定のパスに含まれているかどうかを確認するために使用します。

例

次の例では、リンクIDが1のリンクが、SDO_NET1という名前のネットワーク内でパスIDが1のパスに含まれているかどうかを確認します。

SELECT SDO_NET.IS_LINK_IN_PATH('SDO_NET1', 1, 1) FROM DUAL;

SDO_NET.IS_LINK_IN_PATH('SDO_NET1',1,1)
--------------------------------------------------------------------------------
TRUE

SDO_NET.IS_LOGICAL

構文

SDO_NET.IS_LOGICAL(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークが論理ネットワークである場合、文字列TRUEを戻します。ネットワークが論理ネットワークではない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

ネットワークは、空間ネットワークまたは論理ネットワークのいずれかになります(「ネットワーク・データ・モデル・グラフの概念」を参照)。

例

次の例では、ROADS_NETWORKという名前のネットワークが論理ネットワークであるかどうかを確認します。

SELECT SDO_NET.IS_LOGICAL('ROADS_NETWORK') FROM DUAL;

SDO_NET.IS_LOGICAL('ROADS_NETWORK')
--------------------------------------------------------------------------------
FALSE

SDO_NET.IS_NODE_IN_PATH

構文

SDO_NET.IS_NODE_IN_PATH(
network  IN VARCHAR2,
path_id  IN NUMBER,
node_id  IN NUMBER,
) RETURN VARCHAR2;

説明

指定されたノードが指定されたパスに含まれている場合、文字列TRUEを戻します。指定されたノードが指定されたパスに含まれていない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

path_id

パスのID番号を指定します。

node_id

ノードのID番号を指定します。

使用上の注意

このファンクションは、特定のノードが特定のパスに含まれているかどうかを確認するために使用します。

例

次の例では、ノードIDが1のノードが、SDO_NET1という名前のネットワーク内でパスIDが1のパスに含まれているかどうかを確認します。

SELECT SDO_NET.IS_NODE_IN_PATH('SDO_NET1', 1, 1) FROM DUAL;

SDO_NET.IS_NODE_IN_PATH('SDO_NET1',1,1)
--------------------------------------------------------------------------------
TRUE

SDO_NET.IS_SPATIAL

構文

SDO_NET.IS_SPATIAL(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークが空間ネットワークである場合、文字列TRUEを戻します。ネットワークが空間ネットワークではない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

ネットワークは、空間ネットワークまたは論理ネットワークのいずれかになります(「ネットワーク・データ・モデル・グラフの概念」を参照)。

空間ネットワークの場合は、さらにSDO_NET.LRS_GEOMETRY_NETWORK、SDO_NET.SDO_GEOMETRY_NETWORKおよびSDO_NET.TOPO_GEOMETRY_NETWORKファンクションを使用して、そのジオメトリ・タイプを確認できます。

例

次の例では、ROADS_NETWORKという名前のネットワークが空間ネットワークであるかどうかを確認します。

SELECT SDO_NET.IS_SPATIAL('ROADS_NETWORK') FROM DUAL;

SDO_NET.IS_SPATIAL('ROADS_NETWORK')
--------------------------------------------------------------------------------
TRUE

SDO_NET.LOAD_CONFIG

構文

SDO_NET.LOAD_CONFIG(
file_directory  IN VARCHAR2,
file_name       IN VARCHAR2);

説明

ロード・オンデマンドのJavaストアド・プロシージャの構成を、指定したXMLファイルからロードまたはリロードします。ロード・オンデマンド構成は、主にパーティションBLOBの変換およびパーティション・キャッシュの構成に使用されます。(Javaストアド・プロシージャは、パッケージoracle.spatial.network.lodのクラスです。)

パラメータ

file_directory

XMLファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

file_name

ロードする情報を含むXMLファイルの名前を指定します。

使用上の注意

デフォルトでは、ロード・オンデマンド用に構成されています。このプロシージャは、デフォルトの構成を変更する必要がある場合に使用します。

パーティション・キャッシュを含むロード・オンデマンド環境の構成については、「パーティション・キャッシュの構成」を参照してください。

例

次の例では、指定したXMLファイルからロード・オンデマンド構成をロードします。

EXECUTE SDO_NET.LOAD_CONFIG('WORK_DIR', 'netlodcfg.xml');

SDO_NET.LOGICAL_PARTITION

構文

SDO_NET.LOGICAL_PARTITION(
network              IN VARCHAR2,
partition_table_name IN VARCHAR2,
max_num_nodes        IN NUMBER,
log_loc              IN VARCHAR2,
log_file             IN VARCHAR2,
open_mode            IN VARCHAR2 DEFAULT 'A',
link_level           IN NUMBER DEFAULT 1);

または

SDO_NET.LOGICAL_PARTITION(
network              IN VARCHAR2,
partition_table_name IN VARCHAR2,
max_num_nodes        IN NUMBER,
log_loc              IN VARCHAR2,
log_file             IN VARCHAR2,
open_mode            IN VARCHAR2 DEFAULT 'A',
link_level           IN NUMBER DEFAULT 1,
part_size_tolerance  IN NUMBER);

説明

論理ネットワークをパーティション化し、情報をパーティション表に格納します。

注意:

論理ネットワークがべき乗則(スケールフリー)ネットワークである場合は、このプロシージャを使用してネットワークをパーティション化せずに、かわりにSDO_NET.LOGICAL_POWERLAW_PARTITIONプロシージャを使用します。

パラメータ

network

ネットワーク名を指定します。

partition_table_name

このプロシージャで作成されるパーティション表の名前を指定します。(指定した名前の表がすでに存在する場合は、指定したリンク・レベルのパーティション情報で更新されます。)パーティション表については、「パーティション表」を参照してください。

max_num_nodes

各パーティションに含まれるノードの最大数を指定します。たとえば、5000を指定した場合にネットワークに50,000個のノードが含まれていると、各パーティションには5000以下のノードが含まれることになり、パーティションの合計数は10以上になります。

log_loc

ログ・ファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

log_file

発生する可能性があるエラーや問題など、論理ネットワークでの操作に関する情報を格納するログ・ファイルを指定します。

open_mode

ログ・ファイルを開く際のモードを示す1文字のコードを指定します。Wは上書き(指定した場所および名前の既存のログ・ファイルをすべて削除し、新規ファイルを作成)、A (デフォルト)は追加(指定した既存のログ・ファイルに情報を追加)を表します。Aを指定し、そのログ・ファイルが存在しない場合は、新規ログ・ファイルが作成されます。

link_level

パーティション化を実行するネットワーク・リンク・レベル(デフォルトは1)を指定します。リンク・レベルは、リンクの優先順位であり、ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

part_size_tolerance

パーティション・サイズの許可された許容差(max_num_nodesの小数として表される)を指定します。0から1の範囲である必要があります。このパラメータを使用すると、パーティション化を行うプロシージャで、max_num_nodesにより指定されたサイズより大きなサイズのパーティションを作成できますので、相互接続性の低いパーティションを柔軟に生成することが可能です。たとえば、max_num_nodesが5000で、part_size_toleranceが0.1である場合、パーティションには最大5500個(0.1*5000は500であるため、5000 + 500で算出)のノードを含めることができます。

使用上の注意

part_size_toleranceパラメータを使用すると、エッジカットを小さく維持しながらパーティション間の相互接続性を減らすことに重点を置いて、論理ネットワークをパーティション化できます。

このプロシージャを使用してパーティションを作成した後、特に大規模なネットワークの場合は、多くのネットワーク分析操作のパフォーマンスを向上させるためにSDO_NET.GENERATE_PARTITION_BLOBSプロシージャの使用を検討してください。

例

次の例では、MY_LOGICAL_NETネットワーク内にリンク・レベル1のパーティションを作成して、MY_LOGICAL_PART_TAB表を作成します。各パーティションに配置するノードの最大数は5000です。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるmy_logical_part.logファイルに追加されます(open_mode => 'a')。

EXECUTE SDO_NET.LOGICAL_PARTITION(network => 'MY_LOGICAL_NET', -
partition_table_name => 'my_logical_part_tab',-
max_num_nodes => 5000,-
log_loc => 'LOG_DIR', log_file=> 'my_logical_part.log',-
link_level => 1, open_mode => 'a');

次の例では、MY_LOGICAL_NETネットワーク内にリンク・レベル1のパーティションを作成して、MY_LOGICAL_PART_TAB表を作成します。max_num_nodesの値とpart_size_toleranceの値の組合せ(5000 + 0.1*5000 = 5500)になるので、各パーティションに配置されるノードの最大数は5500です。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるmy_logical_part.logファイルに書き込まれ(open_mode => 'w')、その場所にこの名前を持つ既存のファイルがある場合には置換します。

EXECUTE SDO_NET.LOGICAL_PARTITION(network => 'MY_LOGICAL_NET', -
partition_table_name => 'my_logical_part_tab',-
max_num_nodes => 5000,-
log_loc => 'LOG_DIR', log_file=> 'my_logical_part.log',-
link_level => 1, open_mode => 'w',
part_size_tolerance => 0.1);

SDO_NET.LOGICAL_POWERLAW_PARTITION

構文

SDO_NET.LOGICAL_POWERLAW_PARTITION(
network              IN VARCHAR2,
partition_table_name IN VARCHAR2,
max_num_nodes        IN NUMBER,
log_loc              IN VARCHAR2,
log_file             IN VARCHAR2,
open_mode            IN VARCHAR2 DEFAULT 'A',
link_level           IN NUMBER DEFAULT 1,
part_size_tolerance  IN NUMBER DEFAULT 0);

説明

べき乗則(スケールフリーとも呼ばれる)の論理ネットワークをパーティション化し、情報をパーティション表に格納します。(べき乗則ネットワークでは、ノードの度数の値に、べき乗則情報が含まれます。)

パラメータ

network

ネットワーク名を指定します。

partition_table_name

このプロシージャで作成されるパーティション表の名前を指定します。(指定した名前の表がすでに存在する場合は、指定したリンク・レベルのパーティション情報で更新されます。)パーティション表については、「パーティション表」を参照してください。

max_num_nodes

各パーティションに含まれるノードの最大数を指定します。たとえば、5000を指定した場合にネットワークに50,000個のノードが含まれていると、各パーティションには5000以下のノードが含まれることになり、パーティションの合計数は10以上になります。

part_size_tolerance値が0より大きい場合は、各パーティションに含まれるノードの最大数が増えます(このパラメータの説明を参照)。

log_loc

ログ・ファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

log_file

発生する可能性があるエラーや問題など、べき乗則の論理ネットワークでの操作に関する情報を格納するログ・ファイルを指定します。

open_mode

ログ・ファイルを開く際のモードを示す1文字のコードを指定します。Wは上書き(指定した場所および名前の既存のログ・ファイルをすべて削除し、新規ファイルを作成)、A (デフォルト)は追加(指定した既存のログ・ファイルに情報を追加)を表します。Aを指定し、そのログ・ファイルが存在しない場合は、新規ログ・ファイルが作成されます。

link_level

パーティション化を実行するネットワーク・リンク・レベル(デフォルトは1)を指定します。リンク・レベルは、リンクの優先順位であり、ネットワーク分析に使用すると、パスの計算時に優先順位の高いリンクが最初に考慮されます。

part_size_tolerance

パーティション・サイズの許可された許容差(max_num_nodesの割合として表される)を指定します。0 (デフォルト)から100の範囲である必要があります。

part_size_tolerance値が0より大きい場合は、事実上、max_num_nodes値が高くなります。たとえば、max_num_nodesが5000で、part_size_toleranceを10として指定した場合、各パーティションに含まれるノードの実際の最大数は5500(5000の10パーセントは500であるため、5000 + 500で算出)です。part_size_toleranceを使用するかどうかの決定および指定する値の決定を行う場合は、キャッシュ・サイズと、関連するノードが異なるパーティションに配置される確率を考慮してください。

使用上の注意

このプロシージャを使用してパーティションを作成した後、特に大規模なネットワークの場合は、多くのネットワーク分析操作のパフォーマンスを向上させるためにSDO_NET.GENERATE_PARTITION_BLOBSプロシージャの使用を検討してください。

論理ネットワークがべき乗則ネットワークではない場合は、このプロシージャを使用せずに、かわりにSDO_NET.LOGICAL_PARTITIONプロシージャを使用します。

例

次の例では、MY_LOGICAL_PLAW_NETネットワーク内にリンク・レベル1のパーティションを作成して、MY_LOGICAL_PLAW_PART_TAB表を作成します。各パーティションに配置するノードの最大数は5000です。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるmy_logical_plaw_part.logファイルに追加されます(open_mode => 'a')。

EXECUTE SDO_NET.LOGICAL_POWERLAW_PARTITION(network => 'MY_LOGICAL_PLAW_NET', -
partition_table_name => 'my_logical_plaw_part_tab',-
max_num_nodes => 5000,-
log_loc => 'LOG_DIR', log_file=> 'my_logical_plaw_part.log',-
link_level => 1, open_mode => 'a');

SDO_NET.LRS_GEOMETRY_NETWORK

構文

SDO_NET.LRS_GEOMETRY_NETWORK(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークがLRSジオメトリを含む空間ネットワークである場合、文字列TRUEを戻します。ネットワークがLRSジオメトリを含む空間ネットワークではない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

USER_SDO_NETWORK_METADATAビュー内で、ネットワークのエントリのGEOMETRY_TYPE列に値LRS_GEOMETRYが含まれる場合、そのネットワークにはLRSジオメトリが含まれます。(USER_SDO_NETWORK_METADATAビューについては、「xxx_SDO_NETWORK_METADATAビュー」を参照してください。)

例

次の例では、ROADS_NETWORKという名前のネットワークが、LRSジオメトリを含む空間ネットワークであるかどうかを確認します。

SELECT SDO_NET.LRS_GEOMETRY_NETWORK('ROADS_NETWORK') FROM DUAL;

SDO_NET.LRS_GEOMETRY_NETWORK('ROADS_NETWORK')
--------------------------------------------------------------------------------
TRUE

SDO_NET.NETWORK_EXISTS

構文

SDO_NET.NETWORK_EXISTS(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークが存在する場合、文字列TRUEを戻します。ネットワークが存在しない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

(SDO_NET.DROP_NETWORKプロシージャを使用して)ネットワークを削除すると、そのネットワークは存在しなくなります。

例

次の例では、ROADS_NETWORKという名前のネットワークが存在するかどうかを確認します。

SELECT SDO_NET.NETWORK_EXISTS('ROADS_NETWORK') FROM DUAL;

SDO_NET.NETWORK_EXISTS('ROADS_NETWORK')
--------------------------------------------------------------------------------
TRUE

SDO_NET.POST_XML

構文

SDO_NET.POST_XML(
url      IN VARCHAR2,
request  IN XMLTYPE
) RETURN XMLTYPE;

説明

XMLリクエストをURLに送信し、XMLレスポンスを戻します。

パラメータ

url

リクエストを受信するURL (Uniform Resource Locator)を指定します。

request

XML形式のリクエストを指定します。

使用上の注意

ネットワーク・データ・モデル・グラフへのXML APIの詳細は、「ネットワーク・データ・モデル・グラフのXMLインタフェース」を参照してください。

例

次の例では、XMLリクエストを指定してURLに送信し、XMLレスポンスを戻して表示します。

DECLARE
xml_request varchar2(4000);
ndmws_url varchar2(4000);
xml_response xmltype;
BEGIN
xml_request :=
'<?xml version="1.0" ?>
<networkAnalysisRequest
xmlns="http://xmlns.oracle.com/spatial/network"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml">
<networkName>HILLSBOROUGH_NETWORK2</networkName>
<shortestPath>
<startPoint>
<nodeID>1533</nodeID>
</startPoint>
<endPoint>
<nodeID>10043</nodeID>
</endPoint>
<subPathRequestParameter>
<cost> true </cost>
<isFullPath> true </isFullPath>
<startLinkIndex> true </startLinkIndex>
<startPercentage> true </startPercentage>
<endLinkIndex> true </endLinkIndex>
<endPercentage> true </endPercentage>
<pathRequestParameter>
<cost> true </cost>
<isSimple> true </isSimple>
<startNodeID>true</startNodeID>
<endNodeID>true</endNodeID>
<noOfLinks>true</noOfLinks>
<linksRequestParameter>
<onlyLinkID>true</onlyLinkID>
</linksRequestParameter>
<nodesRequestParameter>
<onlyNodeID>true</onlyNodeID>
</nodesRequestParameter>
</pathRequestParameter>
</subPathRequestParameter>
</shortestPath>
</networkAnalysisRequest>';
ndmws_url := 'http://localhost:7001/SpatialWS-SpatialWS-context-root/SpatialWSXmlServlet';
xml_response := sdo_net.POST_XML(ndmws_url, XMLTYPE(xml_request));
dbms_output.put_line(xml_response.getStringVal());
END;
/

SDO_NET.REGISTER_CONSTRAINT

構文

SDO_NET.REGISTER_CONSTRAINT(
constraint_name IN VARCHAR2,
class_name      IN VARCHAR2,
directory_name  IN VARCHAR2,
description     IN VARCHAR2);

説明

指定したネットワーク制約用にコンパイルしたJavaコードをデータベース内のJavaクラス・リポジトリにロードし、クラス名をUSER_SDO_NETWORK_CONSTRAINTSビュー(「xxx_SDO_NETWORK_CONSTRAINTSビュー」を参照)のCLASS列にロードします。

パラメータ

constraint_name

ネットワーク制約の名前を指定します。

class_name

ネットワーク制約を実装するクラスの完全修飾名(パッケージの名前を含む)を指定します。

directory_name

ネットワーク制約をコンパイルしたときに作成されたクラス・ファイルの場所を特定する、ディレクトリ・オブジェクト(SQL文のCREATE DIRECTORYで作成)の名前を指定します。

description

ネットワーク制約の説明を記述します。

使用上の注意

このプロシージャをコールする前に、USER_SDO_NETWORK_CONSTRAINTSビューに行を挿入し、ネットワーク制約を実装するJavaクラスのコードをコンパイルし、コンパイルされたクラスの場所を特定するディレクトリ・オブジェクトをCREATE DIRECTORY文を使用して作成する必要があります。ネットワーク制約の詳細は、「ネットワーク制約」を参照してください。

USER_SDO_NETWORK_CONSTRAINTSビューから制約の行を削除して、その制約を無効にするには、SDO_NET.DEREGISTER_CONSTRAINTプロシージャを使用します。

例

次の例では、GivenProhibitedTurnという名前のネットワーク制約を登録します。

-- Set up the network constraint.
REM
REM Create the geor_dir on the file system first.
REM
-- Connect as SYSTEM.
DECLARE
-- This is the directory that contains the CLASS file generated when you
-- compiled the network constraint.
geor_dir varchar2(1000) := 'C:\my_data\files81\PROTOTYPES\NETWORK_CONSTRAINT\PLSQL_EXAMPLE';
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY work_dir AS''' || geor_dir || '''';
END;
/
GRANT read,write on directory work_dir to net_con;

-- Connect as the user that will register the constraint.

REM
REM Compile GivenProhibitedTurn before you register the constraint.
REM
BEGIN
SDO_NET.REGISTER_CONSTRAINT('GivenProhibitedTurn',
'com/network/constraints/ProhibitedTurn',
'WORK_DIR', 'This is a network constraint that '||
'prohibits certain turns');

END;
/

SDO_NET.SDO_GEOMETRY_NETWORK

構文

SDO_NET.SDO_GEOMETRY_NETWORK(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークがSDOジオメトリ(メジャー情報を持たない空間ジオメトリ)を含む空間ネットワークである場合、文字列TRUEを戻します。ネットワークがSDOジオメトリを含む空間ネットワークではない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

USER_SDO_NETWORK_METADATAビュー内で、ネットワークのエントリのGEOMETRY_TYPE列に値SDO_GEOMETRYが含まれる場合、そのネットワークにはSDOジオメトリが含まれます。(USER_SDO_NETWORK_METADATAビューについては、「xxx_SDO_NETWORK_METADATAビュー」を参照してください。)

例

次の例では、ROADS_NETWORKという名前のネットワークが、SDOジオメトリを含む空間ネットワークであるかどうかを確認します。

SELECT SDO_NET.SDO_GEOMETRY_NETWORK('ROADS_NETWORK') FROM DUAL;

SDO_NET.SDO_GEOMETRY_NETWORK('ROADS_NETWORK')
--------------------------------------------------------------------------------
FALSE

SDO_NET.SET_LOGGING_LEVEL

構文

SDO_NET.SET_LOGGING_LEVEL(
level  IN NUMBER);

説明

ネットワーク操作に対して表示されるメッセージについて、重大度の最低レベルを設定します。

パラメータ

level

ネットワーク操作に対して表示されるメッセージについて、重大度の最低レベルを指定します。「使用上の注意」に示されている数値制約のいずれか1つを指定してください。

使用上の注意

指定されたロギング・レベル以上のすべてのメッセージが書き込まれます。ロギング・レベルの最高レベルから最低レベルまでを次に示します。

SDO_NET.LOGGING_LEVEL_FATAL
SDO_NET.LOGGING_LEVEL_ERROR
SDO_NET.LOGGING_LEVEL_WARN
SDO_NET.LOGGING_LEVEL_INFO
SDO_NET.LOGGING_LEVEL_DEBUG
SDO_NET.LOGGING_LEVEL_FINEST

ロギング・レベルは、このファンクションの基礎となる実装からのJavaロギング・レベルです。したがって、コンソール上でJavaロギングの出力を確認するには、あらかじめ次の文を実行しておく必要があります。

SET SERVEROUTPUT ON;
EXECUTE DBMS_JAVA.SET_OUTPUT(10000);

例

次の例では、ロギング・レベルをSDO_NET.LOGGING_LEVEL_ERRORに設定します。これにより、重大度のレベルがSDO_NET.LOGGING_LEVEL_ERRORまたはSDO_NET.LOGGING_LEVEL_FATALのメッセージのみが表示されます。

EXECUTE SDO_NET.SET_LOGGING_LEVEL(SDO_NET.LOGGING_LEVEL_ERROR);

SDO_NET.SET_MAX_JAVA_HEAP_SIZE

構文

SDO_NET.SET_MAX_JAVA_HEAP_SIZE(
bytes  IN NUMBER);

説明

Oracle Java仮想マシンで実行するアプリケーション用の最大Javaヒープ・サイズを設定します。

パラメータ

バイト

最大Javaヒープ・サイズのバイト数を指定します。

使用上の注意

java.lang.OutOfMemoryError例外が発生した場合は、このプロシージャを使用して、最大ヒープ・サイズを増やすことができます。

システムの上限より大きな値を指定すると、システムの上限値が使用されます。

例

次の例では、最大Javaヒープ・サイズを536870912(512MB)に設定します。

EXECUTE SDO_NET.SET_MAX_JAVA_HEAP_SIZE(536870912);

SDO_NET.SPATIAL_PARTITION

構文

SDO_NET.SPATIAL_PARTITION(
network              IN VARCHAR2,
partition_table_name IN VARCHAR2,
max_num_nodes        IN NUMBER,
log_loc              IN VARCHAR2,
log_file             IN VARCHAR2,
open_mode            IN VARCHAR2 DEFAULT 'A',
link_level           IN NUMBER DEFAULT 1);

説明

空間ネットワークをパーティション化し、情報をパーティション表に格納します。

パラメータ

network

ネットワーク名を指定します。

partition_table_name

このプロシージャで作成されるパーティション表の名前を指定します。(指定した名前の表がすでに存在する場合は、指定したリンク・レベルのパーティション情報で更新されます。)パーティション表については、「パーティション表」を参照してください。

max_num_nodes

各パーティションに含まれるノードの最大数を指定します。たとえば、5000を指定した場合にネットワークに50,000個のノードが含まれていると、各パーティションには5000以下のノードが含まれることになり、パーティションの合計数は10以上になります。

log_loc

ログ・ファイルのパスを特定するディレクトリ・オブジェクトを指定します。ディレクトリ・オブジェクトを作成するには、SQL*PlusコマンドのCREATE DIRECTORYを使用します。

log_file

発生する可能性があるエラーや問題など、空間ネットワーク操作に関する情報を格納するログ・ファイルを指定します。

open_mode

ログ・ファイルを開く際のモードを示す1文字のコードを指定します。Wは上書き(指定した場所および名前の既存のログ・ファイルをすべて削除し、新規ファイルを作成)、A (デフォルト)は追加(指定した既存のログ・ファイルに情報を追加)を表します。Aを指定し、そのログ・ファイルが存在しない場合は、新規ログ・ファイルが作成されます。

link_level

パーティション化を実行するネットワーク・リンク・レベル(デフォルトは1)を指定します。リンク・レベルは、リンクの優先順位であり、ネットワーク分析に使用すると、ネットワークの計算時に優先順位の高いリンクが最初に考慮されます。

使用上の注意

このプロシージャを使用してパーティションを作成した後、特に大規模なネットワークの場合は、多くのネットワーク分析操作のパフォーマンスを向上させるためにSDO_NET.GENERATE_PARTITION_BLOBSプロシージャの使用を検討してください。

例

次の例では、MY_PARTITIONED_NETネットワーク内にリンク・レベル1のパーティションを作成して、MY_PARTITIONED_NET_TAB表を作成します。各パーティションに配置するノードの最大数は5000です。操作に関する情報は、LOG_DIRという名前のディレクトリ・オブジェクトに関連付けられた場所にあるmy_partitioned_net.logファイルに追加されます(open_mode => 'a')。

EXECUTE SDO_NET.SPATIAL_PARTITION(network => 'MY_PARTITIONED_NET', -
partition_table_name => 'my_partitioned_net_tab',-
max_num_nodes => 5000,-
log_loc => 'LOG_DIR', log_file=> 'my_partitioned_net.log',-
link_level => 1, open_mode => 'a');

SDO_NET.TOPO_GEOMETRY_NETWORK

構文

SDO_NET.TOPO_GEOMETRY_NETWORK(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークがSDO_TOPO_GEOMETRY(トポロジ・ジオメトリ)オブジェクトを含む空間ネットワークである場合、文字列TRUEを戻します。ネットワークがSDO_TOPO_GEOMETRYオブジェクトを含む空間ネットワークではない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

USER_SDO_NETWORK_METADATAビュー内で、ネットワークのエントリのGEOMETRY_TYPE列に値TOPO_GEOMETRYが含まれる場合、そのネットワークにはSDO_TOPO_GEOMETRYオブジェクトが含まれます。(USER_SDO_NETWORK_METADATAビューについては、「xxx_SDO_NETWORK_METADATAビュー」を参照してください。)

例

次の例では、ROADS_NETWORKという名前のネットワークが、SDO_TOPO_GEOMETRYオブジェクトを含む空間ネットワークであるかどうかを確認します。

SELECT SDO_NET.TOPO_GEOMETRY_NETWORK('ROADS_NETWORK') FROM DUAL;

SDO_NET.TOPO_GEOMETRY_NETWORK('ROADS_NETWORK')
--------------------------------------------------------------------------------
FALSE

SDO_NET.UPDATE_FEATURE

構文

SDO_NET.UPDATE_FEATURE(
feature_layer_id   IN NUMBER,
feature_id         IN NUMBER,
feature_elements   IN SDO_NET_FEAT_ELEM_ARRAY DEFAULT NULL,
child_feature_ids  IN SDO_NET_LAYER_FEAT_ARRAY DEFAULT NULL,
check_integrity    IN BOOLEAN DEFAULT TRUE);

説明

フィーチャ・レイヤー内のフィーチャを更新します。

パラメータ

feature_layer_id

フィーチャを更新するフィーチャ・レイヤーのIDを指定します。

feature_id

更新されるフィーチャのIDを指定します。

feature_elements

既存のフィーチャ要素に追加する、フィーチャのフィーチャ要素を指定します。このパラメータがNULLの場合、既存のフィーチャ要素は変更されません。このパラメータが空の場合、既存のフィーチャ要素は削除されます。(SDO_NET_FEAT_ELEM_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

child_feature_ids

既存の子フィーチャに追加する、フィーチャの子フィーチャを指定します。このパラメータがNULLの場合、既存の子フィーチャは変更されません。このパラメータが空の場合、子フィーチャとの、このフィーチャの既存の親関係は削除されます。(SDO_NET_LAYER_FEAT_ARRAY型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

check_integrity

TRUE (デフォルト)を指定すると、入力ネットワーク要素が存在するかどうかを確認し、存在しない場合はエラーが生成されます。FALSEを指定すると、入力ネットワーク要素が存在するかどうかを確認しません。

使用上の注意

フィーチャをフィーチャ・レイヤーに追加するには、SDO_NET.ADD_FEATUREプロシージャを使用します。

フィーチャ・レイヤーIDは、フィーチャ・レイヤーに対して自動的に生成されます。

例

次の例では、2つのフィーチャ要素を定義して追加することによって、指定したフィーチャを更新します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
elements SDO_NET_FEAT_ELEM_ARRAY := SDO_NET_FEAT_ELEM_ARRAY();
link_id NUMBER := 1314;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
elements.extend;
elements(1) := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.7, null);
elements.extend;
elements(2) := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.8, null);
sdo_net.update_feature(feature_layer_id, feature_id, elements, null);
END;
/

SDO_NET.UPDATE_FEATURE_ELEMENT

構文

SDO_NET.UPDATE_FEATURE_ELEMENT(
feature_layer_id IN NUMBER,
feature_id       IN NUMBER,
sequence_number  IN NUMBER,
feature_element  IN SDO_NET_FEAT_ELEM,
check_integrity  IN BOOLEAN DEFAULT TRUE);

説明

フィーチャ要素を更新します。

パラメータ

feature_layer_id

フィーチャのフィーチャ・レイヤーのIDを指定します。

feature_id

フィーチャのIDです。

sequence_number

更新されるフィーチャ要素の順序番号を指定します。

feature_element

指定したフィーチャ要素を置換するフィーチャ要素の定義を指定します。(SDO_NET_FEAT_ELEM型の詳細は、「フィーチャ・モデリングに使用するデータ型」を参照してください。)

check_integrity

TRUE (デフォルト)を指定すると、入力ネットワーク要素が存在するかどうかを確認し、存在しない場合はエラーが生成されます。FALSEを指定すると、入力ネットワーク要素が存在するかどうかを確認しません。

使用上の注意

フィーチャ要素を追加するには、SDO_NET.ADD_FEATURE_ELEMENTプロシージャを使用し、1回の操作で複数のフィーチャ要素を追加するには、SDO_NET.ADD_FEATURE_ELEMENTSプロシージャを使用します。

例

次の例では、フィーチャID 1のリンクID 1314上にある順序番号2のフィーチャ要素を更新します。

DECLARE
feature_layer_id NUMBER;
feature_id NUMBER := 1;
element SDO_NET_FEAT_ELEM;
link_id NUMBER := 1314;
BEGIN
feature_layer_id := sdo_net.get_feature_layer_id('GRID', 'POI');
element := SDO_NET_FEAT_ELEM(SDO_NET.FEAT_ELEM_TYPE_POL, link_id, 0.2, null);
sdo_net.update_feature_element(feature_layer_id, feature_id, 1, element);
END;
/

SDO_NET.VALIDATE_LINK_SCHEMA

構文

SDO_NET.VALIDATE_LINK_SCHEMA(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワーク内のリンクに関連するメタデータが有効な場合、文字列TRUEを戻します。ネットワーク内のリンクに関連するメタデータが有効でない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、空間ネットワークの表名、ジオメトリ列およびコスト列、LRSネットワークのメジャー関連の情報、トポロジ・ネットワークのトポロジ関連の情報、および階層ネットワークの階層関連の情報が有効かどうかを確認します。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のリンクに関連するメタデータが有効かどうかを確認します。

SELECT SDO_NET.VALIDATE_LINK_SCHEMA('ROADS_NETWORK') FROM DUAL;

SDO_NET.VALIDATE_LINK_SCHEMA('ROADS_NETWORK')
--------------------------------------------------------------------------------
TRUE

SDO_NET.VALIDATE_LRS_SCHEMA

構文

SDO_NET.VALIDATE_LRS_SCHEMA(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワークのLRS情報に関連するメタデータが有効な場合、文字列TRUEを戻します。ネットワークのLRS情報に関連するメタデータが有効でない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

なし。

例

次の例では、ROADS_NETWORKという名前のネットワークのLRS情報に関連するメタデータが有効かどうかを確認します。

SELECT SDO_NET.VALIDATE_LRS_SCHEMA('ROADS_NETWORK') FROM DUAL;

SDO_NET.VALIDATE_LRS_SCHEMA('ROADS_NETWORK')
--------------------------------------------------------------------------------
TRUE

SDO_NET.VALIDATE_NETWORK

構文

SDO_NET.VALIDATE_NETWORK(
network     IN VARCHAR2,
check_data  IN VARCHAR2 DEFAULT 'FALSE'
) RETURN VARCHAR2;

説明

ネットワークが有効な場合、文字列TRUEを戻します。ネットワークが有効でない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

check_data

TRUEを指定すると、ネットワーク・データの参照整合性について詳細な確認が行われます。FALSE(デフォルト)を指定すると、ネットワーク・データの参照整合性について、詳細な確認ではなく基本的な確認が行われます。

使用上の注意

このファンクションは、ネットワークのメタデータおよび適用されるネットワーク・スキーマ構造(リンク、ノード、パス、サブパス、LRS)を確認します。ネットワーク・データについて基本的な参照整合性の確認を行い、オプションで詳細な確認を行います。エラーが検出されると、このファンクションは文字列FALSEを戻します。

このファンクションでは、次の項目が確認されます。

- ネットワークが存在します。

- ネットワークのノード表およびリンク表が存在し、それらの表が必要な列を含んでいる。

- ノード表に各リンクの開始ノードおよび終了ノードが存在する。

- LRSジオメトリ・ネットワークの場合、LRS表が存在し、必要な列を含んでいる。

- 空間ネットワークの場合、ノードおよびパスのジオメトリの列が存在し、それらの列に空間索引が定義されている。

- check_dataがTRUEの場合、ネットワーク・データについて詳細な参照整合性の確認が行われます。特にネットワークが大規模な場合は、この確認に時間がかかります。

例

次の例では、LOG_NET1という名前のネットワークを検証します。

SELECT SDO_NET.VALIDATE_NETWORK('LOG_NET1') FROM DUAL;

SDO_NET.VALIDATE_NETWORK('LOG_NET1')
--------------------------------------------------------------------------------
TRUE

SDO_NET.VALIDATE_NODE_SCHEMA

構文

SDO_NET.VALIDATE_NODE_SCHEMA(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワーク内のノードに関連するメタデータが有効な場合、文字列TRUEを戻します。ネットワーク内のノードに関連するメタデータが有効でない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、空間ネットワークの表名、ジオメトリ列およびコスト列、LRSネットワークのメジャー関連の情報、トポロジ・ネットワークのトポロジ関連の情報、および階層ネットワークの階層関連の情報が有効かどうかを確認します。

例

次の例では、LOG_NET1という名前のネットワーク内のノードに関連するメタデータが有効かどうかを確認します。

SELECT SDO_NET.VALIDATE_NODE_SCHEMA('LOG_NET1') FROM DUAL;

SDO_NET.VALIDATE_NODE_SCHEMA('LOG_NET1')
--------------------------------------------------------------------------------
TRUE

SDO_NET.VALIDATE_PARTITION_SCHEMA

構文

SDO_NET.VALIDATE_PARTITION_SCHEMA(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワーク内のパーティションに関連するメタデータが有効な場合、文字列TRUEを戻します。ネットワーク内のパーティションに関連するメタデータが有効でない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

パーティション表の情報が有効かどうかを確認します(「パーティション表」を参照)。

例

次の例では、SDO_PARTITIONEDという名前のネットワーク内のパーティションに関連するメタデータが有効かどうかを確認します。

SELECT SDO_NET.VALIDATE_PARTITION_SCHEMA('SDO_PARTITIONED') FROM DUAL;

SDO_NET.VALIDATE_PARTITION_SCHEMA('SDO_PARTITIONED')
--------------------------------------------------------------------------------
TRUE

SDO_NET.VALIDATE_PATH_SCHEMA

構文

SDO_NET.VALIDATE_PATH_SCHEMA(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワーク内のパスに関連するメタデータが有効な場合、文字列TRUEを戻します。ネットワーク内のパスに関連するメタデータが有効でない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

このファンクションは、空間ネットワークの表名、ジオメトリ列およびコスト列、LRSネットワークのメジャー関連の情報、トポロジ・ネットワークのトポロジ関連の情報、および階層ネットワークの階層関連の情報が有効かどうかを確認します。

例

次の例では、ROADS_NETWORKという名前のネットワーク内のパスに関連するメタデータが有効かどうかを確認します。

SELECT SDO_NET.VALIDATE_PATH_SCHEMA('ROADS_NETWORK') FROM DUAL;

SDO_NET.VALIDATE_PATH_SCHEMA('ROADS_NETWORK')
--------------------------------------------------------------------------------
TRUE

SDO_NET.VALIDATE_SUBPATH_SCHEMA

構文

SDO_NET.VALIDATE_SUBPATH_SCHEMA(
network  IN VARCHAR2
) RETURN VARCHAR2;

説明

ネットワーク内のサブパスに関連するメタデータが有効な場合、文字列TRUEを戻します。ネットワーク内のサブパスに関連するメタデータが有効でない場合は、文字列FALSEを戻します。

パラメータ

network

ネットワーク名を指定します。

使用上の注意

サブパス表の情報が有効かどうかを確認します(「サブパス表」を参照)。

例

次の例では、MY_NETWORKという名前のネットワーク内のサブパスに関連するメタデータが有効かどうかを確認します。

SELECT SDO_NET.VALIDATE_SUBPATH_SCHEMA('MY_NETWORK') FROM DUAL;

SDO_NET.VALIDATE_SUBPATH_SCHEMA('MY_NETWORK')
--------------------------------------------------------------------------------
TRUE

索引

A  C  D  E  F  G  H  I  J  L  M  N  O  P  R  S  T  U  V  X

A

- アクティブ・リンク

- リンク表のACTIVE列 1

- アクティブ・ノード

- ノード表のACTIVE列 1

- ADD_CHILD_FEATUREプロシージャ 1

- ADD_CHILD_FEATURESプロシージャ 1

- ADD_EDGEファンクション 1

- ADD_FEATURE_ELEMENTプロシージャ 1

- ADD_FEATURE_ELEMENTSプロシージャ 1

- ADD_FEATURE_LAYERプロシージャ 1

- ADD_FEATUREプロシージャ 1

- ADD_ISOLATED_NODEファンクション 1

- ADD_LINEAR_GEOMETRYファンクション 1

- ADD_LOOPファンクション 1

- ADD_NODEファンクション 1

- ADD_POINT_GEOMETRYファンクション 1

- ADD_POLYGON_GEOMETRYファンクション 1

- ADD_TOPO_GEOMETRY_LAYERプロシージャ 1

- ALL_SDO_NETWORK_CONSTRAINTSビュー 1

- ALL_SDO_NETWORK_METADATAビュー 1

- ALL_SDO_NETWORK_USER_DATAビュー 1 , 2

- ALL_SDO_TOPO_INFOビュー 1

- ALL_SDO_TOPO_METADATAビュー 1

- API

- ネットワーク・データ・モデル・グラフ

- パフォーマンス 1

- トポロジ・データ・モデル 1

- Application Program Interface (API)

- ネットワーク・データ・モデル・グラフ

- パフォーマンス 1

- トポロジ・データ・モデル 1

C

- キャッシュ

- パーティション 1

- 関連付けられたTopoMapオブジェクト 1

- CHANGE_EDGE_COORDSプロシージャ 1

- 子レイヤー 1

- 子ノード 1

- CLEAR_TOPO_MAPプロシージャ 1

- コレクション・レイヤー 1

- COMMIT_TOPO_MAPプロシージャ 1

- 複雑なパス 1

- COMPUTE_PATH_GEOMETRYプロシージャ 1

- 接続されたコンポーネント

- 検索 1

- 接続されているコンポーネント表

- 定義 1

- 制約

- ネットワーク 1

- 点を含むフェイス

- 点用に取得 1

- COPY_NETWORKプロシージャ 1

- コスト

- ネットワーク・メタデータ・ビューのLINK_COST_COLUMN列 1

- ネットワーク・メタデータ・ビューのNODE_COST_COLUMN列 1

- CREATE_EDGE_INDEXプロシージャ 1

- CREATE_FACE_INDEXプロシージャ 1

- CREATE_FEATUREファンクション 1

- CREATE_LINK_TABLEプロシージャ 1

- CREATE_LOGICAL_NETWORKプロシージャ 1

- CREATE_LRS_NETWORKプロシージャ 1

- CREATE_LRS_TABLEプロシージャ 1

- CREATE_NODE_TABLEプロシージャ 1

- CREATE_PARTITION_TABLEプロシージャ 1

- CREATE_PATH_LINK_TABLEプロシージャ 1

- CREATE_PATH_TABLEプロシージャ 1

- CREATE_SDO_NETWORKプロシージャ 1

- CREATE_SUBPATH_TABLEプロシージャ 1

- CREATE_TOPO_MAPプロシージャ 1

- CREATE_TOPO_NETWORKプロシージャ 1

- CREATE_TOPOLOGYプロシージャ 1

- 複数のスキーマが関係している場合の注意事項

- トポロジの編集 1

- トポロジの使用方法 1

D

- ダングリング・フィーチャ

- 削除 1

- 取得 1

- ダングリング・リンク

- 削除 1

- 取得 1

- ダングリング・ノード

- 削除 1

- 取得 1

- 度数

- ノード 1

- DELETE_CHILD_FEATURES_ATプロシージャ 1

- DELETE_CHILD_FEATURESプロシージャ 1

- DELETE_DANGLING_FEATURESプロシージャ 1

- DELETE_DANGLING_LINKSプロシージャ 1

- DELETE_DANGLING_NODESプロシージャ 1

- DELETE_FEATURE_ELEMENTS_ATプロシージャ 1

- DELETE_FEATURE_ELEMENTSプロシージャ 1

- DELETE_FEATURESプロシージャ 1

- DELETE_LINKプロシージャ 1

- DELETE_NODEプロシージャ 1

- DELETE_PATHプロシージャ 1

- DELETE_PHANTOM_FEATURESプロシージャ 1

- DELETE_SUBPATHプロシージャ 1

- DELETE_TOPO_GEOMETRY_LAYERプロシージャ 1

- デモ・ファイル

- ネットワーク・データ・モデル・グラフ 1

- DEREGISTER_CONSTRAINTプロシージャ 1

- 有向リンク 1

- 有向ネットワーク 1

- エッジの方向 1

- DROP_NETWORKプロシージャ 1

- DROP_TOPO_MAPプロシージャ 1

- DROP_TOPOLOGYプロシージャ 1

- 期間

- ネットワーク・メタデータ・ビューのLINK_DURATION_COLUMN列 1

- ネットワーク・メタデータ・ビューのNODE_DURATION_COLUMN列 1

E

- エッジ索引

- TopoMapオブジェクトの作成 1

- エッジ情報表 1

- エッジ

- 追加 1 , 2

- 線形ジオメトリの追加 1

- ループの追加 1

- 座標の変更 1 , 2

- 定義 1

- 方向 1

- 問合せウィンドウと相互作用するエッジの検索 1

- 形状点の座標の取得 1

- 追加されたエッジのID番号の取得 1

- 変更されたエッジのID番号の取得 1

- 削除されたエッジのID番号の取得 1

- 点に最も近いエッジの取得 1

- キャッシュ内で点に最も近いエッジの取得 1

- ノードの取得 1

- 孤立 1

- 分離されている 1

- ループ 1

- 移動 1 , 2

- 削除 1 , 2

- エッジ情報表への情報の格納 1

- 更新 1

- エッジの順序

- 複数のスキーマが関係している場合のトポロジの編集に必要な権限 1

- エラー処理

- トポロジの編集 1

- 例

- ネットワーク・データ・モデル・グラフ 1 , 2

- トポロジ・データ・モデル(PL/SQL) 1

- 例外処理

- トポロジの編集 1

F

- F0 (フェイス・ゼロ、またはユニバース・フェイス) 1

- フェイス索引

- TopoMapオブジェクトの作成 1

- フェイス情報表 1

- フェイス

- ポリゴン・ジオメトリの追加 1

- 定義 1

- 問合せウィンドウと相互作用するフェイスの検索 1

- 境界の取得 1

- 境界の取得 1

- 点を含むフェイスの取得 1

- 追加されたフェイスのID番号の取得 1

- 変更されたフェイスのID番号の取得 1

- 削除されたフェイスのID番号の取得 1

- 再定義 1

- フェイス情報表への情報の格納 1

- フェイスの順序

- 複数のスキーマが関係している場合のトポロジの編集に必要な権限 1

- FEATURE_LAYERプロシージャ 1

- フィーチャ要素の関係表

- 定義 1

- フィーチャ要素

- 定義 1

- フィーチャ階層表

- 定義 1

- フィーチャ・レイヤー 1

- フィーチャ・レイヤーのタイプ 1

- フィーチャ

- ジオメトリからの作成 1

- ネットワーク・アプリケーション 1

- ネットワーク・アプリケーション 1

- フィーチャ表

- 定義 1

- フィーチャ・タイプ 1

- FIND_CONNECTED_COMPONENTSプロシージャ 1

- ファンクション索引

- SDO_TOPO_GEOMETRY列でサポートされないファンクション索引 1

G

- GENERATE_NODE_LEVELSプロシージャ 1

- GENERATE_PARTITION_BLOBプロシージャ 1

- GENERATE_PARTITION_BLOBSプロシージャ 1

- ジオメトリ

- パスの計算 1

- GET_CHILD_FEATURE_IDSファンクション 1

- GET_CHILD_LINKSファンクション 1

- GET_CHILD_NODESファンクション 1

- GET_CONTAINING_FACEファンクション 1

- GET_DANGLING_FEATURESファンクション

- SDO_NETパッケージ

- GET_DANGLING_FEATURES 1

- GET_DANGLING_LINKSファンクション 1

- GET_DANGLING_NODESファンクション 1

- GET_EDGE_ADDITIONSファンクション 1

- GET_EDGE_CHANGESファンクション 1

- GET_EDGE_COORDSファンクション 1

- GET_EDGE_DELETIONSファンクション 1

- GET_EDGE_NODESファンクション 1

- GET_FACE_ADDITIONSファンクション 1

- GET_FACE_BOUNDARYファンクション 1 , 2

- GET_FACE_CHANGESファンクション 1

- GET_FACE_DELETIONSファンクション 1

- GET_FEATURE_ELEMENTSファンクション 1

- GET_FEATURE_LAYER_IDファンクション 1

- GET_FEATURES_ON_LINKSファンクション

- SDO_NETパッケージ

- GET_FEATURES_ON_LINKS 1

- GET_FEATURES_ON_NODESファンクション

- SDO_NETパッケージ

- GET_FEATURES_ON_NODES 1

- GET_GEOMETRY_TYPEファンクション 1

- GET_GEOMETRY memberファンクション 1

- GET_IN_LINKSファンクション 1

- GET_INVALID_LINKSファンクション 1

- GET_INVALID_NODESファンクション 1

- GET_INVALID_PATHSファンクション 1

- GET_ISOLATED_NODESファンクション 1

- GET_LINK_COST_COLUMNファンクション 1

- GET_LINK_DIRECTIONファンクション 1

- GET_LINK_GEOM_COLUMNファンクション 1

- GET_LINK_GEOMETRYファンクション 1

- GET_LINK_TABLE_NAMEファンクション 1

- GET_LINKS_IN_PATHファンクション 1

- GET_LRS_GEOM_COLUMNファンクション 1

- GET_LRS_LINK_GEOMETRYファンクション 1

- GET_LRS_NODE_GEOMETRYファンクション 1

- GET_LRS_TABLE_NAMEファンクション 1

- GET_NEAREST_EDGE_IN_CACHEファンクション 1

- GET_NEAREST_EDGEファンクション 1

- GET_NEAREST_NODE_IN_CACHEファンクション 1

- GET_NEAREST_NODEファンクション 1

- GET_NETWORK_TYPEファンクション 1

- GET_NO_OF_HIERARCHY_LEVELSファンクション 1

- GET_NO_OF_LINKSファンクション 1

- GET_NO_OF_NODESファンクション 1

- GET_NODE_ADDITIONSファンクション 1

- GET_NODE_CHANGESファンクション 1

- GET_NODE_COORDファンクション 1

- GET_NODE_DEGREEファンクション 1

- GET_NODE_DELETIONSファンクション 1

- GET_NODE_FACE_STARファンクション 1

- GET_NODE_GEOM_COLUMNファンクション 1

- GET_NODE_GEOMETRYファンクション 1

- GET_NODE_IN_DEGREEファンクション 1

- GET_NODE_OUT_DEGREEファンクション 1

- GET_NODE_STARファンクション 1

- GET_NODE_TABLE_NAMEファンクション 1

- GET_OUT_LINKSファンクション 1

- GET_PARENT_FEATURE_IDSファンクション 1

- GET_PARTITION_SIZEファンクション 1

- GET_PATH_GEOM_COLUMNファンクション 1

- GET_PATH_TABLE_NAMEファンクション 1

- GET_PERCENTAGEファンクション 1

- GET_PHANTOM_FEATURESファンクション 1

- GET_PTファンクション 1

- GET_TGL_OBJECTS memberファンクション 1

- GET_TOPO_ELEMENTS memberファンクション 1

- GET_TOPO_NAMEファンクション 1

- GET_TOPO_OBJECTSファンクション 1

- GET_TOPO_TRANSACTION_IDファンクション 1

H

- ヒープ・サイズ

- Java 1

- ヒープ・サイズ(Java)

- 最大の設定 1

- 階層

- ネットワーク 1

- トポロジ・ジオメトリ・レイヤー 1

- 履歴情報表 1

I

- インバウンド・リンク

- リンクID番号の取得 1

- ノードの数の取得 1

- イン度数 1

- INITIALIZE_AFTER_IMPORTプロシージャ 1

- INITIALIZE_METADATAプロシージャ 1

- 無効なリンク

- 取得 1

- 無効なノード

- 取得 1

- 無効なパス

- 取得 1

- IS_HIERARCHICALファンクション 1

- IS_LINK_IN_PATHファンクション 1

- IS_LOGICALファンクション 1

- IS_NODE_IN_PATHファンクション 1

- IS_SPATIALファンクション 1

- 孤立エッジ

- 「孤立エッジ」を参照

- 孤立ノード

- 「孤立ノード(トポロジ)」を参照

- 孤立エッジ 1

- 孤立ノード(ネットワーク)

- 定義 1

- 取得 1

- 孤立ノード(トポロジ)

- 追加 1

- 定義 1

J

- ネットワーク・データ・モデル・グラフのJavaクライアント・インタフェース(sdonm) 1

- トポロジ・データ・モデルのJavaクライアント・インタフェース(sdotopo) 1

- Javaヒープ・サイズ

- 最大の設定 1

- Java最大ヒープ・サイズ

- 設定 1

L

- レイヤー

- コレクション 1

- トポロジ・ジオメトリ 1 , 2

- 線形ジオメトリ

- 追加 1

- リンクの方向

- 取得 1

- リンクのジオメトリ

- 取得 1

- リンク・レベル 1

- リンク

- 定義 1

- 削除 1

- 有向かどうかの判断 1

- 有向 1

- 方向 1

- ジオメトリの取得 1

- リンク上の点の割合の取得 1

- 無効 1

- パスとの関係 1

- 状態 1

- 一時 1

- 無向 1

- リンク表

- 定義 1

- LIST_TOPO_MAPSファンクション 1

- LOAD_CONFIGプロシージャ 1

- LOAD_TOPO_MAPファンクションまたはプロシージャ 1

- ロード・オンデマンド

- 編集、分析およびネットワーク編集での使用

- パーティションおよびロード・オンデマンドの使用 1

- ロード・オンデマンド分析 1

- ロギング・レベル

- ネットワーク操作の設定 1

- LOGICAL_PARTITIONプロシージャ 1

- LOGICAL_POWERLAW_PARTITIONプロシージャ 1

- 論理ネットワーク 1

- ループ・エッジ 1

- ループ

- 追加 1

- LRS_GEOMETRY_NETWORKファンクション 1

- LRSネットワーク 1

M

- メタデータ

- トポロジのメタデータの初期化 1

- 最低コスト・パス 1

- 最低コスト・スパニング・ツリー 1

- MOVE_EDGEプロシージャ 1

- MOVE_ISOLATED_NODEプロシージャ 1

- MOVE_NODEプロシージャ 1

- マルチレベル・ネットワーク 1

- マルチモーダル・ネットワーク 1

N

- 名前付けに関する注意事項

- Spatialの表名および列名 1 , 2

- 最も近いエッジ

- 点用に取得 1

- キャッシュ内で点用に取得 1

- 最も近いノード

- 点用に取得 1

- キャッシュ内で点用に取得 1

- NETWORK_EXISTSファンクション 1

- ネットワーク分析

- ロード・オンデマンド方式の使用 1

- ネットワーク制約

- ALL_SDO_NETWORK_CONSTRAINTSビュー 1

- 登録解除 1

- 登録 1

- USER_SDO_NETWORK_CONSTRAINTSビュー 1

- ネットワーク・データ・モデル・グラフ

- Application Program Interface (API)

- パフォーマンス 1

- 概念 1

- 例 1

- 概要 1

- 使用するための手順 1

- サブプログラムのリファレンス情報 1

- 表 1

- ネットワーク要素

- 定義 1

- ネットワーク

- 有向 1

- 階層 1

- 論理 1

- パーティション化 1

- 空間 1

- 無向 1

- ノード・フェイス・スター

- ノードでの取得 1

- ノードのジオメトリ

- 取得 1

- ノード階層表

- 定義 1

- ノード情報表 1

- ノード・レベル表

- 定義 1

- ノード

- 追加 1 , 2

- 孤立ノード(トポロジ)の追加 1

- 点ジオメトリの追加 1

- 定義 1 , 2

- 度数 1

- 削除 1

- マルチレベル・ネットワークのノード・レベルの生成 1

- 座標の取得 1

- ジオメトリの取得 1

- 追加されたノードのID番号の取得 1

- 変更されたノードのID番号の取得 1

- 削除されたノードのID番号の取得 1

- 点に最も近いノードの取得 1

- キャッシュ内で点に最も近いノードの取得 1

- ノード・フェイス・スターの取得 1

- ノード・スターの取得 1

- ノードの数の取得 1

- 無効 1

- 孤立 1

- 孤立(ネットワーク) 1 , 2

- 孤立(トポロジ) 1

- 移動 1 , 2

- 孤立ノード(トポロジ)の移動 1

- 不要 1 , 2

- 到達可能 1

- 到達 1

- 削除 1 , 2

- 不要なノードの削除 1 , 2

- 状態 1

- ノード情報表への情報の格納 1

- 一時 1

- ノードの順序

- 複数のスキーマが関係している場合のトポロジの編集に必要な権限 1

- ノード・スター

- ノードでの取得 1

- ノード表

- 定義 1

O

- 不要ノード

- 削除 1 , 2

- 演算子

- トポロジ・データ・モデル 1

- アウトバウンド・リンク

- リンクID番号の取得 1

- ノードの数の取得 1

- アウト度数 1

- OutOfMemoryError例外

- 最大ヒープ・サイズの拡大 1

P

- 親フィーチャ

- 定義 1

- 親レイヤー 1

- 親ノード 1

- パーティションBLOB

- 生成 1

- パーティションBLOB

- 生成 1

- 生成およびロード 1

- パーティション・キャッシュ

- 構成のロード 1

- パーティション化されたネットワーク 1

- パーティション

- キャッシュ 1

- ネットワークのパーティション化 1 , 2

- パーティション表 1 , 2

- 常駐 1

- 編集および分析での使用 1

- パーティション・サイズ

- 取得 1

- パーティション表

- 定義 1 , 2

- パスリンク表

- 定義 1

- パス

- 複雑 1

- ジオメトリの計算 1

- 定義 1

- 削除 1

- 無効 1

- 最低コスト 1

- 単純 1

- サブパス 1

- 一時 1

- パス表

- 定義 1

- パフォーマンス

- ネットワーク・データ・モデル・グラフのAPI 1

- ファントム・フィーチャ

- 削除 1

- 取得 1

- PL/SQLの例

- ネットワーク・データ・モデル・グラフ 1

- 点ジオメトリ

- 追加 1

- 点

- リンク上の割合における点の取得 1

- ポリゴン・ジオメトリ

- 追加 1

- POST_XMLファンクション 1

- べき乗則ネットワーク 1

- 計算済の分析結果 1

- PREPARE_FOR_EXPORTプロシージャ 1

- プリミティブ

- 「位相要素」を参照

R

- 到達可能ノード 1

- 到達ノード 1

- READMEファイル

- Spatial and Graphおよび関連機能 1

- 読取り専用のTopoMapオブジェクト 1

- 参照パス

- 定義 1

- REGISTER_CONSTRAINTプロシージャ 1

- RELATEファンクション 1

- 関係情報表 1

- REMOVE_EDGEプロシージャ 1

- REMOVE_NODEプロシージャ 1

- REMOVE_OBSOLETE_NODESプロシージャ 1

- 常駐パーティション 1

- ROLLBACK_TOPO_MAPプロシージャ 1

S

- スケールフリー(べき乗則)ネットワーク 1

- SDO_EDGE_ARRAY型 1

- SDO_GEOMETRY_NETWORKファンクション 1

- SDO_LIST_TYPE型 1

- SDO_NET_FEAT_ELEM_ARRAYデータ型 1

- SDO_NET_FEAT_ELEMデータ型 1

- SDO_NET_LAYER_FEAT_ARRAYデータ型 1

- SDO_NET_LAYER_FEATデータ型 1

- SDO_NETパッケージ

- ADD_CHILD_FEATURE 1

- ADD_CHILD_FEATURES 1

- ADD_FEATURE 1

- ADD_FEATURE_ELEMENT 1

- ADD_FEATURE_ELEMENTS 1

- ADD_FEATURE_LAYER 1

- COMPUTE_PATH_GEOMETRY 1

- COPY_NETWORK 1

- CREATE_LINK_TABLE 1

- CREATE_LOGICAL_NETWORK 1

- CREATE_LRS_NETWORK 1

- CREATE_LRS_TABLE 1

- CREATE_NODE_TABLE 1

- CREATE_PARTITION_TABLE 1

- CREATE_PATH_LINK_TABLE 1

- CREATE_PATH_TABLE 1

- CREATE_SDO_NETWORK 1

- CREATE_SUBPATH_TABLE 1

- CREATE_TOPO_NETWORK 1

- DELETE_CHILD_FEATURES 1

- DELETE_CHILD_FEATURES_AT 1

- DELETE_DANGLING_FEATURES 1

- DELETE_DANGLING_LINKS 1

- DELETE_DANGLING_NODES 1

- DELETE_FEATURE_ELEMENTS 1

- DELETE_FEATURE_ELEMENTS_AT 1

- DELETE_FEATURES 1

- DELETE_LINK 1

- DELETE_NODE 1

- DELETE_PATH 1

- DELETE_PHANTOM_FEATURES 1

- DELETE_SUBPATH 1

- DEREGISTER_CONSTRAINT 1

- DROP_NETWORK 1

- FEATURE_LAYER 1

- FIND_CONNECTED_COMPONENTS 1

- GENERATE_NODE_LEVELS 1

- GENERATE_PARTITION_BLOB 1

- GENERATE_PARTITION_BLOBS 1

- GET_CHILD_FEATURE_IDS 1

- GET_CHILD_LINKS 1

- GET_CHILD_NODES 1

- GET_DANGLING_LINKS 1

- GET_DANGLING_NODES 1

- GET_FEATURE_ELEMENTS 1

- GET_FEATURE_LAYER_ID 1

- GET_GEOMETRY_TYPE 1

- GET_IN_LINKS 1

- GET_INVALID_LINKS 1

- GET_INVALID_NODES 1

- GET_INVALID_PATHS 1

- GET_ISOLATED_NODES 1

- GET_LINK_COST_COLUMN 1

- GET_LINK_DIRECTION 1

- GET_LINK_GEOM_COLUMN 1

- GET_LINK_GEOMETRY 1

- GET_LINK_TABLE_NAME 1

- GET_LINKS_IN_PATH 1

- GET_LRS_GEOM_COLUMN 1

- GET_LRS_LINK_GEOMETRY 1

- GET_LRS_NODE_GEOMETRY 1

- GET_LRS_TABLE_NAME 1

- GET_NETWORK_TYPE 1

- GET_NO_OF_HIERARCHY_LEVELS 1

- GET_NO_OF_LINKS 1

- GET_NO_OF_NODES 1

- GET_NODE_DEGREE 1

- GET_NODE_GEOM_COLUMN 1

- GET_NODE_GEOMETRY 1

- GET_NODE_IN_DEGREE 1

- GET_NODE_OUT_DEGREE 1

- GET_NODE_TABLE_NAME 1

- GET_OUT_LINKS 1

- GET_PARENT_FEATURE_IDS 1

- GET_PARTITION_SIZE 1

- GET_PATH_GEOM_COLUMN 1

- GET_PATH_TABLE_NAME 1

- GET_PERCENTAGE 1

- GET_PHANTOM_FEATURES 1

- GET_PT 1

- IS_HIERARCHICAL 1

- IS_LINK_IN_PATH 1

- IS_LOGICAL 1

- IS_NODE_IN_PATH 1

- IS_SPATIAL 1

- LOAD_CONFIG 1

- LOGICAL_PARTITION 1

- LOGICAL_POWERLAW_PARTITION 1

- LRS_GEOMETRY_NETWORK 1

- NETWORK_EXISTS 1

- POST_XML 1

- リファレンス情報 1

- REGISTER_CONSTRAINT 1

- SDO_GEOMETRY_NETWORK 1

- SET_LOGGING_LEVEL 1

- SET_MAX_JAVA_HEAP_SIZE 1

- SPATIAL_PARTITION 1

- TOPO_GEOMETRY_NETWORK 1

- UPDATE_FEATURE 1

- UPDATE_FEATURE_ELEMENT 1

- VALIDATE_LINK_SCHEMA 1

- VALIDATE_LRS_SCHEMA 1

- VALIDATE_NETWORK 1

- VALIDATE_NODE_SCHEMA 1

- VALIDATE_PARTITION_SCHEMA 1

- VALIDATE_PATH_SCHEMA 1

- VALIDATE_SUBPATH_SCHEMA 1

- SDO_NETWORK_NVP_TABデータ型 1

- SDO_NETWORK_NVPデータ型 1

- SDO_NUMBER_ARRAY型 1

- SDO_TGL_OBJECT_ARRAY型 1

- SDO_TGL_OBJECT型 1

- SDO_TOPO_GEOMETRY constructors 1

- SDO_TOPO_GEOMETRYのメンバー・ファンクション

- GET_GEOMETRY 1

- GET_TGL_OBJECTS 1

- GET_TOPO_ELEMENTS 1

- SDO_TOPO_GEOMETRY型 1

- SDO_TOPO_MAPパッケージ

- ADD_EDGE 1

- ADD_ISOLATED_NODE 1

- ADD_LINEAR_GEOMETRY 1

- ADD_LOOP 1

- ADD_NODE 1

- ADD_POINT_GEOMETRY 1

- ADD_POLYGON_GEOMETRY 1

- CHANGE_EDGE_COORDS 1

- CLEAR_TOPO_MAP 1

- COMMIT_TOPO_MAP 1

- CREATE_EDGE_INDEX 1

- CREATE_FACE_INDEX 1

- CREATE_FEATURE 1

- CREATE_TOPO_MAP 1

- DROP_TOPO_MAP 1

- GET_CONTAINING_FACE 1

- GET_EDGE_ADDITIONS 1

- GET_EDGE_CHANGES 1

- GET_EDGE_COORDS 1

- GET_EDGE_DELETIONS 1

- GET_EDGE_NODES 1

- GET_FACE_ADDITIONS 1

- GET_FACE_BOUNDARY 1

- GET_FACE_CHANGES 1

- GET_FACE_DELETIONS 1

- GET_NEAREST_EDGE 1

- GET_NEAREST_EDGE_IN_CACHE 1

- GET_NEAREST_NODE 1

- GET_NEAREST_NODE_IN_CACHE 1

- GET_NODE_ADDITIONS 1

- GET_NODE_CHANGES 1

- GET_NODE_COORD 1

- GET_NODE_DELETIONS 1

- GET_NODE_FACE_STAR 1

- GET_NODE_STAR 1

- GET_TOPO_NAME 1

- GET_TOPO_TRANSACTION_ID 1

- LIST_TOPO_MAPS 1

- LOAD_TOPO_MAP 1

- MOVE_EDGE 1

- MOVE_ISOLATED_NODE 1

- MOVE_NODE 1

- リファレンス情報 1

- REMOVE_EDGE 1

- REMOVE_NODE 1

- REMOVE_OBSOLETE_NODES 1

- ROLLBACK_TOPO_MAP 1

- SEARCH_EDGE_RTREE_TOPO_MAP 1

- SEARCH_FACE_RTREE_TOPO_MAP 1

- SET_MAX_MEMORY_SIZE 1

- UPDATE_TOPO_MAP 1

- VALIDATE_TOPO_MAP 1

- VALIDATE_TOPOLOGY 1

- SDO_TOPO_OBJECT_ARRAY型 1

- SDO_TOPO_OBJECT型 1

- SDO_TOPOパッケージ

- ADD_TOPO_GEOMETRY_LAYER 1

- CREATE_TOPOLOGY 1

- DELETE_TOPO_GEOMETRY_LAYER 1

- DROP_TOPOLOGY 1

- GET_FACE_BOUNDARY 1

- GET_TOPO_OBJECTS 1

- INITIALIZE_AFTER_IMPORT 1

- INITIALIZE_METADATA 1

- PREPARE_FOR_EXPORT 1

- リファレンス情報 1

- RELATE 1

- SDOネットワーク 1

- sdonm Javaクライアント・インタフェース 1

- sdotopo Javaクライアント・インタフェース 1

- SEARCH_EDGE_RTREE_TOPO_MAPファンクション 1

- SEARCH_FACE_RTREE_TOPO_MAPファンクション 1

- 順序

- ノード、エッジおよびフェイス

- 複数のスキーマが関係している場合のトポロジの編集に必要な権限 1

- SET_LOGGING_LEVELプロシージャ 1

- SET_MAX_JAVA_HEAP_SIZEプロシージャ 1

- SET_MAX_MEMORY_SIZEプロシージャ 1

- 兄弟リンク 1

- 兄弟ノード 1

- 単純パス 1

- スパニング・ツリー

- 最低コスト 1

- SPATIAL_PARTITIONプロシージャ 1

- 空間ネットワーク 1

- スター

- ノード 1

- ノード・フェイス 1

- 状態 1

- サブパス

- CREATE_SUBPATH_TABLEプロシージャ 1

- 定義 1

- 削除 1

- サブパス表 1

- サブパス表

- 定義 1

T

- ネットワークの時間モデリングおよび分析 1

- 一時リンク 1

- 一時ノード 1

- 一時パス 1

- SDO_TOPO_GEOMETRY型のTG_ID属性 1

- SDO_TOPO_GEOMETRY型のTG_LAYER_ID属性 1

- SDO_TOPO_GEOMETRY型のTG_TYPE属性 1

- 許容差

- トポロジ・データ・モデル 1

- TOPO_GEOMETRY_NETWORKファンクション 1

- topo_mapパラメータ

- SDO_TOPOサブプログラム 1

- 位相要素

- 定義(ノード、エッジ、フェイス) 1

- トポロジ

- マップの消去 1

- マップのコミット 1

- 作成 1

- エッジ索引の作成 1

- フェイス索引の作成 1

- マップの作成 1

- 削除 1

- マップの削除 1

- 編集 1

- エクスポート情報表形式 1

- エクスポート

- 準備 1

- TopoMapオブジェクトからの名前の取得 1

- ジオメトリ・レイヤーの階層 1

- インポート

- インポート後の初期化 1

- メタデータの初期化 1

- TopoMapオブジェクトへのロード 1

- 更新 1

- 検証 1

- SDO_TOPO_GEOMETRY型のTOPOLOGY_ID属性 1

- トポロジ・データ・モデル

- Application Program Interface (API) 1

- 概念 1

- 概要 1

- PL/SQL例 1

- 使用するための手順 1

- サブプログラムのリファレンス情報 1 2

- トポロジ・データ型 1

- トポロジのエクスポート情報表 1

- トポロジ・ジオメトリ

- 定義 1

- レイヤー 1

- トポロジ・ジオメトリ・レイヤー

- 追加 1

- 定義 1

- 削除 1

- 階層関係 1

- トポロジ・ジオメトリ・ネットワーク 1

- トポロジ・マップ

- リスト 1

- ロード 1

- ロールバック 1

- 検証 1

- トポロジ演算子 1

- トポロジ・パラメータ

- SDO_TOPOサブプログラム 1 , 2

- トポロジ・トランザクションID

- 取得 1

- TopoMapオブジェクト

- 消去 1

- データベースへの変更のコミット 1

- 作成 1

- エッジ索引の作成 1

- フェイス索引の作成 1

- 削除 1

- 説明 1

- トポロジ名の取得 1

- リスト 1

- ロード 1

- トポロジを編集するための使用プロセス 1 , 2

- 読取り専用 1

- 変更のロールバック 1

- 更新可能 1

- 検証 1

- タイプ

- リンクまたはノードのタイプ 1

U

- 無向リンク 1

- 無向ネットワーク 1

- ユニバース・フェイス(F0) 1

- 更新可能なTopoMapオブジェクト 1

- UPDATE_FEATURE_ELEMENTプロシージャ 1

- UPDATE_FEATUREプロシージャ 1

- UPDATE_TOPO_MAPプロシージャ 1

- USER_SDO_NETWORK_CONSTRAINTSビュー 1

- USER_SDO_NETWORK_METADATAビュー 1

- USER_SDO_NETWORK_USER_DATAビュー 1 , 2

- USER_SDO_TOPO_INFOビュー 1

- USER_SDO_TOPO_METADATAビュー 1

- ユーザー定義データ

- ALL_SDO_NETWORK_USER_DATAビュー 1 , 2

- USER_SDO_NETWORK_USER_DATAビュー 1 , 2

V

- VALIDATE_LINK_SCHEMAファンクション 1

- VALIDATE_LRS_SCHEMAファンクション 1

- VALIDATE_NETWORKファンクション 1

- VALIDATE_NODE_SCHEMAファンクション 1

- VALIDATE_PARTITION_SCHEMAファンクション 1

- VALIDATE_PATH_SCHEMAファンクション 1

- VALIDATE_SUBPATH_SCHEMAファンクション 1

- VALIDATE_TOPO_MAPファンクション 1

- VALIDATE_TOPOLOGYプロシージャ 1

- 頂点(ノード) 1

X

- ネットワーク・データ・モデル・グラフのXMLインタフェース 1

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。