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を使用して、次のようなネットワーク・メタデータとデータの管理操作を実行できます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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のチュートリアル(「ネットワーク・データ・モデルのチュートリアルとその他のリソース」を参照)を参照してください。