概要
到達圏ネットワーク解析レイヤーを作成し、解析プロパティを設定します。到達圏解析レイヤーは、施設の場所から指定したコストの閾値内で到達できるエリアを決定する際に役立ちます。レイヤーは、ローカル ネットワーク データセットや、オンラインでホストされたルート サービスまたはポータル内のルート サービスを使用して作成できます。
使用法
このツールで解析レイヤーを作成した後は、[ロケーションの追加 (Add Locations)] ツールを使用して解析レイヤーにネットワーク解析オブジェクトを追加し、[解析の実行 (Solve)] ツールを使用して解析を実行し、[レイヤー ファイルの保存 (Save To Layer File)] ツールを使用して結果をディスクに保存することができます。
このツールをジオプロセシング モデルに使用するときは、モデルをツールとして動作させる場合、出力ネットワーク解析レイヤーにモデル パラメーターを作成する必要があります。そうしないと、出力レイヤーはマップのコンテンツに追加されません。
ArcGIS Pro では、ネットワーク解析レイヤーのデータは、ディスク上のファイル ジオデータベースのフィーチャクラスに格納されます。プロジェクトでネットワーク解析レイヤーを作成する場合、レイヤーのデータは、現在のワークスペース環境の新しいフィーチャ データセット内に作成されます。Python スクリプトでネットワーク解析レイヤーを作成する場合、まず arcpy.env.workspace = "<path to file gdb>" を使用して、ワークスペース環境をレイヤーのデータを格納するファイル ジオデータベースに明示的に設定する必要があります。レイヤーが作成されるとき、適切なサブレイヤーのフィーチャクラスを含む新しいフィーチャ データセットがこのファイル ジオデータベースに追加されます。
構文
MakeServiceAreaAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {cutoffs}, {time_of_day}, {time_zone}, {output_type}, {polygon_detail}, {geometry_at_overlaps}, {geometry_at_cutoffs}, {polygon_trim_distance}, {exclude_sources_from_polygon_generation}, {accumulate_attributes})
パラメーター | 説明 | データ タイプ |
network_data_source | ネットワーク解析が実行されるネットワーク データセットまたはサービス。サービスのポータル URL を使用します。 | Network Dataset Layer;String |
layer_name (オプション) | 作成するネットワーク解析レイヤーの名前。 | String |
travel_mode (オプション) | 解析で使用する移動モードの名前。移動モードは、移動規制や U ターン ポリシーなど、歩行者、車、トラック、その他の交通手段がネットワークをどのように移動するかを決定するネットワーク設定のコレクションを表します。移動モードは、ネットワーク データ ソースに対して定義されます。 arcpy.na.TravelMode オブジェクトおよび移動モードの有効な JSON 表現を含む文字列もパラメーターの入力として使用できます。 | String |
travel_direction (オプション) | 施設に向かう移動方向か、施設から離れる移動方向かを指定します。
このパラメーターを使用することで、移動する方向に基づいた一方通行規制およびさまざまなインピーダンスを考慮して、ネットワーク上にさまざまな到達圏を作成することが可能になります。たとえば、宅配ピザの到達圏であれば、施設から離れる方向に作成し、病院の到達圏であれば、施設に向かう方向に作成します。 | String |
cutoffs [cutoffs,...] (オプション) | 計算される到達圏の範囲。単位は、選択した移動モードで使用されるインピーダンス属性の単位です。たとえば、運転時間を解析している場合、カットオフ値の 10 は、結果の到達圏が運転時間 10 分以内に到達できるエリアを表すことを意味します。 同心状の到達圏を作成するために、複数のカットオフを設定できます。たとえば、同じ施設に対して 2 分、3 分、および 5 分の到達圏を検索する場合は、このパラメーターの値として 2、3、5 を指定します。 このデフォルトのカットオフ値は、施設サブレイヤーのブレーク値を個別に指定することで、施設ごとにオーバーライドできます。 | Double |
time_of_day (オプション) | 到達圏レイヤーの施設からの出発時間または到着時間です。この値が出発時間と到着時間のどちらに解釈されるかは、施設への移動方向に依存します。
time_of_day パラメーターは、動的な交通状況など、時間とともに変化するインピーダンス属性を使用する移動モードに基づいて到達できる道路を検索する場合に最も便利です。同じ解析を time_of_day の値を変えて実行すると、時間の経過に伴う施設の到着時間の変化を確認できます。たとえば、消防署から 5 分間の到達圏は、早朝には大きくなり、混雑する朝の時間帯は縮小し、朝の遅い時間帯には拡大するなど、一日を通して変化します。 日時は、2015/10/21 10:30 のように指定できます。 特定の日付を使用する代わりに、次の日付を使用して曜日を指定することができます。
| Date |
time_zone (オプション) | [時刻] パラメーターのタイム ゾーンを指定します。
| String |
output_type (オプション) | 生成される出力のタイプを指定します。到達圏の出力は、カットオフを超えるまで到達可能な道路を表すライン フィーチャ、またはこれらのラインを囲む (到達可能なエリアを表す) ポリゴン フィーチャです。
ネットワーク データ ソースが、ラインの生成に対応していない Portal for ArcGIS のバージョンのサービスである場合、[ライン] および [ポリゴンとライン] 出力タイプは使用できません。 | String |
polygon_detail (オプション) | 出力ポリゴンの詳細レベルを指定します。
解析する市街地の道路網が格子状であれば、単純化されたポリゴンと詳細なポリゴンの違いはあまりありません。ただし、山間部や地方の道路では、一般的に、単純化されたポリゴンよりも標準または詳細なポリゴンのほうがはるかに高い精度を提供します。 | String |
geometry_at_overlaps (オプション) | 互いに関連する複数の施設から出力された到達圏の振舞いを指定します。
| String |
geometry_at_cutoffs (オプション) | 複数のカットオフ値が指定されているときに、1 つの施設に対して出力された到達圏の振舞いを指定します。このパラメーターは、ライン出力には適用されません。
| String |
polygon_trim_distance (オプション) | 到達圏ポリゴンの切詰め距離。ポリゴンの切詰め距離は、ライン バッファー サイズと同様に、他に到達可能な道路が近くにない場合に、到達圏ポリゴンが道路から延長する距離です。ネットワークがまばらで、フィーチャが存在しない広範領域が到達圏内に含まれるのを防ぎたい場合に役立ちます。 このパラメーターには距離の値と単位が含まれます。デフォルト値は 100 メートルです。 | Linear Unit |
exclude_sources_from_polygon_generation [exclude_sources_from_polygon_generation,...] (オプション) | 到達圏ポリゴンの生成時に除外されるネットワーク データセットのエッジ ソース。除外されたソースの周囲には、解析で通過された場合でも、ポリゴンが生成されません。 到達圏ポリゴンからネットワーク ソースを除外しても、そのソースの通行が防止されるわけではありません。到達圏ポリゴンからソースを除外した場合、到達圏のポリゴンの形状のみに影響が生じます。特定のネットワーク ソースの通行を防止するには、ネットワーク データセットの定義時に適切な規制を設定する必要があります。 ポリゴンの精度が損なわれるため、または到達圏解析にそれほど重要ではないため、ポリゴン生成に含めたくないネットワーク ソースがある場合に役立ちます。たとえば、道路および線路の複合ネットワークで徒歩時間の到達圏を作成する場合、ポリゴン生成から線路を除外するように選択する必要があります。移動者は線路を使用できますが、線路の途中で止まり、近くの建物に入ることはできません。代わりに、線路の全長を移動し、地下鉄システムの駅を出てから、道路を使って建物まで歩く必要があります。この場合、線路の周囲にポリゴン フィーチャを生成しても正確な結果は作成されません。 このパラメーターは、出力ジオメトリ タイプにポリゴンが含まれない場合、ネットワークに 1 つ以下のエッジ ソースしか存在しない場合、ネットワーク データ ソースが ArcGIS Online サービスである場合、またはネットワーク データ ソースがソースの除外をサポートしていないバージョンの Portal for ArcGIS のサービスである場合は使用できません。 | String |
accumulate_attributes [accumulate_attributes,...] (オプション) | 解析中に累積されるコスト属性のリスト。これらの累積属性は、参考情報としてのみ使用されます。解析では、指定されている移動モードで使用されるコスト属性のみが使用されます。 累積されるコスト属性ごとに、ネットワーク解析の出力フィーチャに Total_[Impedance] プロパティが入力されます。 このパラメーターは、解析レイヤーがラインを出力できるよう構成されていない場合や、ネットワーク データ ソースが ArcGIS Online サービスである場合、あるいはネットワーク データ ソースが累積をサポートしないバージョンの Portal for ArcGIS のサービスである場合には使用できません。 | String |
派生した出力
名前 | 説明 | データ タイプ |
out_network_analysis_layer | 新しく作成されたネットワーク解析レイヤー。 | Network Analyst レイヤー |
コードのサンプル
必須パラメーターのみを使用してツールを実行します。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "FireStationCoverage")
すべてのパラメーターを使用してツールを実行します。
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "WarehouseCoverage",
"Driving Time", "FROM_FACILITIES", [5, 10, 15],
"1/1/1900 9:00 AM", "UTC", "POLYGONS",
"STANDARD", "DISSOLVE", "RINGS", "100 meters",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"], ["Meters",
"DriveTime"])
次のスタンドアロン Python スクリプトは、MakeServiceAreaAnalysisLayer ツールを使用して消防署から 1 分、2 分、3 分以内の到達圏を生成する方法を示しています。
# Name: MakeServiceAreaAnalysisLayer_Workflow.py
# Description: Generate 1-,2-,3- minute service areas around fire stations and
# save the results to a layer file on disk. The service area
# polygons can be used to visualize the areas that do not have
# adequate coverage from the fire stations
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
env.workspace = os.path.join(output_dir, "Output.gdb")
env.overwriteOutput = True
#Set local variables
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new service area layer. We wish to generate the service area
#polygons as rings, so that we can easily visualize the coverage for any
#given location. We also want overlapping polygons so we can determine the
#number of fire stations that cover a given location. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES", [1, 2, 3],
polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP",
geometry_at_cutoffs="RINGS")
#Get the layer object from the result object. The service layer can now be
#referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
#Load the fire stations as facilities using default field mappings and
#default search tolerance
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
"")
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Save the solved service area layer as a layer file on disk
layer_object.saveACopy(output_layer_file)
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 occurred on line %i" % tb.tb_lineno)
print(str(e))
この例は、複数の時刻において施設の周りに到達圏を作成する方法、および入力フィーチャから出力フィーチャにフィールドを移し、既存のフィーチャクラスに出力ポリゴンを追加する方法を示しています。
# Name: MakeServiceAreaAnalysisLayer_Workflow2.py
# Description: Generate 3-minute service areas around fire stations at several
# times of day to compare coverage differences due to varying
# traffic conditions. Save the results to a feature class on disk.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os, datetime
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
env.workspace = os.path.join(output_dir, "Output.gdb")
env.overwriteOutput = True
#Set local variables
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
out_featureclass = os.path.join(output_dir, "Output.gdb",
"FireStationCoverage")
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
times_of_day = [datetime.datetime(2014, 9, 25, 7, 0, 0),
datetime.datetime(2014, 9, 25, 12, 30, 0),
datetime.datetime(2014, 9, 25, 17, 30, 0),
datetime.datetime(2014, 9, 25, 21, 0, 0)]
#Create a new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES",
[3], polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP")
#Get the layer object from the result object. The service area layer can
#now be referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
polygons_layer_name = sublayer_names["SAPolygons"]
#The input data has a field for FireStationID that we want to transfer to
#our analysis layer. Add the field, and then use field mapping to transfer
#the values.
arcpy.na.AddFieldToAnalysisLayer(layer_object, facilities_layer_name,
"FireStationID", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
facilities_layer_name)
field_mappings["FireStationID"].mappedFieldName = "FireStationID"
#Load the fire stations as facilities.
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities,
field_mappings, "")
# Add fields to the output Polygons sublayer for later use.
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"FireStationID", "TEXT")
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"TimeOfDay", "TEXT")
#Get sublayers to work with later
facilities_sublayer = layer_object.listLayers(facilities_layer_name)[0]
polygons_sublayer = layer_object.listLayers(polygons_layer_name)[0]
#Get the Service Area Layer's solver properties. This can be used to
#set individual properties later without re-creating the layer.
solver_properties = arcpy.na.GetSolverProperties(layer_object)
#Solve the Service Area for each time of day in the time list
for t in times_of_day:
print("Calculating service area for time of day: ", t)
#Use the solver properties to set the time of day for the solve
solver_properties.timeOfDay = t
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Transfer the FireStationID field from the input Facilities to the
#output Polygons
arcpy.management.AddJoin(polygons_sublayer, "FacilityID",
facilities_sublayer, "ObjectID")
#The joined fields are qualified by the feature class name of the joined
#table, so determine the feature class names
field_qualifier_pol = os.path.basename(polygons_sublayer.dataSource)
target_field_name = "%s.FireStationID" % field_qualifier_pol
field_qualifier_fac = os.path.basename(facilities_sublayer.dataSource)
expression = "!%s.FireStationID!" % field_qualifier_fac
arcpy.management.CalculateField(polygons_sublayer, target_field_name,
expression, "PYTHON")
arcpy.management.RemoveJoin(polygons_sublayer)
#Populate the TimeOfDay field in the output feature class
expression = '"' + str(t) + '"'
arcpy.management.CalculateField(polygons_sublayer, "TimeOfDay",
expression, "PYTHON")
#Append the polygons to the output feature class. If this was the first
#solve, create the feature class.
if not arcpy.Exists(out_featureclass):
arcpy.management.CopyFeatures(polygons_sublayer, out_featureclass)
else:
arcpy.management.Append(polygons_sublayer, out_featureclass)
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 occurred on line %i" % tb.tb_lineno)
print(str(e))
ライセンス情報
- Basic: はい
- Standard: はい
- Advanced: はい