ルート検索(FindRoutes) (ルート)
サマリ
[ルート検索(FindRoutes)] は、入力パスを訪問するための最短パスを判定し、ルート案内、訪問先ストップの情報、および移動時間と距離を含むルート パスを返します。
このツールには、複数の入力ストップを事前定義された順序または全体の移動を最小化する順序で訪問するルートを検索する機能があります。[RouteName] フィールドを使用すると、入力ストップを複数のルートにグループ化できます。また、ストップの各グループに対して 1 つのルートを出力して、1 回の解析処理で多くの車両のルートを生成できます。
![注意 注意](rsrc/note.png)
図
![]() |
使用法
-
このツールは、[Measurement Units] パラメータの値が時間ベースの場合は移動時間、距離ベースの場合は移動距離に基づいて最短ルートを検索します。
-
ツールを正しく実行するには、ストップを少なくとも 2 つ指定する必要があります。最大で 10,000 のストップを読み込み、1 つのルートに最大 150 のストップを割り当てることができます。
-
最大で 250 のポイント バリアを追加できます。ライン バリアまたはポリゴン バリアは必要なだけ追加できますが、ライン バリアが交差する道路フィーチャは 500 以下にする必要があり、ポリゴン バリアが交差するフィーチャは 2,000 以下にする必要があります。
-
結果を短時間で生成できるように、解析時に実際のルートではなく道路階層を使用することもできます。ただし、ソリューションの精度は最適な結果よりもやや劣ります。
-
[Use Hierarchy] パラメータがオン(True)であるかどうかにかかわらず、ストップのペア間の直線距離が 50 マイル(80.46 キロメートル) を超えている場合は、常に階層が使用されます。
-
入力したポイントと通行可能な最も近い道路の距離が 12.42 マイル(20 キロメートル)を超える場合、そのポイントは解析から除外されます。
構文
パラメータ | 説明 | データ タイプ |
Stops |
ルート検索の対象となる複数のストップを指定します。1 つのルートに最大 10,000 ストップを追加し、最大 150 ストップを割り当てることができます(RouteName 属性を使用して、ストップをルートに割り当てます)。 ストップを指定する際は、属性を使用してストップごとにプロパティ(名前やサービス時間)を設定できます。ストップには、次の属性を指定できます。 Name - ストップの名前。この名前は、ルート案内に使用されます。名前を指定しない場合は、出力ストップ、ルート、およびルート案内において接頭辞 Location が付いた一意な名前が自動的に生成されます。 RouteName - ストップが割り当てられるルートの名前。同じルート名を異なるストップに割り当てると、それらのストップがグループ化され、同じルートで訪問されるようになります。一意のルート名をストップの異なるグループに割り当てることで、1 回の解析で多くのルートを生成できます。このツールでは、最大 150 のストップを 1 つのルートにグループ化できます。 Sequence - 出力ルートは、この属性で指定した順序でストップを訪問します。RouteName 値が同じストップのグループ内では、シーケンス値は 0 より大きく、ストップの合計数以下である必要があります。また、シーケンス値は重複してはなりません。 [ストップを並べ替えて最適ルートを検出] をオン(True)にすると、各ルート名の最初と最後の値を除くすべての値が無視されるため、ツールは、各ルートの全体の移動を最小化する順序を見つけることができます([ストップの順番を維持] および [スタートに戻る] の設定は、各ルートの最初と最後の値を無視するかどうかを決定します)。 AdditionalTime - ストップで費やされる時間の長さ。これは、ルートの合計時間に追加されます。この属性値の単位は、[Measurement Units] パラメータで指定されます。計測単位が時間ベースである場合に限り、この属性値が解析に含められます。デフォルト値は 0 です。 機器の修理、パッケージの配達、前提の検査など、タスクを完了するためにストップでかかるその他の時間を考慮できます。 AdditionalDistance - ストップで移動する追加の距離。これは、ルートの合計距離に追加されます。この属性値の単位は、[Measurement Units] パラメータで指定されます。計測単位が距離ベースである場合に限り、この属性値が解析に含められます。デフォルト値は 0 です。 通常、ストップの場所(家など)は厳密には道路に接していません。道路から多少離れて配置されています。ストップの実際の場所と道路に接した場所の間の距離を合計移動距離に含めることが重要である場合は、この属性値を使用してその距離をモデル化できます。 TimeWindowStart - ストップに訪問できる最も早い時刻。この値は、8/12/2015 12:15 PM のように日時で指定してください。ストップのタイム ウィンドウの開始時間と終了時間を指定することで、ルートでストップを訪問する時刻を定義します。[タイム ウィンドウを使用] がオンで、[使用する単位] に時間ベースを選択している限り、ツールは全体の移動を最小化し、指定のタイム ウィンドウ内にストップに到着するソリューションを解析します。 解析が複数のタイム ゾーンにまたがる場合、タイム ウィンドウ値はそのストップが属しているタイム ゾーンの日時を表します。 このフィールドには NULL 値を含めることができます。NULL 値は、TimeWindowEnd 属性で指定された値より前の任意の時間に到着できることを示しています。TimeWindowEnd も NULL 値である場合は、ストップに任意の時間に訪問できます。 TimeWindowStart - ストップに訪問できる最も遅い時刻。この値は、8/12/2015 12:15 PM のように日時で指定してください。ストップのタイム ウィンドウの開始時間と終了時間を指定することで、ルートでストップを訪問する時刻を定義します。[タイム ウィンドウを使用] がオンで、[使用する単位] に時間ベースを選択している限り、ツールは全体の移動を最小化し、指定のタイム ウィンドウ内にストップに到着するソリューションを解析します。 解析が複数のタイム ゾーンにまたがる場合、タイム ウィンドウ値はそのストップが属しているタイム ゾーンの日時を表します。 このフィールドには NULL 値を含めることができます。NULL 値は、TimeWindowStart 属性で指定された値より後の任意の時間に到着できることを示しています。TimeWindowStart も NULL 値である場合は、ストップに任意の時間に訪問できます。 CurbApproach - 車両がストップに到着する方向およびストップから出発する方向を指定します。このフィールド値は、次のいずれかの整数として指定されます(括弧で囲まれた名前ではなく、数値コードを使用します)。
[CurbApproach] プロパティは、米国の右側通行の標準と英国の左側通行の標準の両方に対応するように設計されています。まず、ストップが車両の左側にあるとします。これは、車両が移動するのが道路の左側であるか右側であるかに関係なく、常に左側にあります。右側通行か左側通行かに応じて異なるのは、2 つの方向のうちどちらからストップに到着するかです。つまり、結局のところ車両の右側または左側になります。たとえば、ストップに到着するときに、車両とストップの間に交通レーンがないほうがいい場合は、米国では [車両の右側](1)を選択し、英国では [車両の左側](2)を選択します。 | Feature Set |
Measurement_Units |
出力ルートの合計移動時間または合計距離を計測およびレポートするときに使用される単位を指定します。 このパラメータに選択する単位によって、最適なルートを検出するときに移動距離が計測されるか、移動時間が計測されるかが決まります。運転時間を最小化する場合は、時間の単位を選択します。走行距離を最小化する場合は、距離の単位を選択します。結果にレポートされる運転時間または走行距離の合計の単位も、この選択によって決まります。これには次の選択肢があります。
| String |
Analysis_Region (オプション) |
解析を実行する地域を指定します。このパラメータに値を指定しない場合、入力ポイントの位置に基づいて地域名が自動的に計算されます。ツールの実行速度を上げるため、地域名を設定することをお勧めします。地域を指定するには、次のいずれかの値を使用します。
| String |
Reorder_Stops_to_Find_Optimal_Routes (オプション) |
定義した順序、またはツールが全体の移動を最小化すると判断した順序のどちらでストップに訪問するかを指定します。
最適なストップ順序と最適なルートの検索は、一般に、巡回セールスマン問題(Traveling Salesman Problem: TSP)の解析と呼ばれています。 | Boolean |
Preserve_Terminal_Stops (オプション) |
[ストップを並べ替えて最適ルートを検出] がオン(または True)の場合、最初と最後のストップを維持して、残りの順序を変更できます。 最初と最後のストップは、Sequence 属性値によって決定されます。Sequence 値が NULL の場合、ObjectID 値によって決定されます。
[ストップを並べ替えて最適ルートを検出] がオフ(または False)の場合、[ターミナル ストップを維持] は無視されます。 | String |
Return_to_Start (オプション) |
ルートを同じ位置で開始および終了するかどうかを選択します。このオプションを使用すると、最初のストップ フィーチャを複製して、複製したストップを最後に配置する必要がなくなります。 ルートの開始位置は、Sequence 属性の値が最も低いストップ フィーチャです。Sequence 値が NULL の場合、ObjectID 値が最低のストップ フィーチャになります。
| Boolean |
Use_Time_Windows (オプション) |
ルートでストップに到着する時刻が入力ストップのタイム ウィンドウで指定されている場合、このオプションをオンにします(または、True に設定します)。TimeWindowStart および TimeWindowEnd 属性に時間を入力することで、入力ストップにタイム ウィンドウを追加できます。
[Use Time Windows] がオン(または True)の場合、入力ストップにタイム ウィンドウがなくても、ツールの実行に少し時間がかかります。そのため、可能な場合は、このオプションをオフ(False に設定)することをお勧めします。 | Boolean |
Time_of_Day (オプション) |
ルートの開始の日時を指定します。このパラメータの値として現在の日時を指定すると、ライブ交通状況を使用して最適なルートが検出され、合計移動時間は交通状況に基づくものとなります。 時刻を指定すると、ルートと移動時間の推定がより正確になります。これは、その日時に該当する交通状況が移動時間に考慮されるためです。 [時刻のタイム ゾーン] パラメータは、この日時が UTC を参照するか、ストップの場所のタイム ゾーンを参照するかを指定します。 [使用する単位] が時間ベース単位に設定されていない場合、このパラメータは無視されます。 | Date |
Time_Zone_for_Time_of_Day |
[Time of Day] パラメータのタイム ゾーンを指定します。
| String |
UTurn_at_Junctions (オプション) |
ジャンクションでの U ターン ポリシー。U ターンを許可するということは、解析においてジャンクションで方向転換し、同じ道路を引き返すことができるということを意味します。 ジャンクションが道路の交差と行き止まりを表すことを前提に、さまざまな車両が、一部のジャンクションでは方向転換でき、他のジャンクションでは方向転換できない、というように設定できます。これは、ジャンクションが交差と行き止まりのどちらを表すかによって変わります。これに対応するには、ジャンクションに接続するエッジや道路の数(ジャンクションでのノードへの接続数)によって、暗黙的に U ターン ポリシーを指定します。以下では、このパラメータで選択できる値と、ジャンクションので接続におけるそれぞれの意味について示します。
| String |
Point_Barriers (オプション) |
一時的な規制として機能する 1 つ以上のポイント、または対象の道路を通行するために必要とされる追加の時間や距離を表す 1 つ以上のポイントを指定します。たとえば、ポイント バリアを使用して、道路沿いの倒木や、踏切で生じる遅延時間を表すことができます。 このツールでは、バリアとして追加できるポイントの数は 250 に制限されています。 ポイント バリアを指定する場合は、属性を使用して、各ポイント バリアのプロパティ(ポイント バリアの名前やバリアの種類など)を設定できます。ポイント バリアには、次の属性を指定できます。 Name: バリアの名前。 BarrierType: ポイント バリアの通過を完全に禁止するか、通過時に時間または距離を追加するかを指定します。この属性の値は、次のいずれかの整数として指定されます(括弧で囲まれた名前ではなく、数値コードを使用します)。
Additional_Time: バリアを通過するときに追加される移動時間の値を指定します。このフィールドは、追加コスト バリアにのみ適用されます。しかも、計測単位が時間ベースである場合に限られます。このフィールドには 0 以上の値を指定する必要があります。単位は [Measurement Units] パラメータで指定した単位と同じです。 Additional_Distance: バリアを通過するときに追加される距離の値を指定します。このフィールドは、追加コスト バリアにのみ適用されます。しかも、計測単位が距離ベースである場合に限られます。このフィールドには 0 以上の値を指定する必要があります。単位は [Measurement Units] パラメータで指定した単位と同じです。 | Feature Set |
Line_Barriers (オプション) |
道路と交差しているラインの場所を移動できないようにする 1 つ以上のラインを指定します。たとえば、複数の道路区間にわたって通行禁止となるパレードやデモを表すときに通過不可ライン バリアを使用します。また、ライン バリアを使用すれば、道路網の特定の区間を迂回して利用できる経路をすばやく見つけることができます。 このツールでは、[Line Barriers] パラメータを使用して規制できる道路の数に制限があります。ライン バリアとして指定できるラインの数に制限はありませんが、すべてのラインと交差する道路の総数が 500 を超えることはできません。 ライン バリアを指定する場合は、次の属性を使用して、各ライン バリアの名前プロパティを設定できます。 Name: バリアの名前。 | Feature Set |
Polygon_Barriers (オプション) |
通過を完全に禁止するポリゴン、またはそのポリゴンと交差する道路を移動するときに時間または距離が係数に基づいて乗算されるポリゴンを指定します。 このサービスでは、[Polygon Barriers] パラメータを使用して規制できる道路の数に制限があります。ポリゴン バリアとして指定できるポリゴンの数に制限はありませんが、すべてのポリゴンと交差する道路の総数が 2,000 を超えることはできません。 ポリゴン バリアを指定する場合は、属性を使用して、各ポリゴン バリアのプロパティ(ポリゴン バリアの名前やバリアの種類など)を設定できます。ポリゴン バリアには、次の属性を指定できます。 Name: バリアの名前。 BarrierType: バリアの通過を完全に禁止するか、バリアを通過する際の時間または距離を係数に基づいて計算するかを指定します。このフィールド値は、次のいずれかの整数として指定されます(括弧で囲まれた名前ではなく、数値コードを使用します)。
ScaledTimeFactor: これは、バリアが交差している道路の移動時間に乗算する係数です。このフィールドは、コスト係数指定バリアにのみ適用されます。しかも、計測単位が時間ベースである場合に限られます。このフィールドには 0 より大きい値を指定する必要があります。 ScaledDistanceFactor: これは、バリアが交差している道路の距離に乗算する係数です。この属性は、コスト係数指定バリアにのみ適用されます。しかも、計測単位が距離ベースである場合に限られます。この属性には 0 より大きい値を指定する必要があります。 | Feature Set |
Use_Hierarchy (オプション) |
ストップ間の最短パスを検索するときに階層を使用するかどうかを指定します。
施設と需要地点の間の直線距離が 50 マイル(80.46 キロメートル) を超える場合は、階層を使用しないようにこのパラメータを設定していても、自動的に階層が使用されます。 | Boolean |
Restrictions (オプション) |
最適なルートを検索する際に、従う必要がある規制を指定します。規制は、運転上の優先事項や要件を表します。ほとんどの場合、規制により道路は通行禁止になりますが、回避または優先する道路に指定することもできます。たとえば、[Avoid Toll Roads] の規制を使用すると、ルートに有料道路が含まれるのは、ストップを訪問するために有料道路の使用が不可欠な場合のみになります。[Height Restriction] は、車両の高さより低い車高規制の場所を迂回できるようにします。車両に腐食性物質を積載している場合は、[Any Hazmat Prohibited] の規制を使用して、腐食性物質の運搬が法律で禁止されている道路の通行を回避します。 以下に、利用可能な規制のリストと簡単な説明を示します。
![]() 一部の規制では、目的の用途に関する追加の値を指定する必要があります。この値は、規制の名前、および規制に対応させることを意図している特定のパラメータに関連付ける必要があります。[Attribute Parameter Values] パラメータの [AttributeName] 列の下に規制の名前が表示されている場合、その規制を識別できます。通行可能な道路を検索するときに、規制が正しく使用されるように、規制に対応する [Attribute Parameter Values] パラメータ内で [ParameterValue] フィールドを指定する必要があります。
![]() 一部の規制は、特定の国でのみサポートされます。それらの規制の利用可否は、次のリスト内で地域ごとに記述されています。領域内で規制の利用可否が制限されている場合、ネットワーク解析サービスのデータ提供範囲に関する Web ページの国リストのセクションにあるテーブルを参照して、規制が特定の国で利用できるかどうかを確認できます。国の Logistics Attribute 列に Yes という値が指定されている場合、領域内で選択可能である規制は、その国でサポートされています。解析を行う範囲の国で利用できない規制の名前を指定した場合、無効な規制はサービスによって無視されます。また、[Restriction Usage] パラメータの値が 0 ~ 1 の範囲内にある規制も、サービスによって無視されます([Attribute Parameter Value] パラメータを参照)。[Restriction Usage] パラメータの値が 0 より大きいすべての規制は禁止されます。 ツールは、次の規制をサポートしています。
| String |
Attribute_Parameter_Values (オプション) |
いくつかの規制に必要な追加の値を指定します。たとえば、[Weight Restriction] に対する車両の重量などです。この属性パラメータを使用して、規制を使用する道路上の移動が、規制によって禁止されるか、回避されるか、優先されるかを指定することもできます。規制が道路を回避または優先するためのものである場合は、このパラメータを使用して道路が回避または優先される度合いも指定できます。たとえば、有料道路を決して使用しないこと、できるだけ避けること、または可能な限り優先することを選択できます。 フィーチャクラスから [Attribute Parameter Values] パラメータを指定する場合は、フィーチャクラスのフィールド名が、次に説明するフィールドと一致する必要があります。 AttributeName: 規制の名前のリスト。 ParameterName: 規制に関連付けられたパラメータの名前のリスト。規制は、その使用目的に基づいて、1 つまたは複数の ParameterName フィールド値を持つことができます。 ParameterValue: 規制を評価するときにツールによって使用される ParameterName の値。 [Attribute Parameter Values] は、[Restrictions] パラメータに依存します。[ParameterValue] フィールドは、規制の名前が [Restrictions] パラメータの値として指定されている場合に限り適用できます。 [Attribute Parameter Values] では、[AttributeName] で指定した各規制の [ParameterName] フィールドに [Restriction Usage] という値があります。この値は、規制に関連付けられた道路での移動を禁止、回避、または優先するかどうか、および道路を回避または優先する場合のレベルを指定します。[ParameterName] フィールドの [Restriction Usage] の値には、次のいずれかの文字列、またはそれぞれの括弧に示した数値を割り当てることができます。
ほとんどの場合、車両の特徴(車両の高さなど)に依存する規制であれば、[Restriction Usage] にデフォルト値(PROHIBITED)を使用できます。ただし、[Restriction Usage] の値がルートの優先度に依存している場合もあります。たとえば、[Avoid Toll Roads] の規制では、[Restriction Usage] パラメータのデフォルト値は [AVOID_MEDIUM] になります。つまり、この規制を使用すると、可能な場合は有料道路を回避するルートが検索されます。また、[AVOID_MEDIUM] は、最適なルートを検索する際に有料道路を回避することの重要度も表しています(中程度の優先度)。[AVOID_LOW] を選択すると、有料道路を回避する重要度が下がります。AVOID_HIGH を選択すると重要度が上がり、有料道路を回避するためにより長い距離のルートも生成可能になります。[PROHIBITED] を選択すると有料道路の通行は完全に禁止され、ルートでは有料道路のいずれの部分も通行できなくなります。有料道路を回避または禁止する(つまり、料金の支払いを避ける)ことが目的となる場合もありますが、運転手によっては、通行料を払うよりも渋滞を避けることに価値があると考えて、有料道路の使用を優先する場合もあります。後者の場合は、[Restriction Usage] として [PREFER_LOW]、[PREFER_MEDIUM]、または [PREFER_HIGH] を選択できます。優先度が高いほど、規制に関連付けられている道路を通行するために遠回りするようになります。 | Record Set |
Route_Shape (オプション) |
ツールによって出力されるルート フィーチャのタイプを指定します。このパラメータは、次のいずれかの値を使用して指定できます。
[Route Shape] パラメータが [正確な形状] に設定されている場合は、[Route Line Simplification Tolerance] パラメータの適切な値を使用して、ルートの形状の一般化をさらに制御できます。 [Route Shape] パラメータにどのような値を選択しても、最適ルートは常に、ストップ間の直線距離を使用するのではなく、移動時間または移動距離を最小化することで決定されます。つまり、ルート形状が異なるだけで、ルート検索時に対象となる道路は同じであることを意味します。 | |
Route_Line_Simplification_Tolerance (オプション) |
ルート、ルート案内、およびルート エッジの出力ラインのジオメトリをどの程度単純化するを指定します。 [Route Shape] パラメータが [正確な形状] に設定されていない場合、このパラメータは無視されます。 単純化では、ルートの基本形状を定義する、交差点での右左折といったルート上の重要ポイントが保持され、それ以外のポイントが削除されます。ここで指定する単純化の距離は、単純化されたラインの元のラインからの逸脱として認められる、最大許容オフセットです。ラインの単純化では、ルート ジオメトリを構成する頂点の数が削減されます。これにより、ツールの実行時間が短縮されます。 | Linear unit |
Populate_Route_Edges (オプション) |
各ルートに対してエッジを生成するかどうかを指定します。ルート エッジは、ルートが通過する個別の道路フィーチャまたはその他の類似フィーチャを表します。出力ルート エッジ レイヤは一般的に、結果のルートで最も多く/少なく利用される道路を確認するために使用されます。
| |
Populate_Directions (オプション) |
各ルートに対してルート案内を生成するかどうかを指定します。
| Boolean |
Directions_Language (オプション) |
ルート案内を生成する際に使用する言語を指定します。 このパラメータは、[Populate Directions] パラメータがオンであるか、True に設定されている場合にのみ使用されます。 パラメータ値は、次の 2 文字または 5 文字の言語コードのいずれかを使用して指定できます。
サポートされていない言語コードを指定すると、デフォルトの言語である英語を使用するルート案内が返されます。 | String |
Directions_Distance_Units (オプション) |
ルート案内で移動距離を表示する単位を指定します。このパラメータは、[Populate Directions] パラメータがオンであるか、True に設定されている場合にのみ使用されます。
| String |
Directions_Style_Name (オプション) |
ルート案内の書式スタイルの名前を指定します。このパラメータは、[Populate Directions] パラメータがオンであるか、True に設定されている場合にのみ使用されます。パラメータには、次のいずれかの値を指定できます。
| String |
コードのサンプル
次の Python スクリプトは、FindRoutes(ルート検索)ツールをスクリプトで使用する方法を示しています。
import arcpy
import time
import datetime
import sys
username = "<your user name>"
password = "<your password>"
FindRoute_service = "http://logistics.arcgis.com/arcgis/services;World/Route;{0};{1}".format(username, password)
#Add the geoprocessing service as a toolbox. Use an alias when importing
arcpy.ImportToolbox(FindRoute_service, "agol")
#Set the variables to call the tool
stops = r'C:/data/Inputs.gdb/Stops'
output_routes = r'C:/data/Results.gdb/Routes'
output_route_edges = r'C:/data/Results.gdb/Route_Edges'
output_directions = r'C:/data/Results.gdb/Directions'
output_stops = r'C:/data/Results.gdb/Stops'
#Call the tool
result = arcpy.agol.FindRoutes(stops, "Minutes",
Reorder_Stops_to_Find_Optimal_Routes=True,
Preserve_Terminal_Stops="Preserve First",
Time_of_Day=datetime.datetime(2014, 2, 10, 8, 0, 0))
#Check the status of the result object every 0.5 seconds
#until it has a value of 4(succeeded) or greater
while result.status < 4:
time.sleep(0.5)
#print any warning or error messages returned from the tool
result_severity = result.maxSeverity
if result_severity == 2:
print "An error occured when running the tool"
print result.getMessages(2)
sys.exit(2)
elif result_severity == 1:
print "Warnings were returned when running the tool"
print result.getMessages(1)
#Get the output routes and save to a local geodatabase
result.getOutput(1).save(output_routes)
result.getOutput(2).save(output_route_edges)
result.getOutput(3).save(output_directions)
result.getOutput(4).save(output_stops)