到達圏の生成(Generate Service Areas) (Network Analyst)
サマリ
到達圏ネットワーク解析レイヤの作成、解析プロパティの設定、および解析の実行を行います。このツールは、Web 上の到達圏ジオプロセシング サービスのセットアップに最適です。ネットワーク到達圏とは、1 つ以上の施設から特定の距離または移動時間の範囲内にあるアクセス可能なすべての道路が含まれた領域です。
一般的に、到達圏はアクセシビリティの視覚化と評価に使用されます。たとえば、食料品店の周囲に 3 分間の走行時間ポリゴンを作成すると、その食料品店に 3 分以内に到着できる、その食料品店で買い物する可能性の高い住民を判断できます。
[到達圏の生成(Generate Service Areas)] ツールと [到達圏レイヤの作成(Make Service Area Layer)] ツールは類似していますが、それぞれ異なる目的で設計されています。ジオプロセシング サービスをセットアップする場合、[到達圏の生成(Generate Service Areas)] ツールを使用すると、セットアップ プロセスが簡単になります。そうでない場合は、[到達圏レイヤの作成(Make Service Area Layer)] を使用します。到達圏ラインを生成する必要がある場合にも、[到達圏レイヤの作成(Make Service Area Layer)] を使用します。ラインを生成するオプションは、[到達圏の生成(Generate Service Areas)] では提供されません。
[到達圏の生成(Generate Service Areas)] を使用して到達圏ジオプロセシング サービスを作成する場合、1 つのツールをセットアップするだけで済みます。このツールをサービスとして直接公開することができます。これに対して、[到達圏レイヤの作成(Make Service Area Layer)] を使用して到達圏ジオプロセシング サービスを作成するには、モデルを作成し、それをさまざまな他のツールに正しく接続して公開する必要があります。チュートリアル データを使用した走行時間ポリゴン サービスの設定方法については、「ジオプロセシング サービスの例: 走行時間ポリゴン」をご参照ください。検討すべきもう 1 つのオプションは、ArcGIS Online の到達圏の生成サービスです。これは ArcMap 内でジオプロセシング ツールのように動作するサービスですが、その他のアプリケーションからアクセスでき、世界の高品質な道路データが多数含まれています。
使用法
-
ツール ダイアログ ボックスの各種オプション パラメータは、管理しやすいよう次の 6 つのカテゴリに分類されています。
- 高度な解析
- バリア
- ネットワーク データセット
- ネットワーク ロケーション
- ポリゴンの生成
- サービスの機能
構文
パラメータ | 説明 | データ タイプ |
Facilities |
到達圏を作成する対象施設。 施設フィーチャ セットには次の 3 つの属性があります。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: 施設の名前です。名前が空、空白、または無効な場合は、解析の実行時に名前が自動的に生成されます。 | Feature Set |
Break_Values |
各施設について作成する到達圏ポリゴンのサイズと数を指定します。単位は、[ブレークの単位] の値によって決まります。 [到達圏の生成(Generate Service Areas)] ツールを実行すると、次のパラメータは互いに影響して新しい値が定義されます。[ブレーク値]、[ブレークの単位]、および [時間属性] または [距離属性] のいずれかです。[ブレーク値] パラメータと [ブレークの単位] パラメータによって、対象となる 1 つ以上の施設の周囲に広がる到達圏の距離または長さが定義されます。[時間属性] パラメータと [距離属性] パラメータは、それぞれ 1 つずつネットワーク コスト属性を定義します。ただし、使用されるのはこれら 2 つのコスト属性のうちの 1 つだけで、解析には、[ブレークの単位] の値に対応する属性が選択されます。つまり、秒や分といった時間ベースの [ブレークの単位] の値を指定した場合、解析には、[時間属性] パラメータで定義されたコスト属性が使用されます。キロメートルやマイルといった距離ベースの [ブレークの単位] の値を指定した場合、解析には [距離属性] パラメータで定義されたコスト属性が使用されます。 ポリゴンのブレークを複数設定して、各施設について同心状の到達圏を生成することもできます。たとえば、各施設について 2 マイル、3 マイル、および 5 マイルの到達圏を設定する場合は、「2 3 5」と、各値を半角スペースで区切りながら入力します。[ブレークの単位] にマイルを設定し、[距離属性] パラメータについて距離ベースのネットワーク属性を選択していることを確認します。 | String |
Break_Units |
[ブレーク値] パラメータの単位。
[到達圏の生成(Generate Service Areas)] ツールは、ここで指定した単位が時間または距離のどちらに基づいているかに応じて、[時間属性] または [距離属性] のどちらに指定されたネットワーク コスト属性を使用するかを選択します。 対応する時間または距離のコスト属性の単位と [ブレークの単位] の値が異なる場合は、ツールによって必要な単位変換が実行されます。 | String |
Network_Dataset |
解析が実行されるネットワーク データセット。ほとんどの場合、ネットワーク データセットは道路ネットワークを表しますが、他の種類の交通ネットワークを表すこともあります。ネットワーク データセットには、少なくとも 1 つの時間ベースと 1 つの距離ベースのコスト属性が必要です。 | Network Dataset Layer |
Service_Areas |
出力ワークスペースおよび出力フィーチャ名。このワークスペースはすでに存在している必要があります。デフォルトの出力ワークスペースは in_memory です。 | Feature Class |
Travel_Direction (オプション) |
到達圏ポリゴンの作成に使用する移動方向を施設に向かう方向または施設から離れる方向のどちらにするか選択します。
道路の両側でインピーダンスが異なる場合や、一方通行の道路がある場合には、移動方向によってポリゴンの形状が違ってくることがあります。方向は、到達圏解析の目的に応じて選択する必要があります。たとえば宅配ピザの到達圏であれば、施設から離れる方向に作成し、病院の到達圏であれば、病院への移動時間が患者にとって重要であることを踏まえ、施設に向かう方向に作成すべきでしょう。 | String |
Time_of_Day (オプション) |
施設からの出発時間または施設への到着時間。この値の解釈は、移動方向が施設への到着である場合と施設からの出発である場合で異なります。
このパラメータを有効にするためには、ネットワーク データセットに交通量データを含める必要があります。 同じ解析を [時刻] の値を変えて繰り返し実行します。これにより、時間の経過に伴う施設の到着時間の変化を確認できます。たとえば、消防署から 5 分間の到達圏は、早朝には大きくなり、混雑する朝の時間帯は縮小し、朝の遅い時間帯には拡大するなど、1 日を通して変化します。 | Date |
UTurn_Policy (オプション) |
ジャンクションでの U ターン ポリシーU ターンを許可するということは、解析においてジャンクションで方向転換し、同じ道路を引き返すことができるということを意味します。 ジャンクションが道路の交差と行き止まりを表すことを前提に、さまざまな車両が、一部のジャンクションでは方向転換でき、他のジャンクションでは方向転換できない、というように設定できます。これは、ジャンクションが交差と行き止まりのどちらを表すかによって変わります。これに対応するには、ジャンクションに接続するエッジの数(ジャンクションでのノードへの接続数)によって、暗黙的に U ターン ポリシーを指定します。以下では、このパラメータで選択できる値と、ジャンクションので接続におけるそれぞれの意味について示します。
ヒント: U ターン ポリシーをさらに正確に定義する必要がある場合、グローバル ターン遅延エバリュエータをネットワーク コスト属性に追加するか、すでに存在する場合はそれを調整することを検討してください。その際、逆ターンの設定には特に注意が必要です。また、ネットワーク ロケーションの CurbApproach プロパティの設定についても調べてください。 | String |
Point_Barriers (オプション) |
ポイント バリアを指定します。ポイント バリアは、通行不可と追加コストの 2 種類に分かれています。これらは、一時的にネットワーク上のポイントの通行を規制したり、ポイントにインピーダンスを追加したりします。ポイント バリアはフィーチャ セットで定義されます。ポイント フィーチャに指定した属性値によって、ポイント バリアが通行不可バリアなのか、追加コスト バリアなのかが決まります。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 BarrierType: バリアの通過を完全に規制するのか、バリアを通過する際のコストを追加するのかを指定します。次の 2 つのオプションがあります。
[Restriction](通過不可)の場合は「0」を、[Added Cost](追加コスト)の場合は「2」を使用します。 AdditionalCost: [AdditionalCost] は、到達圏がバリアを通る場合にどの程度のインピーダンスが追加されるかを示しています。 このフィールド値の単位は、[ブレークの単位] について指定した単位と同じです。 | Feature Set |
Line_Barriers (オプション) |
一時的にラインの横断を規制するライン バリアを指定します。ライン バリアは、フィーチャ セットで定義されます。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 | Feature Set |
Polygon_Barriers (オプション) |
ポリゴン バリアを指定します。ポリゴン バリアは、通行不可とコスト係数指定の 2 種類に分かれています。これらは、ポリゴン バリアに含まれるネットワークの一部に対して、一時的に通行を規制したり、インピーダンスを増減したりします。ポリゴン バリアはフィーチャ セットで定義されます。ポリゴン フィーチャに指定した属性値によって、ポリゴン バリアが通行不可バリアなのか、コスト係数指 バリアなのかが決まります。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 BarrierType: バリアの通過を完全に禁止するか、バリアを通過する際のコストを係数に基づいて計算するかを指定します。次の 2 つのオプションがあります。
[Restriction](通過不可)の場合は「0」を、[Scaled Cost](コスト係数指定)の場合は「1」を使用します。 ScaledCostFactor: [ScaledCostFactor] は、到達圏がバリアを通る場合にインピーダンスに乗算される程度を示しています。 | Feature Set |
Time_Attribute (オプション) |
[ブレークの単位] の値が時間単位である場合に使用するネットワーク コスト属性を定義します。 [ブレークの単位] の値がここに定義されているコスト属性の単位と異なる場合は、ツールによって必要な時間単位の変換がなされます。つまり、ブレークの時間単位とネットワーク コスト属性が同じである必要はありません。 | String |
Time_Attribute_Units (オプション) |
[時間属性] パラメータによって指定されるネットワーク コスト属性の単位。これは、ネットワーク データセットを直接編集しない限り変更できない単なる情報パラメータです。ブレーク値の単位とコスト属性の間の単位変換は自動的に実施されるため、変更する必要はありません。 | String |
Distance_Attribute (オプション) |
[ブレークの単位] の値が距離単位である場合に使用するネットワーク コスト属性を定義します。 [ブレークの単位] の値がここに定義されているコスト属性の単位と異なる場合は、ツールによって必要な距離単位の変換がなされます。つまり、ブレークの距離単位とネットワーク コスト属性が同じである必要はありません。 | String |
Distance_Attribute_Units (オプション) |
[距離属性] パラメータによって指定されるネットワーク コスト属性の単位。これは、ネットワーク データセットを直接編集しない限り変更できない単なる情報パラメータです。ブレーク値の単位とコスト属性の間の単位変換は自動的に実施されるため、変更する必要はありません。 | String |
Use_Hierarchy_in_Analysis (オプション) |
解析を実行するネットワーク データセットに使用する階層属性が定義されていない場合、パラメータは使用されません。この場合、「#」をパラメータ値として使用します。 | Boolean |
Restrictions (オプション) |
解析時にどのネットワーク規制属性を考慮するかを指定します。 | String |
Attribute_Parameter_Values (オプション) |
パラメータを持つネットワーク属性のパラメータ値を指定します。レコード セットには、パラメータを一意に特定するために一緒に使用される 2 つの列と、パラメータ値を指定する別の列が含まれています。 属性パラメータ値 レコード セットには、属性が関連付けられています。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 AttributeName: テーブル行で設定される属性パラメータを持つネットワーク属性の名前。 ParameterName: テーブル行で設定される値を持つ属性パラメータの名前。(オブジェクト タイプ パラメータは、このツールを使用して更新できません。) ParameterValue: 属性パラメータに設定する値。値が指定されない場合、属性パラメータは NULL に設定されます。 | Record Set |
Maximum_Snap_Tolerance (オプション) |
最大スナップ許容値とは、Network Analyst がネットワーク上でポイントの配置や再配置を行う場合に検索できる最大距離のことです。検索によって適切なエッジまたはジャンクションを見つけ、そのうちで最も近い場所にポイントをスナップします。最大スナップ許容値内で適切な場所が見つからなかった場合、そのオブジェクトには未配置のマークが付けられます。 | Linear unit |
Exclude_Restricted_Portions_of_the_Network (オプション) |
| Boolean |
Feature_Locator_WHERE_Clause (オプション) |
施設を配置できるネットワーク エレメントを制限するソース フィーチャ サブセットの選択に使用する SQL 式。このパラメータの構文は、次の 2 つの部分から成ります。最初の部分はソース フィーチャのクラス名(スペースが続く)、次の部分は SQL 式です。2 つ以上のソース フィーチャクラス用に SQL 式を記述する場合は、セミコロンで区切ります。 通行が規制されている高速道路に施設を配置しないようにするため、たとえば次のように SQL 式を記述してそれらのソース フィーチャを除外します: 「Streets" "FUNC_CLASS not in('1', '2')」。 なお、バリアは、読み込み時にフィーチャ ロケータの WHERE 句を無視します。 | String |
Polygons_for_Multiple_Facilities (オプション) |
複数の施設が存在する解析で、どのように到達圏ポリゴンを生成するかを選択します。
| String |
Polygon_Overlap_Type (オプション) |
同心状の到達圏ポリゴンをディスク状に作成するか、またはリング状に作成するかを指定します。このオプションは複数のブレーク値が施設に対して指定されているときにのみ適用できます。
| String |
Detailed_Polygons (オプション) |
詳細なポリゴンまたは単純化されたポリゴンのどちらを作成するか、オプションを指定します。
| Boolean |
Polygon_Trim_Distance (オプション) |
到達圏ポリゴンが切詰められる距離の範囲を指定します。データが非常にまばらで、サービス エリア内にフィーチャが存在しない広範領域ができるのを防ぎたい場合に役立ちます。 このパラメータに値を設定せずにおくか、「0」を設定すると、到達圏ポリゴンが切詰められないようにすることができます。このパラメータ値は、階層の使用時には無視されます。 | Linear unit |
Polygon_Simplification_Tolerance (オプション) |
ポリゴン ジオメトリをどの程度単純化するかを指定します。 単純化では、ポリゴンの基本的な形状を定義する重要ポイントが保持され、それ以外のポイントが削除されます。ここで指定する単純化の距離は、単純化されたポリゴンにおける逸脱が認められる、元のポリゴンからの最大許容オフセットです。ポリゴンを単純化すると、頂点の数が少なくなり、描画時間が短縮される傾向にあります。 | Linear unit |
Maximum_Facilities (オプション) |
到達圏解析に追加できる施設の数を制限します。 このパラメータは、解析時に発生する処理量を管理することに役立ちます。たとえば、作成中の無料版のサービスに対してはこのパラメータに小さい値を割り当て、有料サブスクリプション版のサービスには大きい値を割り当てるというようにできます。 NULL 値は、制限がないことを示します。 | Long |
Maximum_Number_of_Breaks (オプション) |
到達圏解析に追加できるブレークの数を制限します。 このパラメータは、解析時に発生する処理量を管理することに役立ちます。たとえば、作成中の無料版のサービスに対してはこのパラメータに小さい値を割り当て、有料サブスクリプション版のサービスには大きい値を割り当てるというようにできます。 NULL 値は、制限がないことを示します。 | Long |
Maximum_Features_Affected_by_Point_Barriers (オプション) |
ポイント バリアが影響を与えることのできるフィーチャの数を制限します。 このパラメータは、解析時に発生する処理量を管理することに役立ちます。たとえば、作成中の無料版のサービスに対してはこのパラメータに小さい値を割り当て、有料サブスクリプション版のサービスには大きい値を割り当てるというようにできます。 NULL 値は、制限がないことを示します。 | Long |
Maximum_Features_Affected_by_Line_Barriers (オプション) |
ライン バリアが影響を与えることのできるフィーチャの数を制限します。 このパラメータは、解析時に発生する処理量を管理することに役立ちます。たとえば、作成中の無料版のサービスに対してはこのパラメータに小さい値を割り当て、有料サブスクリプション版のサービスには大きい値を割り当てるというようにできます。 NULL 値は、制限がないことを示します。 | Long |
Maximum_Features_Affected_by_Polygon_Barriers (オプション) |
ポリゴン バリアが影響を与えることのできるフィーチャの数を制限します。 このパラメータは、解析時に発生する処理量を管理することに役立ちます。たとえば、作成中の無料版のサービスに対してはこのパラメータに小さい値を割り当て、有料サブスクリプション版のサービスには大きい値を割り当てるというようにできます。 NULL 値は、制限がないことを示します。 | Long |
Maximum_Break_Time_Value (オプション) |
時間ベースの到達圏解析を実行する場合の、[ブレーク値] パラメータの許容最大値を設定します。 このパラメータは、解析時に発生する処理量を管理することに役立ちます。たとえば、作成中の無料版のサービスに対してはこのパラメータに小さい値を割り当て、有料サブスクリプション版のサービスには大きい値を割り当てるというようにできます。 NULL 値は、制限がないことを示します。 | Double |
Maximum_Break_Distance_Value (オプション) |
距離ベースの到達圏解析を実行する場合の、[ブレーク値] パラメータの許容最大値を設定します。 このパラメータは、解析時に発生する処理量を管理することに役立ちます。たとえば、作成中の無料版のサービスに対してはこのパラメータに小さい値を割り当て、有料サブスクリプション版のサービスには大きい値を割り当てるというようにできます。 NULL 値は、制限がないことを示します。 | Double |
Force_Hierarchy_beyond_Break_Time_Value (オプション) |
階層が有効化されていない場合であっても、時間ベースの到達圏解析の実行時に階層の適用を開始する最低値となるブレーク値を指定します。 高いブレーク値の到達圏の場合は、ネットワークの階層を使用して解析するほうが、階層を使用せずに解析する場合よりも処理を大幅に削減できる傾向があります。このパラメータは、解析するときの処理量の管理に役立ちます。 NULL 値は、階層を一切適用せずに、[解析に階層を使用] パラメータの値を常に適用することを示します。階層をサポートしていない入力ネットワーク データセットの場合にこのパラメータに値を指定すると、エラーが発生します。この場合は、NULL 値を使用してください。 | Double |
Force_Hierarchy_beyond_Break_Distance_Value (オプション) |
階層が有効化されていない場合であっても、距離ベースの到達圏解析時に階層の適用を開始する最低値となるブレーク値を指定します。 高いブレーク値の到達圏の場合は、ネットワークの階層を使用して解析するほうが、階層を使用せずに解析する場合よりも処理を大幅に削減できる傾向があります。このパラメータは、解析するときの処理量の管理に役立ちます。 NULL 値は、階層を一切適用せずに、[解析に階層を使用] パラメータの値を常に適用することを示します。階層をサポートしていない入力ネットワーク データセットの場合にこのパラメータに値を指定すると、エラーが発生します。この場合は、NULL 値を使用してください。 | Double |
Save_Output_Network_Analysis_Layer (オプション) |
いずれの場合も、到達圏を持つフィーチャクラスが返されます。ただし、サーバ管理者は、ツールのセットアップと結果を ArcGIS for Desktop 環境の Network Analyst コントロールでデバッグするために、ネットワーク解析レイヤの出力も選択することがあります。これにより、デバッグ処理が非常に容易になります。 ArcGIS for Desktop では、ネットワーク解析レイヤのデフォルトの出力場所は、scratch フォルダになります。scratch フォルダの場所は、arcpy.env.scratchFolder ジオプロセシング環境の値を評価することで確認できます。出力されたネットワーク解析レイヤは、「_ags_gpna」に英数字の GUID を付け加えた名前の LYR ファイルとして保存されます。 | Boolean |
Time_Zone_for_Time_of_Day (オプション) |
[Time of Day] パラメータのタイム ゾーンを指定します。
[Time Zone for Time of Day] の設定に関係なく、[Time of Day] に NULL 以外の値が設定されており、マージされたポリゴンまたは重複しないポリゴンを作成するように [Polygons for Multiple Facilities] が設定されている場合は、すべての施設が同じタイム ゾーンに存在する必要があります。 | String |
コードのサンプル
Python ウィンドウで必要パラメータを使用してツールを実行します。
import arcpy
facilities = arcpy.FeatureSet()
facilities.load("FireStations")
arcpy.na.GenerateServiceAreas(facilities, "1 2 3", "Minutes", "Streets_ND",
"in_memory\\FireStationServiceAreas")
次のスタンドアロン Python スクリプトは、時間の経過に応じたある店舗の到達範囲を判断するために GenerateServiceAreas(到達圏の生成)を使用する方法を示しています。1 日の各時間帯における店舗所在地から 5 分間の到達圏を生成する方法を確認できます。このような解析は、宅配ピザ店などにとって、店舗から 5 分以内に到達できる領域が最新の交通状況に応じてどのように変化するかを理解するうえで便利です。
# Name: GenerateServiceAreas_Workflow.py
# Description: Generate a 5 minute service area around a store location at
# different times in a day. Such analysis can be useful, for example
# for a pizza store, to see how the area that can be reached within
# 5 minutes from the store changes based on the current traffic
# conditions.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import datetime
try:
#Check out the Network Analyst extension license
arcpy.CheckOutExtension("Network")
#Set environment settings
env.workspace = "C:/data/SanFrancisco.gdb"
env.overwriteOutput = True
#Set local variables
inNetworkDataset = "Transportation/Streets_ND"
impedanceAttribute = "TravelTime"
breakValues = "5"
breakUnits = "Minutes"
inFacilities = "Analysis/ExistingStore"
outGeodatabase = "C:/data/output/ServiceAreaOutput.gdb"
serviceArea = "in_memory\\ServiceAreas"
dateFieldName = "StartTime"
nameField = "Name"
#use today at 8 AM as the start time and then increment it by one hour
startTime = datetime.datetime(1899,12,30,8,0,0)
#Create a new feature set with same schema as Facilities parameter in
#Generate Service Areas tool. Load the feature from the ExistingStore
#feature class in the feature set
facilities = arcpy.GetParameterValue("GenerateServiceAreas_na",0)
facilities.load(inFacilities)
#Create an empty feature class with same spatial reference as the
#network dataset and a Date field called StartTime and a text field called Name
outServiceAreas = arcpy.management.CreateFeatureclass(outGeodatabase, "ServiceAreas",
"POLYGON","","","",
inNetworkDataset).getOutput(0)
arcpy.management.AddField(outServiceAreas, dateFieldName, "DATE")
arcpy.management.AddField(outServiceAreas, nameField, "TEXT")
#Open an insert cursor on the feature class to add new polygons
cursor = arcpy.da.InsertCursor(outServiceAreas, ("SHAPE@", nameField,
dateFieldName))
#Geneate a 5 minute service area around the store at every one hour interval
#from 8 AM to 8 PM. Copy the output service area to a new feature class
for i in range(1,14):
timeFormat = startTime.time().strftime("%I %p")
print "Generating {0} {1} service area at {2}".format(breakValues,breakUnits,
timeFormat)
arcpy.na.GenerateServiceAreas(facilities,breakValues,breakUnits,
inNetworkDataset, serviceArea, "TRAVEL_FROM",
startTime, Time_Attribute=impedanceAttribute)
#Get the shape from the output service area so that it can be inserted
#in the feature class
with arcpy.da.SearchCursor(serviceArea,("SHAPE@", nameField)) as inputRows:
row = inputRows.next()
cursor.insertRow((row[0],row[1],startTime))
startTime = startTime + datetime.timedelta(seconds=3600)
del cursor
print "Script completed successfully"
except Exception as e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print "An error occured on line %i" % tb.tb_lineno
print str(e)