GP サービス サンプル:道路ネットワークの最短ルート
フォルダ |
ShortestRoute |
目的 |
道路ネットワーク上の指定されたポイント間の最短ルートを作成し、テキストまたは HTML ファイルでルート案内を生成します。 |
サービス |
|
ジオプロセシング タスク |
|
入力 |
ユーザがデジタイズした複数のポイント。 |
出力 |
|
データ |
ToolData フォルダで提供されるサンフランシスコ エリアの道路ネットワーク データセット。 |
エクステンション |
|
備考 |
|
対応するフォルダ
C:\arcgis\ArcTutor\GP Service Examples\ShortestRoute に完全なモデルとデータが含まれています。
このサンプルについて
このサンプルで作成される ShortestRouteService は、道路ネットワーク上でユーザが指定したポイント間の最短ルートを計算し、ルート案内が含まれたファイルを生成する、ジオプロセシング タスクの公開方法を示します。Calculate Shortest Route and Text Directions タスクは、ルート案内をテキスト ファイルで生成し、Calculate Shortest Route and HTML Directions タスクは、ルート案内を HTML ファイルで生成します。どちらのタスクも最短ルートをフィーチャ セットとして出力します。
![]() |
Calculate Shortest Route and Text Directions タスクの出力例 |
データ
このサンプルのデータは、C:\arcgis\ArcTutor\GP Service Examples\ShortestRoute にあります。
![]() |
ShortestRoute フォルダの内容 |
ネットワーク データセット
ToolData フォルダには、ファイル ジオデータベース SanFrancisco.gdb が含まれています。このジオデータベースの Transportation フィーチャ データセットには、ネットワーク データセット Streets_ND が含まれています。このネットワーク データセットは、サンフランシスコ エリアの道路ネットワークをモデリングし、ネットワーク属性 TravelTime(各道路セグメントの走行時間(分)を示す)を提供します。
ベースマップ
SanFranciscoBaseMap.mxd 内のベースマップ レイヤには Streets というレイヤが 1 つ含まれています。このレイヤは、ネットワーク データセットの範囲を示します。つまり、このタスクを使用して、この範囲内でのみ最短ルートを決定することができます。
![]() |
ネットワーク データセットの範囲を示すサンフランシスコのベースマップ |
SanFranciscoBaseMap.mxd はマップ サービスとして公開されます。
ツールボックスとマップ ドキュメント
ジオプロセシング サービスのツールボックスは ShortestRouteService であり、サービスのソース マップ ドキュメントは ShortestRouteService.mxd です。ShortestRouteService には、2 つのモデルとスクリプト ツール Convert directions to HTML が含まれています。このスクリプト ツールは、Calculate Shortest Route and HTML Directions モデル内で使用されます。ShortestRouteService.mxd には、Streets_ND(ネットワーク データセット)と Route(ネットワーク解析レイヤ)の 2 つのソース データ レイヤが含まれています。
モデル
モデルの概要
Calculate Shortest Route and Text Directions モデルは次のようになります。入力パラメータ Input Stops はポイントです。最短ルートは、デジタイズされた順序に基づいて各ストップを訪れます。モデルは、ユーザがデジタイズしたポイントをストップとして既存の Route ネットワーク解析レイヤに追加し、解析を実行して最短ルートを決定し、ルート案内を生成して、それらをテキスト ファイルに書き出します。
![]() |
既存のネットワーク解析レイヤの使用
DriveTimePolygonsService サンプルのネットワーク解析レイヤがあるので、このモデルではネットワーク解析レイヤを作成しません。代わりに、既存の Route レイヤを使用します(このレイヤは [ルート レイヤの作成(Make Route Layer)] ツールを使用して作成されています)。既存のレイヤを使用できるのは、インピーダンス属性といった Route レイヤの解析プロパティがモデル パラメータとして提供されないためです。DriveTimePolygonsService サンプルでは、デフォルトの閾値(到達圏レイヤの解析プロパティ)がモデル パラメータとして提供されるため、モデル プロセスとして [到達圏レイヤの作成(Make Service Area Layer)] ツールが必要でした。
インピーダンス属性といったルート解析プロパティが 1 つでもモデル パラメータとして提供される場合は、モデルの最初のプロセスとして [ルート レイヤの作成(Make Route Layer)] ツールを使用する必要があることに注意してください。
モデルの入力変数として使用される Route レイヤは、まず Streets_ND ネットワーク データセットを ShortestRouteService.mxd に追加し、次に [ルート レイヤの作成(Make Route Layer)] ツールを使用して作成されています。このサンプルでは、[ルート レイヤの作成(Make Route Layer)] ツールで以下のパラメータが使用されています。この表にないパラメータについてはデフォルト値が使用されています。
パラメータ |
値 |
入力ネットワーク データセット |
Streets_ND |
出力レイヤ名 |
ルート |
インピーダンス属性 |
TravelTime |
累積 |
TravelTime;Meters |
U ターン ポリシー |
ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY |
![]() |
ルート レイヤの作成 |
モデル プロセス
[ロケーションの追加(Add Locations)] ツールは、ユーザがデジタイズしたポイントをストップとして Route レイヤに追加します。このツールの [入力ロケーション] パラメータは、モデル パラメータ Input Stops を通じて指定されます。このパラメータはフィーチャ セット データ タイプです。フィーチャ セットのスキーマとシンボルは、ToolData フォルダにある InputStops.lyr ファイルから取得されます。
Input Stops フィーチャ セットのスキーマには、Name というテキスト フィールドが含まれています。[フィールドの割り当て] で Name プロパティを Name フィールドにマッピングすることにより、ルート案内の生成時にこのフィールドを使ってストップ名を提供することができます。Name フィールドの値がユーザによって指定されない場合は、Location 1、Location 2 などのデフォルト値がストップ名に使用されます。
モデルを実行するたびに同じ Route レイヤが使用されるため、新しいストップを追加する前に既存のストップを削除する必要があります。既存のストップを削除するには、[既存のロケーションを追加] チェックボックスをオフにします。
![]() |
ストップの追加 |
[解析の実行(Solve)] ツールは、Route レイヤで指定された TravelTime ネットワーク属性と他のオプションに基づいて最短ルートを計算します。計算されたルートは、出力 Route レイヤの Routes サブレイヤに書き出されます。
ネットワーク解析レイヤ(Route など)は、ArcGIS Server クライアントでサポートされる出力パラメータ データ タイプではありません。そのため、Route レイヤからの Routes サブレイヤの取得には [データの選択(Select Data)] ツールを使用します。
[ルート案内(Directions)] ツールは、ルート案内を生成し、それらをテキスト ファイルに出力するために使用されます。%scratchworkspace% インライン変数を使用して、ルート案内が含まれた出力テキスト ファイルをサーバ上のジョブ ディレクトリに作成します。[解析の実行(Solve)] ツールから出力された SolveSucceeded 変数は、[ルート案内(Directions)] ツールの前提条件として使用されます。つまり、ルート案内ファイルは、[解析の実行(Solve)] ツールが入力ポイント間のルートを検出できた場合のみ生成されます。
![]() |
ルート案内の生成 |
ツール レイヤ
Calculate Shortest Route and Text Directions ツール レイヤは、Calculate Shortest Route and Text Directions モデルを ArcMap のコンテンツ ウィンドウにドラッグすることにより作成されます。モデルは既存の Route レイヤを更新するため、ツール レイヤ出力はコンテンツ ウィンドウの Route レイヤ内の Routes サブレイヤからシンボルを取得します。
![]() |
ツール レイヤのシンボル |
公開
SanFranciscoBaseMap.mxd はマップ サービスとして公開されます。ShortestRouteService.mxd は、結果マップ サービスに基づかないジオプロセシング サービスとして公開されます。
- カタログ ウィンドウで、SanFranciscoBaseMap.mxd を右クリックして [ArcGIS Server で公開] をクリックします。
- すべてデフォルト設定を使用します。
- カタログ ウィンドウで、[GIS Servers] ノードの下のサーバ管理者接続に移動して右クリックし、[新規サービスの追加] を選択します。サービスの名前として ShortestRouteService を指定し、タイプとして [Geoprocessing Service] を選択します。
- [次へ] をクリックします。
- 次のパネルでは、[実行方法] で [同期] を選択します。[ジオプロセシング サービスで公開されているツールの格納場所] オプションでは、[マップ] を選択し、[マップ ドキュメント] で ShortestRouteService.mxd を指定します。サービスをテストするので、[メッセージの表示] をオンにします。ShortestRouteService の公開
- [次へ] をクリックします。ここからは、ウィザードによって提供されるデフォルト値を使ってサービスを作成することができます。
使用
- ArcMap を空のドキュメントで開始します。
- ArcGIS Server へのユーザ接続が存在しない場合は、カタログ ウィンドウで作成します。
- ArcMap のコンテンツ ウィンドウに SanFranciscoBaseMap マップ サービスを追加します。
- カタログ ウィンドウの [GIS Servers] ユーザ接続ノードの下にある ShortestRouteService ツールボックスを展開し、Calculate Shortest Route and Text Directions ツールを開きます。結果は次のようになります。
- 複数のポイントを追加してストップを作成します。必要に応じて、各ストップの名前を指定し、[OK] をクリックしてタスクを実行します。
タスクが完了すると、コンテンツ ウィンドウに Shortest Route 出力レイヤが表示されます。入力ストップはタスクから出力されるのではなく、[結果] ウィンドウの [入力] ノードからコンテンツ ウィンドウに追加されます。
タスクの結果 - ルート案内が含まれたテキスト ファイルがサーバ上のジョブ ディレクトリから現在の ArcMap セッションのテンポラリ ワークスペースにコピーされます。ルート案内が含まれたテキスト ファイルは、[結果] ウィンドウでダブルクリックすると表示できます。ルート案内ファイルの表示
HTML ルート案内の生成
Calculate Shortest Route and Text Directions モデルで使用される [ルート案内(Directions)] ツールは、テキストまたは XML 形式でルート案内を生成することができます。Python スクリプトを使ってスタイル シートを適用することにより、XML 形式のルート案内を適切な形式の HTML ファイルに変換することができます。ルート案内を XML から HTML 形式に変換するには、ShortestRoute フォルダ内の Scripts フォルダにある ApplyStyleSheet.py スクリプトを使用します。Scripts フォルダには、HTML ファイルの形式を指定するスタイル シート ファイル Dir2WebDocumentNoMaps.xsl も含まれています。
![]() |
Scripts フォルダの内容 |
外部 Python ライブラリのインストール
ApplyStyleSheet.py スクリプトは外部 Python ライブラリ libxml2 を使用します。このライブラリは ArcGIS に同梱されておらず、Esri によってサポートされません。これは外部のサードパーティ ソフトウェアです。このライブラリをダウンロードして、ArcGIS Server SOC コンピュータにインストールする必要があります。http://xmlsoft.org/sources/win32/python/ にアクセスして、Python 2.6 の最新の libxml2 セットアップ(たとえば、libxml2-python-2.7.4.win32-py2.6.exe など。以前のバージョンではうまくいかないことがあります)をダウンロードします。ダウンロードが完了したら、実行可能ファイルをダブルクリックしてライブラリをインストールします。
スクリプト ツールの作成
モデルで ApplyStyleSheet.py スクリプトを使用するために、ShortestRouteService ツールボックスに Convert Directions to HTML という名前のスクリプト ツールが追加されます。このスクリプト ツールは、スタイル シート ファイルと XML ファイルを入力として受け取り、出力 HTML ファイルを生成します。
![]() |
スクリプト ツールの追加 |
モデルへのスクリプト ツールの追加
Convert Directions to HTML スクリプト ツールを追加するために、Calculate Shortest Route and Text Directions モデルは Calculate Shortest Route and HTML Directions として再度保存されます。このモデルでは、[ルート案内(Directions)] ツールの出力ファイル タイプ パラメータが XML に変更されます。この XML ファイルと Dir2WebDocumentNoMaps.xsl ファイルは、スクリプト ツールの入力変数として使用されます。%scratchworkspace% インライン変数を使用すると、出力 HTML ファイルがサーバ上のジョブ ディレクトリに書き出されます。
![]() |
公開と使用
Calculate Shortest Route and HTML Directions モデルは、前に作成した ShortestRouteService ジオプロセシング サービス内の新しいタスクとして公開することができます。
- ShortestRouteService.mxd に Calculate Shortest Route and HTML Directions ツール レイヤを作成します。そのためには、Calculate Shortest Route and HTML Directions モデルをカタログ ウィンドウから ArcMap のコンテンツ ウィンドウにドラッグします。
- ShortestRouteService.mxd を保存します。
- カタログ ウィンドウで、ShortestRouteService ジオプロセシング サービスを一度停止してから再開します。
これにより、ShortestRouteService サービスに Calculate Shortest Route and HTML Directions という 2 つ目のタスクが追加されます。このタスクは Calculate Shortest Route and Text Directions タスクと似ていますが、ルート案内を HTML 形式で生成します。
![]() |
HTML 形式のルート案内 |