到達圏の生成(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)] を使用して到達圏ジオプロセシング サービスを作成するには、モデルを作成し、それをさまざまな他のツールに正しく接続して公開する必要があります。
チュートリアル データを使用した走行時間ポリゴン サービスの設定方法については、「ジオプロセシング サービスの例: 走行時間ポリゴン」をご参照ください。
使用法
ツール ダイアログ ボックスは、さまざまなオプション パラメータを以下の 6 つのカテゴリにグループ化し、管理を容易にしています。
- 高度な解析
- バリア
- ネットワーク データセット
- ネットワーク ロケーション
- ポリゴンの生成
- サービスの機能
構文
パラメータ | 説明 | データ タイプ |
Facilities |
周辺に到達圏が作成される施設。 施設フィーチャ セットには、以下の 3 つの属性があります。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: 施設の名前。名前が空、空白、または NULL の場合、名前は解析時に自動的に生成されます。 | 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 |
出力フィーチャの出力ワークスペースと出力名。このワークスペースはすでに存在している必要があります。デフォルトの出力ワークスペースは、インメモリです。 | Feature Class |
Travel_Direction (オプション) |
到達圏ポリゴンの作成に使用される移動方向について、施設に向かうのか、施設から離れるのかを選択します。
道路の両側でインピーダンスが異なったり、一方通行道路が存在する場合があるため、移動方向によってポリゴンの形状が変化することがあります。方向は、到達圏解析の目的に応じて選択する必要があります。たとえば宅配ピザの到達圏であれば、施設から離れる方向に作成され、病院の到達圏であれば、施設に向かう方向に作成されます。これは、患者にとって、病院に向かう移動時間が重要であるためです。 | String |
Time_of_Day (オプション) |
施設からの出発時間と施設への到着時間。この値の解釈は、移動方向が施設への到着である場合と施設からの出発である場合で異なります。
ネットワーク データセットには、このパラメータに影響を与える交通量データを含める必要があります。 同じ解析を [時刻] の値を変えて繰り返し実行します。これにより、時間の経過に伴う施設の到着時間の変化を確認できます。たとえば、消防署から 5 分間の到達圏は、早朝には大きくなり、混雑する朝の時間帯は縮小し、朝の遅い時間帯には拡大するなど、一日を通して変化します。 | Date |
UTurn_Policy (オプション) |
ジャンクションでの U ターン ポリシーU ターンを許可するということは、解析においてジャンクションで方向転換し、同じ道路を引き返すことができるということを意味します。 ジャンクションが道路の交差と行き止まりを表すことを前提に、さまざまな車両が、一部のジャンクションでは方向転換でき、他のジャンクションでは方向転換できない、というように設定できます。これは、ジャンクションが交差と行き止まりのどちらを表すかによって変わります。これに対応するには、ジャンクションに接続するエッジの数(ジャンクションでのノードへの接続数)によって、暗黙的に U ターン ポリシーを指定します。以下では、このパラメータで選択できる値と、ジャンクションので接続におけるそれぞれの意味について示します。
ヒント: U ターン ポリシーをさらに正確に定義する必要がある場合、グローバル ターン遅延エバリュエータをネットワーク コスト属性に追加するか、すでに存在する場合はそれを調整することを検討してください。その際、逆ターンの設定には特に注意が必要です。また、ネットワーク ロケーションの CurbApproach プロパティの設定についても調べてください。 | String |
Point_Barriers (オプション) | ポイント バリアを指定します。ポイント バリアは、通行不可と追加コストの 2 種類に分かれています。これらは、一時的にネットワーク上のポイントの通行を規制したり、ポイントにインピーダンスを追加したりします。ポイント バリアはフィーチャ セットで定義されます。ポイント フィーチャに指定した属性値によって、ポイント バリアが通行不可バリアなのか、追加コスト バリアなのかが決まります。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 BarrierType: バリアの通過を完全に規制するのか、バリアを通過する際のコストを追加するのかを指定します。次の 2 つのオプションがあります。
[規制] の場合は 0 の値、[追加コスト] の場合は 2 の値を使用します。 AdditionalCost: AdditionalCost は、到達圏がバリアを通過するときに追加されるインピーダンスを指定します。 このフィールド値の単位は、[ブレークの単位] で指定した単位と同じです。 | Feature Set |
Line_Barriers (オプション) |
一時的にラインの横断を規制するライン バリアを指定します。ライン バリアは、フィーチャ セットで定義されます。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 | Feature Set |
Polygon_Barriers (オプション) | ポリゴン バリアを指定します。ポリゴン バリアは、通行不可とコスト係数指定の 2 種類に分かれています。これらは、ポリゴン バリアに含まれるネットワークの一部に対して、一時的に通行を規制したり、インピーダンスを増減したりします。ポリゴン バリアはフィーチャ セットで定義されます。ポリゴン フィーチャに指定した属性値によって、ポリゴン バリアが通行不可バリアなのか、コスト係数指 バリアなのかが決まります。属性テーブルの各フィールドとその説明を以下に示します。 ObjectID: システムで管理される ID フィールド。 Shape: ネットワーク解析オブジェクトの地理的な位置を示すジオメトリ フィールド。 Name: バリアの名前。 BarrierType: バリアの通過を完全に禁止するか、バリアを通過する際のコストを係数に基づいて計算するかを指定します。次の 2 つのオプションがあります。
[規制] の場合は 0 の値、[コスト係数指定] の場合は 1 の値を使用します。 ScaledCostFactor: ScaledCostFactor は、到達圏がバリアを通過するときにインピーダンスに掛ける値を指定します。 | Feature Set |
Time_Attribute (オプション) |
[ブレークの単位] が時間単位の場合に使用されるネットワーク コスト属性を定義します。 [ブレークの単位] の値が、ここで定義したコスト属性の単位と異なる場合、ツールは必要な時間単位変換を実行します。つまり、ブレークの時間単位とネットワーク コスト属性の時間単位が同じである必要はありません。 | String |
Time_Attribute_Units (オプション) |
[時間属性] パラメータで指定したネットワーク コスト属性の単位。これは、単に情報パラメータであるため、ネットワーク データセットを直接編集しなければ、変更することはできません。ブレーク値の単位とコスト属性の間の単位変換が自動的に実行されるため、これを変更する必要もありません。 | String |
Distance_Attribute (オプション) | [ブレークの単位] が距離単位の場合に使用されるネットワーク コスト属性を定義します。 [ブレークの単位] の値が、ここで定義したコスト属性の単位と異なる場合、ツールは必要な距離単位変換を実行します。つまり、ブレークの距離単位とネットワーク コスト属性の距離単位が同じである必要はありません。 | String |
Distance_Attribute_Units (オプション) |
[距離属性] パラメータで指定したネットワーク コスト属性の単位。これは、単に情報パラメータであるため、ネットワーク データセットを直接編集しなければ、変更することはできません。ブレーク値とコスト属性の間の単位変換が自動的に実行されるため、これを変更する必要もありません。 | String |
Use_Hierarchy_in_Analysis (オプション) |
The parameter is not used if a hierarchy attribute is not defined on the network dataset used to perform the analysis. In such cases, use "#" as the parameter value. | 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 |
コードのサンプル
Python ウィンドウから、必要なパラメータを使用してこのツールを実行します。
import arcpy
facilities = arcpy.FeatureSet()
facilities.load("FireStations")
arcpy.na.GenerateServiceAreas(facilities, "1 2 3", "Minutes", "Streets_ND",
"in_memory\\FireStationServiceAreas")
以下のスタンドアロン Python スクリプトは、GenerateServiceAreas(到達圏の生成)を使用して店舗の到達時間を決定する方法を示しています。一日のうちのさまざまな時刻で、店舗の周囲に 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)