arcpy.na.MakeServiceAreaLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {travel_from_to}, {default_break_values}, {polygon_type}, {merge}, {nesting_type}, {line_type}, {overlap}, {split}, {excluded_source_name}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {polygon_trim}, {poly_trim_value}, {lines_source_fields}, {hierarchy}, {time_of_day})
|
名前
|
説明
|
データ タイプ
|
|
in_network_dataset
|
到達圏解析が実行されるネットワーク データセット。
|
Network Dataset Layer
|
|
out_network_analysis_layer
|
作成する到達圏ネットワーク解析レイヤーの名前。
|
String
|
|
impedance_attribute
|
解析でインピーダンスとして使用されるコスト属性。
|
String
|
|
travel_from_to
(オプション)
|
施設に向かう移動方向か、施設から離れる移動方向かを指定します。
このオプションを使用することで、移動する方向に基づいた一方通行規制およびさまざまなインピーダンスを考慮して、ネットワーク上にさまざまな到達圏を作成することが可能になります。 たとえば、宅配ピザの到達圏であれば、施設から離れる方向に作成し、病院の到達圏であれば、施設に向かう方向に作成します。
|
String
|
|
default_break_values
(オプション)
|
計算される到達圏の範囲を示すデフォルトのインピーダンス値。 施設に閾値を指定することでデフォルト値をオーバーライドすることができます。
複数の閾値を設定することで、同心状の到達圏を生成できます。 たとえば、同一施設の 2 分間、3 分間、5 分間の到達圏を検索する場合は、デフォルトのブレーク値パラメーターの値として「2 3 5」を入力します (2、3、5 の間は空白文字で区切ります)。
|
String
|
|
polygon_type
(オプション)
|
生成されるポリゴンのタイプを指定します。
格子状の道路網を持つ市街地のデータであれば、単純化されたポリゴンと詳細なポリゴンの違いはあまりありません。 ただし、山間部や地方の道路では、一般的に、単純化されたポリゴンよりも詳細なポリゴンのほうがはるかに高い精度を提供します。
SIMPLE_POLYS—単純化されたポリゴンを高速に生成します。末端部分以外では適度な精度もあります。 これがデフォルトです。
DETAILED_POLYS—到達圏ラインを正確にモデリングする詳細なポリゴンが作成されます。未到達の領域が島状に残される場合があります。 単純化されたポリゴンを生成する場合に比べ、このオプションでは処理時間が長くなります。
NO_POLYS—到達圏ラインのみが必要な場合に、ポリゴンの生成を行わないようにします。
|
String
|
|
merge
(オプション)
|
同様の閾値を共有するポリゴンをマージするオプションを指定します。 このオプションは複数の施設に対してポリゴンを生成するときにのみ適用できます。
NO_MERGE—施設ごとに別々のポリゴンが作成されます。 各ポリゴンはオーバーラップすることができます。
NO_OVERLAP—施設ごとに異なるポリゴンが生成されます。 各ポリゴンはオーバーラップすることはありません。
MERGE—同じ閾値を持つ複数の施設のポリゴンが結合されます。
|
String
|
|
nesting_type
(オプション)
|
同心状の到達圏ポリゴンをディスク状に作成するか、またはリング状に作成するかを指定します。 このオプションは、施設に対して複数のブレーク値が指定されている場合にのみ適用されます。
RINGS—小さい閾値の領域を含みません。 連続するブレーク値の間の領域に、ポリゴンが作成されます。 あるブレーク値から別のブレーク値までの領域を検索する場合に、このオプションを使用します。
DISKS—施設から閾値までの領域を含むポリゴンが生成されます。 たとえば、5 分間の到達圏と 10 分間の到達圏を生成する場合、5 分間の到達圏ポリゴンが 10 分間の到達圏ポリゴンに含められます。 施設から閾値までの領域全体を表示する場合に、各閾値に対してこのオプションを使用します。
|
String
|
|
line_type
(オプション)
|
到達圏解析に基づいて生成されるラインのタイプを指定します。 大きな到達圏に TRUE_LINES オプションまたは TRUE_LINES_WITH_MEASURES オプションを選択すると、解析に使用されるメモリー量が増加します。
NO_LINES—ラインを作成しません。 これがデフォルトです。
TRUE_LINES—メジャー値を含まないラインが作成されます。
TRUE_LINES_WITH_MEASURES—メジャー値を含むラインが作成されます。 このメジャー値は、中間点を補間するエッジの両端におけるインピーダンス値に基づいて生成されます。 高速なパフォーマンスが必要な場合は、このオプションを使用しないでください。
|
String
|
|
overlap
(オプション)
|
到達圏ラインが計算される際にオーバーラップするラインを生成するかどうかを決定します。
|
Boolean
|
|
split
(オプション)
|
ライン フィーチャをブレーク値で分割するかどうかを決定します。
|
Boolean
|
|
excluded_source_name
[excluded_source_name,...]
(オプション)
|
ポリゴン生成時に除外するネットワーク ソースの一覧を指定します。 除外されるソースのトレースされたエレメントのジオメトリーは、すべてのポリゴンから除外されます。
ポリゴンの精度が損なわれるため、または到達圏解析にそれほど重要ではないため、ポリゴン生成に含めたくないネットワーク ソースがある場合に役立ちます。 たとえば、道路および線路の複合ネットワークで走行時間の到達圏を作成する場合、ポリゴン生成から線路を除外するように選択すると、車両が通行できるモデルが正確に生成されます。
到達圏ポリゴンからネットワーク ソースを除外しても、そのソースの通行が防止されるわけではありません。 到達圏ポリゴンからソースを除外した場合、到達圏ポリゴンの形状のみに影響が生じます。 特定のネットワーク ソースの通行を防止する場合は、ネットワーク データセットの定義時に適切な規制を作成する必要があります。
|
String
|
|
accumulate_attribute_name
[accumulate_attribute_name,...]
(オプション)
|
解析中に累積されるコスト属性のリスト。 これらの累積属性は、参考情報としてのみ使用されます。解析では、インピーダンス属性 パラメーターで指定されているコスト属性のみを使用してルートを計算します。
累積されるコスト属性ごとに、解析で出力されたルートに Total_ [Impedance] プロパティが追加されます。
|
String
|
|
UTurn_policy
(オプション)
|
ジャンクションで使用される U ターン ポリシーを指定します。 U ターンを許可するということは、解析においてジャンクションで方向転換し、同じ道路を引き返すことができるということを意味します。 ジャンクションが道路の交差と行き止まりを表すことを前提に、さまざまな車両が、一部のジャンクションでは方向転換でき、他のジャンクションでは方向転換できない、というように設定できます。これは、ジャンクションが交差と行き止まりのどちらを表すかによって変わります。 これに対応するには、ジャンクションに接続するエッジの数 (ジャンクションでのノードへの接続数) によって、暗黙的に U ターン ポリシーを指定します。 以下では、このパラメーターで選択できる値と、ジャンクションの接続におけるそれぞれの意味について示します。
U ターン ポリシーをさらに正確に定義する必要がある場合、グローバル ターン遅延エバリュエーターをネットワーク コスト属性に追加するか、すでに存在する場合はそれを調整することを検討してください。その際、逆ターンの設定には特に注意が必要です。 また、ネットワーク ロケーションの CurbApproach プロパティも設定できます。
ALLOW_UTURNS—任意の数の接続されたエッジを持つジャンクションで U ターンを許可します。 これがデフォルト値です。
NO_UTURNS—ジャンクションの接続にかかわらず、すべてのジャンクションで U ターンを禁止します。 ただし、このオプションが指定されている場合でも、ネットワーク ロケーションでは U ターンが許可されます。同様に、個々のネットワーク ロケーションの CurbApproach プロパティで U ターンを禁止するように設定できます。
ALLOW_DEAD_ENDS_ONLY—1 つの隣接エッジを持つジャンクション (行き止まり) を除くすべてのジャンクションでの U ターンを禁止します。
ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY—2 つの隣接するエッジが接するジャンクションでの U ターンを禁止します。ただし、交差点 (3 つ以上の隣接エッジを持つジャンクション) および行き止まり (1 つの隣接エッジを持つジャンクション) では U ターンを許可します。 ネットワークには、道路セグメントの中間に無関係のジャンクションが存在する場合があります。 このオプションは、これらの場所で車両が U ターンすることを防ぎます。
|
String
|
|
restriction_attribute_name
[restriction_attribute_name,...]
(オプション)
|
解析中に適用される規制属性のリスト。
|
String
|
|
polygon_trim
(オプション)
|
出力ポリゴンを切詰めるかどうか。
|
Boolean
|
|
poly_trim_value
(オプション)
|
到達圏ポリゴンが切詰められる距離の範囲を指定します。 パラメーターには距離の値と単位が含まれます。 デフォルト値は 100 メートルです。
|
Linear Unit
|
|
lines_source_fields
(オプション)
|
ネットワーク ソースのフィールドを出力ラインに含めるかどうか。
LINES_SOURCE_FIELDS—SourceID フィールド、SourceOID フィールド、FromPosition フィールド、ToPosition フィールドを到達圏ラインに追加して、解析中にトレースするソース フィーチャに関する情報を格納します。 これは、到達圏ラインの結果を元のソース データに結合するのに役立ちます。
NO_LINES_SOURCE_FIELDS—ソース フィールド (SourceID、SourceOID、FromPosition、ToPosition) を到達圏ラインに追加しません。
|
Boolean
|
|
hierarchy
(オプション)
|
解析を実行するネットワーク データセットに使用する階層属性が定義されていない場合、このパラメーターは使用されません。
USE_HIERARCHY—階層属性が解析に使用されます。 階層を使用すると、解析は下位ランクのエッジよりも上位ランクのエッジを優先します。 階層解析は、より高速で、運転者が遠回りであっても一般道路よりも高速道路を利用する状況をシミュレートするのに使用できます。 このオプションは入力ネットワーク データセットが階層属性を持つ場合のみ有効です。
NO_HIERARCHY—階層属性は解析に使用されず、階層レベルに関係なく、ネットワーク データセットのすべてのエッジで計測された到達圏が出力されます。
|
Boolean
|
|
time_of_day
(オプション)
|
到達圏レイヤーの施設からの出発時間または到着時間です。 この値が出発時間と到着時間のどちらに解釈されるかは、施設への移動方向に依存します。
交通量ベースのインピーダンス属性を選択した場合、ここで指定した時刻での動的な交通状況に対する解決策が生成されます。 日時は、2012/05/14 10:30 のように指定できます。
特定の日付を使用する代わりに、次の日付を使用して曜日を指定できます。
Today—12/30/1899
Sunday—12/31/1899
Monday—1/1/1900
Tuesday—1/2/1900
Wednesday—1/3/1900
Thursday—1/4/1900
Friday—1/5/1900
Saturday—1/6/1900
たとえば、移動を火曜日の午後 5:00 に開始するよう指定するには、パラメーター値を 1/2/1900 5:00 PM に指定します。
同じ解析を時刻の値を変えて繰り返し実行します。これにより、時間の経過に伴う施設の到着時間の変化を確認できます。 たとえば、消防署から 5 分間の到達圏は、早朝には大きくなり、混雑する朝の時間帯は縮小し、朝の遅い時間帯には拡大するなど、一日を通して変化します。
|
Date
|
派生した出力
|
名前
|
説明
|
データ タイプ
|
|
output_layer
|
新しく作成されたネットワーク解析レイヤー。
|
Network Analyst Layer
|
コードのサンプル
MakeServiceAreaLayer の例 1 (Python ウィンドウ)
必須パラメーターのみを使用して、ツールを実行します。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaLayer(network, "FireStationCoverage", "TravelTime")
MakeServiceAreaLayer の例 2 (Python ウィンドウ)
すべてのパラメーターを使用してツールを実行します。
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaLayer(network, "WarehouseCoverage", "DriveTime",
"TRAVEL_FROM", "5 10 15", "SIMPLE_POLYS",
"NO_OVERLAP", "RINGS", "TRUE_LINES",
"NON_OVERLAP", "NO_SPLIT",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"],
["Meters", "DriveTime"], "ALLOW_DEAD_ENDS_ONLY",
["Oneway"], "NO_TRIM_POLYS", "",
"LINES_SOURCE_FIELDS")
MakeServiceAreaLayer の例 3 (ワークフロー)
次のスタンドアロン Python スクリプトは、MakeServiceAreaLayer 関数を使用して消防署から 1 分、2 分、3 分以内の到達圏を生成する方法を示しています。
# Name: MakeServiceAreaLayer_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:
#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"
impedance = "TravelTime"
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 as we can determine the
#number of fire stations that cover a given location. We use hierarchy to
#speed up the time taken to create the polygons. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaLayer(network, layer_name,
impedance, "TRAVEL_FROM", "1 2 3",
"DETAILED_POLYS", "NO_MERGE", "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)))
MakeServiceAreaLayer の例 4 (ワークフロー)
この例は、複数の時刻において施設の周りに到達圏を作成する方法、および入力フィーチャから出力フィーチャにフィールドを移し、既存のフィーチャクラスに出力ポリゴンをアペンドする方法を示しています。
# Name: MakeServiceAreaLayer_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
import datetime
try:
#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")
impedance = "TravelTime"
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.MakeServiceAreaLayer(network, layer_name,
impedance, "TRAVEL_FROM", "3",
"DETAILED_POLYS", "NO_MERGE",
hierarchy = "NO_HIERARCHY")
#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, "",
exclude_restricted_elements = "EXCLUDE")
# 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))