arcpy.na.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}, {ignore_invalid_locations}, {analysis_geodatabase}, {analysis_feature_dataset_name})
|
名前
|
説明
|
データ タイプ
|
|
network_data_source
|
ネットワーク解析が実行されるネットワーク データセットまたはサービス。
このパラメーターは、次のいずれかを使用して指定できます。
ポータル URL を使用するには、ルート検索権限があるアカウントでポータルにサイン インする必要があります。
Python でポータルにサイン インする方法の詳細
ルート検索サービスを使用したネットワーク解析についての詳細
ArcGIS Online を使用してルート検索サービスが入力ネットワークとして構成されている ArcGIS Online または ArcGIS Enterprise ポータルを使用している場合、解析を実行するとクレジットが消費され、特定の制限 (許可された入力の数など) の対象になります。
ネットワーク解析におけるクレジット消費量と解析の制限の詳細
|
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
(オプション)
|
到達圏レイヤーの施設からの出発時間または到着時間です。 この値が出発時間と到着時間のどちらに解釈されるかは、施設への移動方向に依存します。
このパラメーターは、動的な交通状況など、時間とともに変化するインピーダンス属性を使用する移動モードに基づいて到達できる道路を検索する場合に最も便利です。 このパラメーターの値を変えて同じ解析を実行すると、時間の経過に伴う施設の到着時間の変化を確認できます。 たとえば、消防署から 5 分の到達圏は、早朝には大きくなり、混雑する朝の時間帯は縮小し、朝の遅い時間帯には拡大するなど、一日を通して変化します。
日時は、2015/10/21 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
ネットワーク解析での日時の使用と解釈の詳細
|
Date
|
|
time_zone
(オプション)
|
時刻パラメーターのタイム ゾーンを指定します。
LOCAL_TIME_AT_LOCATIONS—時刻パラメーターは、施設がある場所のタイム ゾーンを使用します。 到達圏の開始または終了時間には、タイム ゾーンによってずれが生じます。 これがデフォルトです。たとえば、時刻を午前 9 時に設定すると、解析によって、東部標準時ゾーン内の施設では東部標準時の午前 9 時、中央標準時ゾーン内の施設では中央標準時の午前 9 時、山地標準時ゾーン内の施設では山地標準時の午前 9 時について (以下同様に)、到達圏が生成されます。 米国全体でチェーン展開されている店舗が現地時間の午前 9 時に開店する場合、このパラメーター値を選択すると、1 つの解析ですべての店舗の開店時刻におけるマーケット領域が検出されます。 最初に、東部標準時ゾーン内の店舗が開店し、ポリゴンが生成されます。 1 時間遅れて、中央標準時ゾーン内の店舗が開店します。 9 時は常に現地時間ですが、実時間ではずれが発生することになります。
UTC—時刻パラメーターが、UTC (協定世界時) を参照します。 施設の場所のタイム ゾーンに関係なく、施設への到着または施設からの出発はすべての施設で同時になります。時刻を午後 2 時に設定すると、解析によって、東部標準時ゾーン内の施設では東部標準時の午前 9 時、中央標準時ゾーン内の施設では中央標準時の午前 8 時、山地標準時ゾーン内の施設では山地標準時の午前 7 時について (以下同様に)、到達圏が生成されます。
注意:
上記のシナリオは、標準時を想定しています。 サマー タイム中、東部時間、中部時間、および山岳部時間は、それぞれ 1 時間進められます (つまり、それぞれ午前 10 時、9 時、および 8 時になります)。
UTC オプションが便利なケースの 1 つは、2 つのタイム ゾーンに分割された行政区域の緊急対応範囲の視覚化です。 緊急車両は施設として読み込まれます。 時刻は UTC で現在に設定されます。 (このオプションを正しく使用するには、現在の日時が UTC で何日の何時になるかを確認する必要があります)。他のプロパティが設定され、解析が実行されます。 タイム ゾーン境界によって車両が分割されている場合でも、結果には現在の交通状況で到達できるエリアが示されます。 この同じプロセスを、現在だけではなく、他の時刻にも使用できます。
|
String
|
|
output_type
(オプション)
|
生成される出力のタイプを指定します。 到達圏の出力は、カットオフを超えるまで到達可能な道路を表すライン フィーチャ、またはこれらのラインを囲む (到達可能なエリアを表す) ポリゴン フィーチャです。
ネットワーク データ ソースが、ラインの生成に対応していない Portal for ArcGIS のバージョンのサービスである場合、ライン出力タイプとポリゴンとライン出力タイプは使用できません。
POLYGONS—到達圏の出力には、ポリゴンのみが含まれます。 これがデフォルトです。
LINES—到達圏の出力には、ラインのみが含まれます。
POLYGONS_AND_LINES—到達圏の出力には、ポリゴンとラインが含まれます。
|
String
|
|
polygon_detail
(オプション)
|
出力ポリゴンの詳細レベルを指定します。
解析する市街地の道路網が格子状であれば、単純化されたポリゴンと詳細なポリゴンの違いはあまりありません。 ただし、山間部や地方の道路では、単純化されたポリゴンよりも標準および高精度のポリゴンのほうが高い精度の結果を提供できます。
STANDARD—標準的な詳細レベルのポリゴンを作成します。 これがデフォルトです。
GENERALIZED—結果を早く作成するために、ネットワークの階層属性を使用して、単純化ポリゴンを作成します。 ネットワークに階層属性がないと、このオプションは使用できません。
HIGH—正確な結果が重要となるアプリケーションのために、より高い詳細レベルのポリゴンを作成します。
|
String
|
|
geometry_at_overlaps
(オプション)
|
互いに関連する複数の施設から出力された到達圏の動作を指定します。
OVERLAP—施設ごとに別々のポリゴンまたはラインのセットが作成されます。 ポリゴンまたはラインはオーバーラップすることができます。 これがデフォルトです。
DISSOLVE—同じカットオフ値を持つ複数の施設のポリゴンが 1 つのポリゴンに結合されます。 このパラメーターは、ライン出力には適用されません。
SPLIT—エリアは最寄り施設に割り当てられるため、ポリゴンまたはラインはオーバーラップしません。
|
String
|
|
geometry_at_cutoffs
(オプション)
|
複数のカットオフ値が指定されているときに、1 つの施設に対して出力された到達圏の動作を指定します。 このパラメーターは、ライン出力には適用されません。
RINGS—各ポリゴンは、連続するカットオフ値の間にあるエリアのみを含みます。 施設と小さい方のカットオフの間にあるエリアは含まれません。 たとえば、5 分の到達圏と 10 分の到達圏を生成する場合、5 分の到達圏ポリゴンには 0 ~ 5 分で到達可能なエリア、10 分の到達圏ポリゴンには 5 ~ 10 分で到達可能なエリアが含まれます。 これがデフォルトです。
DISKS—各ポリゴンには、施設からカットオフ値までに到達可能なエリアが含まれます。小さい方のカットオフ値までに到達可能なエリアも含まれます。 たとえば、5 分の到達圏と 10 分の到達圏を生成する場合、5 分の到達圏ポリゴンが 10 分の到達圏ポリゴンに含められます。
|
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
|
|
ignore_invalid_locations
(オプション)
|
無効な入力ロケーションを除外するかどうかを指定します。 通常、ネットワーク上で特定できないロケーションは無効になります。 無効なロケーションを除外する場合は、そのロケーションがスキップされ、残りのロケーションを使用して解析が実行されます。
|
Boolean
|
|
analysis_geodatabase
(オプション)
|
新しいネットワーク解析レイヤーのサブレイヤー データが格納されるファイル ジオデータベース ワークスペース。 このパラメーターが指定されていない場合、サブレイヤー データは、通常プロジェクト ジオデータベースである 現在のワークスペース ジオプロセシング環境に作成されます。
ネットワーク解析レイヤーの解析データ ソースの詳細
|
Workspace
|
|
analysis_feature_dataset_name
(オプション)
|
ネットワーク解析レイヤーのサブレイヤー データを格納するために、このツールが解析ジオデータベースに作成する新しいフィーチャ データセットに使用する名前。 指定しない場合、ランダムな一意の名前を使用してフィーチャ データセットが作成されます。
ネットワーク解析レイヤーの解析データ ソースの詳細
|
String
|
派生した出力
|
名前
|
説明
|
データ タイプ
|
|
out_network_analysis_layer
|
新しく作成されたネットワーク解析レイヤー。
|
Network Analyst Layer
|
コードのサンプル
MakeServiceAreaAnalysisLayer の例 1 (Python ウィンドウ)
必須パラメーターのみを使用して、ツールを実行します。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "FireStationCoverage")
MakeServiceAreaAnalysisLayer の例 2 (Python ウィンドウ)
すべてのパラメーターを使用してツールを実行します。
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"])
MakeServiceAreaAnalysisLayer の例 3 (ワークフロー)
次のスタンドアロン スクリプトは、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:
#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))
MakeServiceAreaAnalysisLayer の例 4 (ワークフロー)
この例は、複数の時刻において施設の周りに到達圏を作成する方法、および入力フィーチャから出力フィーチャにフィールドを移し、既存のフィーチャクラスに出力ポリゴンをアペンドする方法を示しています。
レガシー:
GetNASublayer 関数を使用して、ネットワーク解析レイヤーのサブレイヤーを取得できます。 これは ArcGIS Pro 2.7 で導入されました。 以前のソフトウェア バージョンでは、サブレイヤー名をワイルドカードとして使用するネットワーク解析の Layer オブジェクトの listLayers メソッドを使用することがネットワーク解析レイヤーのサブレイヤー オブジェクトを取得する最適な方法でした。
# 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
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")
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 = arcpy.na.GetNASublayer(layer_object, "Facilities")
polygons_sublayer = arcpy.na.GetNASublayer(layer_object, "SAPolygons")
# 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))