5.12 縮約階層を使用したネットワーク管理と分析
そのため、リリース21cから、Spatialにはネットワーク・データ・モデルを使用するための方法が2つ提供されています。
- ロード・オンデマンド(LOD)では、ビジネス・ルールとデータのカスタマイズをサポートします。
- 縮約階層には、静的ネットワークにかかわるWebサービスの開発と展開を簡単にするためのREST APIが含まれています。
縮約階層の方法では、次の処理を実行します。
- ノード順序(重要度)とショートカット・リンクを事前に計算して、ファイルのセットに保存します。
- 問合せ時に重要度が低いノードをスキップすることで、ショートカット・リンクによる最短パスを見つけます。
- ショートカット・リンクをマップして元のグラフ表現に戻します。
縮約階層を使用するときには、縮約階層のモデル管理と分析のために縮約階層REST APIを使用することになります。
サブトピックは、次のとおりです。
- 縮約階層REST API
- 縮約階層REST APIの例
- 縮約階層モデルの管理
- 縮約階層分析
- 縮約階層REST APIの使用(Webデモを含む)
- REST APIリファレンス情報
縮約階層REST API
縮約階層REST APIは、縮約階層モデルの管理とモデルについての分析に使用できます。HTTPプロトコルとHTTPSプロトコルを使用することで、リクエストの発行と応答の受信が可能になります。JSON形式とXML形式の両方がサポートされます。
次の図は、縮約階層REST APIのアーキテクチャを示しています。
-
ユーザーのアプリケーションは、縮約階層REST APIを使用して、縮約階層RESTサービスにリクエストを送信し、レスポンスを受信します。
-
縮約階層RESTサービスは、モデル管理リクエストを受信すると、そのリクエストを処理するためにネットワーク・データ・モデルのロジックに渡して、戻される情報を受信します。
RESTサービスは分析リクエストを受信すると、そのリクエストを処理するために縮約階層モデルに渡して、戻される情報を受信します。
-
NDMモデルのロジックは、モデルを必要に応じて更新してから、縮約階層RESTサービスに情報を戻し、関連する縮約階層モデルが含まれているファイルを更新します。
-
縮約階層モデルに対する更新を受信したときには、関連するモデル・ファイルが更新されます。
このアーキテクチャのいくつかのコンポーネントについては、このトピックで詳しく説明します。
縮約階層REST APIの例
事前構成済ディレクトリに縮約階層ネットワーク・モデルを作成する場合のRESTful JSONリクエスト:
{"createNetworkRequest":
{
"chName":"my_example",
"networkName":"MY_NETWORK_NAME",
"dbUrl":"jdbc:oracle:thin:@<host>:<port>:<sid>",
"dbUser":"my_username",
"dbPassword":"my_password",
"processGeometry":true,
"processTurnRestrictions":false,
"primaryLinkCostColumn":"LENGTH",
"primaryCostUnit":"meter",
"primaryCostScaleFactor":10,
"secondaryLinkCostColumns":["LENGTH/S"],
"secondaryCostUnits":["second"],
"secondaryCostScaleFactors":[10]
}
}
メモリーに縮約階層ネットワーク・モデルをロードする場合のRESTful JSONリクエスト:
{"loadNetworkRequest":
{
"chName":"my_example",
"networkName":"MY_NETWORK_NAME",
"considerTurnRestrictions":false
}
}
最短パス分析のためのRESTful JSONリクエスト:
{
"chName":"my_example",
"shortestPathRequest":{
"startPoints" : { "pointOnNet" : [
{ "linkId" : 238135, "percentage" : 0.28 }
] },
"endPoints" : { "pointOnNet" : [
{ "linkId" : 261315, "percentage" : 0.93 }
] },
"geometry":true
}
}
最短パス分析のRESTful JSONレスポンス(読みやすい形式に変更してあります):
{ "shortestPathResponse" : { "cost" : 2906.6, "geometry" : "{\"type\":\"LineString\",\"coordinates\":[[-74.00501,40.70583],[-74.00457,40.70549],[-74.00447,40.70541],[-74.00418,40.70559],[-74.00386,40.70579],[-74.00361,40.70595],[-74.00346,40.70605],[-74.00335,40.70611],[-74.00318,40.70621],[-74.00231,40.7067],[-74.00274,40.70722],[-74.00311,40.70767],[-74.00336,40.708],[-74.00345,40.70808],[-74.00407,40.70745],[-74.00412,40.70757],[-74.00433,40.70783],[-74.00477,40.70841],[-74.00505,40.70876],[-74.00513,40.70885],[-74.00524,40.70893],[-74.00532,40.70899],[-74.00547,40.70909],[-74.00643,40.70956],[-74.00705,40.70987],[-74.00774,40.71022],[-74.00906,40.71089],[-74.01046,40.71153],[-74.01013,40.71209],[-74.00967,40.71274],[-74.00927,40.71326],[-74.00902,40.71359],[-74.00885,40.71381],[-74.0084,40.71437],[-74.00795,40.71494],[-74.00755,40.71544],[-74.00882,40.71602],[-74.0092,40.71619],[-74.00911,40.71692],[-74.00906,40.71726],[-74.009,40.7176],[-74.00894,40.71793],[-74.00888,40.71827],[-74.00882,40.71864],[-74.00875,40.71903],[-74.0087,40.7193],[-74.00858,40.71996],[-74.00847,40.72065],[-74.00842,40.72089],[-74.00837,40.7212],[-74.00834,40.72133],[-74.00823,40.72198],[-74.00812,40.72264],[-74.00801,40.72328],[-74.00795,40.72365],[-74.00793,40.72376],[-74.00786,40.72382],[-74.00777,40.72388],[-74.00773,40.72392],[-74.00771,40.72393],[-74.00745,40.72412],[-74.00736,40.72417],[-74.00728,40.72424],[-74.00723,40.72429],[-74.0071,40.72441],[-74.00703,40.7245]]}", "linkIds" : [ 238135, 69834, 69856, 187992, 39327, 39328, 18867, 189084, 189085, 189086, 189087, 142716, 142717, 142718, 142719, 142720, 193362, 193363, 54588, 54589, 54657, 153376, 68912, 61331, 61332, 177603, 177604, 177605, 177606, 177607, 106801, 96723, 96724, 96725, 96726, 65028, 176816, 176817, 65012, 65013, 65014, 65015, 261314, 261315 ], "nodeIds" : [ 42427254, 42427256, 42440356, 3350498747, 42452620, 42457292, 42444271, 42440270, 42440271, 673008453, 42440278, 42440280, 42440282, 42440284, 42440287, 42428385, 42440290, 42453943, 42453952, 42430004, 42429562, 42449597, 42431611, 42445356, 42445357, 42436322, 42430571, 42430529, 42429833, 42436326, 42436327, 42436330, 42436333, 42436335, 42436336, 42424610, 1104165608, 42436308, 42424408, 42436340, 42436014, 4142105822, 42424619, 42424630, 42423514 ], "startIndex" : 0, "startPercentage" : 0.28, "endIndex" : 43, "endPercentage" : 0.93 }, "unit" : "meter" }
縮約階層モデルの管理
縮約階層モデルは、データベース内の任意のSpatialネットワーク・データ・モデルから作成できます。それぞれのモデルは、特定のディレクトにファイルのセットとして保存されます。
モデルの作成後に、そのモデルをメモリーにロードして、分析を実行できます。
縮約階層分析
次に示すように、複数の縮約階層分析ファンクションがサポートされています。
- 最短パス: 2点間の最短パス
- マルチストップ最短パス: 一連の点間の最短パス
- コスト・マトリックス: マトリックス形式(N×M)の始点Nから終点Mまでのコスト
- 巡回セールスマン・パス: 所定のすべての点を訪れる最短パス
- 代替パス: パスの重複が特定の割合を超過しないK個の代替パス
- セカンダリ・コスト: パスの使用可能なすべてのセカンダリ・コストを取得します。
パス・ジオメトリなどの追加の分析情報は、REST APIを使用して取得することもできます。
縮約階層REST APIの使用
縮約階層REST APIを利用するアプリケーションの開発には、次のステップを使用できます。
-
縮約階層のearファイル(chrest.ear)をJ2EEコンテナにデプロイします。
これにより、REST APIを処理する縮約階層サービスをデプロイします。
-
データベースのSpatial Network Data Modelモデルから縮約階層モデルを作成し、縮約階層モデルをファイル・システムに格納します。
-
縮約階層モデルをメモリーにロードして、分析を実行します。
chrest.ear
ファイルには、REST APIの使用方法を示すデモも付随しています。このデモを使用する場合は、次のURLに移動します。
https://<host>:<port>/chrest/
Contraction Hierarchies Web Demo (縮約階層Webデモ)のメイン・ページでは、ファイルに格納された論理および空間ネットワーク・データを問い合せて、Spatial Network Data Modelの分析ファンクションを実行できます。
このデモでは、次のリンクを使用できます。
- Documentation & Schema (ドキュメントとスキーマ)
- Contraction Hierarchies Network Analysis (縮約階層ネットワーク分析)
- Visualization Demo (視覚化デモ)
- 構成
REST APIリファレンス情報
縮約階層サポート用のREST APIに関する参照情報は、REST API for Oracle Spatialを参照してください。
親トピック: ネットワーク・データ・モデルの概要