5.15 ネットワーク・データ・モデルのApplication Program Interface(API)
Oracle Spatialのネットワーク・データ・モデル機能には、2つのクライアントApplication Program Interface (API)として、SDO_NETパッケージによって提供されるPL/SQLインタフェースと、Javaインタフェースが含まれます。
両方のインタフェースを使用してネットワーク・データの作成と更新を、またJavaインタフェースを使用してネットワークの分析を実行できます。ネットワーク表の移入および索引の作成にはPL/SQLのみまたはSQLのみを使用し、アプリケーション開発には主にJavaを使用することをお薦めします。
PL/SQL APIとJava APIには、次のパフォーマンス上の注意事項があります。
-
空間ネットワークの空間に関係しない内容について分析または編集を行う場合は、これらの処理を開始する前にUSER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)のNETWORK_CATEGORY列の値を
LOGICAL
に設定し、処理が完了してから値をSPATIAL
に戻すことで、パフォーマンスを向上できます。たとえば、2ノード間の最短パスの計算で検討されるのはコスト値であるため、この方法は最短パスを探す場合に利用できます。ただし、リンクに対して空間ジオメトリ・オブジェクトまたは終了メジャー値を設定する場合は、この方法を利用できません。
-
ネットワーク・オブジェクトを変更しない場合(ネットワークの分析操作または情報取得のみを実行する場合)は、ネットワーク・メモリー・オブジェクトを読取り専用で(更新不可を指定して)作成することで、パフォーマンスを向上できます。
親トピック: ネットワーク・データ・モデルの概要
5.15.1 ネットワーク・データ・モデルのPL/SQLインタフェース
SDO_NETパッケージは、データベース・サーバー上でネットワークの作成、アクセスおよび管理を行うためのサブプログラムを提供します。SDO_NETのファンクションとプロシージャの使用例は、ネットワークの例の例5-9に示しています。
SDO_NETサブプログラムは、次の論理カテゴリにグループ化できます。
-
ネットワークの作成
-
ネットワークのコピーおよび削除
-
ネットワーク表の作成
-
ネットワーク・オブジェクトの検証
-
情報の取得(ネットワークに関する情報の取得、特性の確認)
SDO_NETの各ファンクションおよびプロシージャのリファレンス情報については、「SDO_NETパッケージ・サブプログラム」を参照してください。
5.15.2 ネットワーク・データ・モデルのJavaインタフェース
ノート:
Oracle Databaseリリース23aiでは、データベースのOJVMがJDK11をサポートしているため、Oracle Spatialネットワーク・データ・モデルAPIはJDK 11でコンパイルされます。ただし、下位互換性のために、APIは引き続きJDK8でサポートされます。APIを使用する場合は、関連するすべてのJARファイルが、使用されているJDKバージョン(JDK 8またはJDK 11)と一致していることを確認してください。様々なJDKバージョンでサポートされているJDBCドライバの詳細は、Oracle JDBCドライバのRDBMSおよびJDKバージョン互換性を参照してください。ネットワーク・データ・モデルの機能には、ロード・オンデマンドのJavaインタフェースが含まれています。このインタフェースに関するすべてのリファレンス情報については、『Oracle Spatial Java APIリファレンス』を参照してください。ロード・オンデマンドのJavaインタフェースのクラスは、oracle.spatial.network.lod
パッケージとそのサブパッケージに含まれています。
SpatialのJavaクラス・ライブラリは、<ORACLE_HOME>/md/jlib/
ディレクトリ下の.jarファイルに格納されています。
5.15.2.1 ネットワーク・メタデータとデータの管理
Java APIを使用して、次のようなネットワーク・メタデータとデータの管理操作を実行できます。
-
ノードおよびリンクのデータの挿入、削除および変更
-
データベースからのネットワークのロード
-
データベースへのネットワークの格納
-
データベースへのネットワーク・メタデータの格納
-
ネットワーク・メタデータの属性の変更
親トピック: ネットワーク・データ・モデルのJavaインタフェース
5.15.2.2 ロード・オンデマンド方式を使用したネットワーク分析
oracle.spatial.network.lod.NetworkAnalyst
クラスを使用し、ロード・オンデマンド方式を使用して次のようなネットワーク分析操作を実行できます。
-
最短パス: グラフ理論の一般的な推移閉包問題です。任意の開始ノードおよび終了ノードについて、最短パスを検索します。
-
到達可能性: 任意のノードについて、このノードに到達可能なすべてのノードを検索するか、またはこのノードから到達可能なすべてのノードを検索します。
-
コスト内分析: 任意のターゲット・ノードおよびコストについて、任意のコスト内でターゲット・ノードから到達可能なすべてのノードを検索します。
-
最近隣分析: 任意のターゲット・ノードおよび近くにある複数のノードについて、近くにあるノードおよびそのノードから任意のターゲット・ノードに移動するためのコストを検索します。
-
動的データ入力: ネットワーク更新情報を使用して
NetworkUpdate
オブジェクトを作成して使用します。 -
ユーザー定義のリンクおよびノードのコスト計算表: リンクまたはノードのコストを計算する方法を定義します。
親トピック: ネットワーク・データ・モデルのJavaインタフェース
5.15.3 ネットワーク・データ・モデルのXMLインタフェース
ノート:
カスタマイズしたネットワーク分析を効率的かつ安全に実装するために、Oracle SpatialではNDM XML APIを非推奨にしています。かわりに、Load On Demand (LOD) APIを使用します。LOD APIは、カスタマイズを簡単かつ安全に実装できるカスタマイズ・インタフェースを提供します。また、NDM縮約階層REST APIを使用して高パフォーマンス・ネットワーク分析を行うこともできます。
ネットワーク・データ・モデルのXML APIを使用してネットワーク分析を実行できます。Webサービス・リクエストは、Oracle SpatialのWebサービス(『Oracle Spatial開発者ガイド』を参照)を介してサポートされます。
HTTPリクエストは、Java、PLSQLまたは.NETプログラムから、あるいは単純にHTMLフォームからWebサービスに送信できます。SDO_NET.POST_XMLファンクション(「SDO_NETパッケージ・サブプログラム」を参照)を使用すると、PL/SQLユーザーはWebサービスをコールできます。
ネットワーク・データ・モデルのXML APIのXMLスキーマについては、$ORACLE_HOME/md/doc/sdondmxml.zip
を参照してください。
5.15.3.1 ユーザー指定の実装
XML APIは、LODインタフェースを実装するJavaクラスの指定を可能にすることで、ユーザー指定の制約、コスト計算またはネットワーク分析アルゴリズムの設定を取得できます。入力パラメータ(トラック輸送制約の実装でのトラックの重量または高さなど)が必要な実装については、Javaクラスがoracle.spatial.network.lod.XMLConfigurable
インタフェース(つまり、次の2つのメソッド)を実装する必要があります。
-
void init(Element parameter);
-
String getXMLSchema();
init
メソッドでは、入力パラメータをXML要素として渡すことができます(XML要素は、getXMLSchema
メソッドから返されるスキーマに従う必要があります)。
次のXMLコード・セグメントは、最短パス分析リクエストに対して最短パス・アルゴリズムを構成する方法の例です。
<startPoint> <nodeID>123</nodeID> </startPoint> <endPoint> <nodeID>456</nodeID> </endPoint> <shortestPathAlgorithm> <className>oracle.spatial.network.lod.AStar</className> <parameters> <heuristicCostFunction> <className>oracle.spatial.network.lod.GeodeticCostFunction</className> <parameters> <userDataCategory>0</userDataCategory> <xCoordUserDataIndex>0</xCoordUserDataIndex> <yCoordUserDataIndex>1</yCoordUserDataIndex> </parameters> </heuristicCostFunction> <linkLevelSelector> <className>oracle.spatial.network.lod.DynamicLinkLevelSelector</className> <parameters> <maxLinkLevel>2</maxLinkLevel> <costThreshold linkLevel="1">40000</costThreshold> <numHighLevelNeighbors>8</numHighLevelNeighbors> <costMultiplier>1.5</costMultiplier> <costFunction> <className>oracle.spatial.network.lod.GeodeticCostFunction</className> <parameters> <userDataCategory>0</userDataCategory> <xCoordUserDataIndex>0</xCoordUserDataIndex> <yCoordUserDataIndex>1</yCoordUserDataIndex> </parameters> </costFunction> </parameters> </linkLevelSelector> </parameters> </shortestPathAlgorithm>
XML APIのその他の例については、NDMのチュートリアル(「ネットワーク・データ・モデルのチュートリアルとその他のリソース」を参照)を参照してください。
親トピック: ネットワーク・データ・モデルのXMLインタフェース