arcpy.na.MakeRouteLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {find_best_order}, {ordering_type}, {time_windows}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape}, {start_date_time})
|
名前
|
説明
|
データ タイプ
|
|
in_network_dataset
|
ルート解析が実行されるネットワーク データセット。
|
Network Dataset Layer
|
|
out_network_analysis_layer
|
作成するルート ネットワーク解析レイヤーの名前。
|
String
|
|
impedance_attribute
|
解析でインピーダンスとして使用されるコスト属性。
|
String
|
|
find_best_order
(オプション)
|
最適ルートの計算時に、入力ストップを特定の順序で巡回する必要があるかどうかを指定します。 このオプションにより、ルート解析は最短パス問題から巡回セールスマン問題に変わります。
|
Boolean
|
|
ordering_type
(オプション)
|
FIND_BEST_ORDER を使用するときに、ストップの順番を指定します。
PRESERVE_BOTH—入力の順序に従って最初と最後のストップをルートの最初と最後のストップとして維持します。
PRESERVE_FIRST—入力の順序に従って最初のストップをルートの最初のストップとして維持します。ただし、最後のストップは並べ替えることができます。
PRESERVE_LAST—入力の順序に従って最後のストップをルートの最後のストップとして維持します。ただし、最初のストップは並べ替えることができます。
PRESERVE_NONE—最初のストップと最後のストップは保持されませんが、並べ替えることができます。
|
String
|
|
time_windows
(オプション)
|
ストップでタイム ウィンドウが使用されるかどうかを指定します。
USE_TIMEWINDOWS—ルートはストップのタイム ウィンドウを考慮します。 ストップにタイム ウィンドウ以前に到着した場合、タイム ウィンドウが開始するまで待ち時間が発生します。 ストップにタイム ウィンドウ以後に到着した場合、タイム ウィンドウ違反になります。 ルート計算時には、タイム ウィンドウ超過時間の合計は最小のインピーダンスになるよう分散されます。 これはインピーダンスが時間単位のときのみ有効なオプションです。
NO_TIMEWINDOWS—ルートはストップのタイム ウィンドウを無視します。 これがデフォルトです。
|
Boolean
|
|
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
|
|
hierarchy
(オプション)
|
解析を実行するネットワーク データセットに使用する階層属性が定義されていない場合、このパラメーターは使用されません。
USE_HIERARCHY—階層属性が解析に使用されます。 階層を使用すると、解析は下位ランクのエッジよりも上位ランクのエッジを優先します。 階層解析は、より高速で、運転者が遠回りであっても一般道路よりも高速道路を利用する状況をシミュレートするのに使用できます。 このオプションは入力ネットワーク データセットが階層属性を持つ場合のみ有効です。
NO_HIERARCHY—階層属性は解析に使用されず、ネットワーク データセットの正確なルートが出力されます。
|
Boolean
|
|
hierarchy_settings
(オプション)
|
レガシー:
10 より前のバージョンでは、このパラメーターによって、解析のためにネットワーク データセット構築時のデフォルトの階層範囲から階層範囲の変更を行うことを許可していました。 バージョン 10 では、このパラメーターはサポートされていないため、空の文字列を指定する必要があります。 解析のために階層範囲を変更するには、ネットワーク データセットのデフォルトの階層範囲を更新します。
|
Network Analyst Hierarchy Settings
|
|
output_path_shape
(オプション)
|
解析で出力されるルート フィーチャに使用される形状タイプを指定します。
指定した出力形状のタイプに関係なく、常に最適なルートはユークリッド距離ではなくネットワーク インピーダンスによって決定されます。 これは、ルート形状のみが異なり、ネットワークの基となっているトラバースは同じであることを意味します。
TRUE_LINES_WITH_MEASURES—出力ルートはネットワーク ソースの正確な形状を保持します。 リニア リファレンスのためのルートのメジャー値が出力に含まれます。 メジャー値は、最初のストップから増加し、指定された位置に到着するまでの累積インピーダンスを記録します。
TRUE_LINES_WITHOUT_MEASURES—出力ルートはネットワーク ソースの正確な形状を保持します。
STRAIGHT_LINES—出力ルート形状はストップ間を結ぶ 1 本の直線になります。
NO_LINES—出力ルートに形状は生成されません。
|
String
|
|
start_date_time
(オプション)
|
ルートの開始日時。 ルートの開始時間は一般的に、1 日の時刻に応じて変化するインピーダンス属性に基づいたルートの検索に使用されます。 たとえば、混雑時の交通量を考慮したルートの検索では、開始時間として午前 7 時を使用します。 このパラメーターのデフォルト値は、午前 8 時です。 日付と時間は 2005/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
たとえば、移動を火曜日の 5:00 PM に開始するよう指定するには、パラメーター値を 1900/1/2 5:00 PM に指定します。
解析後、出力ルートにはルートの開始時間と終了時間が挿入されます。 これらの開始時間と終了時間は、ルート案内の生成時にも使用されます。
ネットワーク解析での日時の使用と解釈の詳細
|
Date
|
派生した出力
|
名前
|
説明
|
データ タイプ
|
|
output_layer
|
新しく作成されたネットワーク解析レイヤー。
|
Network Analyst Layer
|
コードのサンプル
MakeRouteLayer の例 1 (Python ウィンドウ)
必須パラメーターのみを使用して、ツールを実行します。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteLayer(network, "WorkRoute", "TravelTime")
MakeRouteLayer の例 2 (Python ウィンドウ)
すべてのパラメーターを使用してツールを実行します。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteLayer(network, "InspectionRoute", "TravelTime",
"FIND_BEST_ORDER", "PRESERVE_BOTH", "USE_TIMEWINDOWS",
["Meters", "TravelTime"],
"ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY", ["Oneway"],
"USE_HIERARCHY", "", "TRUE_LINES_WITH_MEASURES",
"1/1/1900 9:00 AM")
MakeRouteLayer の例 3 (ワークフロー)
次のスタンドアロン Python スクリプトは、MakeRouteLayer 関数を使用して、ジオコーディングされたストップ ロケーションを巡回する最適ルートを検索する方法を示しています。
# Name: MakeRouteLayer_Workflow.py
# Description: Find a best route to visit the stop locations and save the
# route to a layer file. The stop locations are geocoded from a
# text file containing the addresses.
# 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 = "BestRoute"
impedance = "TravelTime"
address_locator = os.path.join(input_gdb, "SanFranciscoLocator")
address_table = "C:/Data/StopAddresses.csv"
address_fields = "Street Address;City City;State State;ZIP <None>"
out_stops = "GeocodedStops"
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new Route layer. For this scenario, the default values for all the
#remaining parameters statisfy the analysis requirements
result_object = arcpy.na.MakeRouteLayer(network, layer_name, impedance)
#Get the layer object from the result object. The route layer can now be
#referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the route layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
stops_layer_name = sublayer_names["Stops"]
#Geocode the stop locations from a csv file containing the addresses.
#The Geocode Addresses tool can use a text or csv file as input table
#as long as the first line in the file contains the field names.
arcpy.geocoding.GeocodeAddresses(address_table, address_locator,
address_fields, out_stops)
#Load the geocoded address locations as stops mapping the address field from
#geocoded stop features as Name property using field mappings.
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
stops_layer_name)
field_mappings["Name"].mappedFieldName = "Address"
arcpy.na.AddLocations(layer_object, stops_layer_name, out_stops,
field_mappings, "",
exclude_restricted_elements="EXCLUDE")
#Solve the route layer, ignoring any invalid locations such as those that
#cannot be geocoded
arcpy.na.Solve(layer_object, "SKIP")
#Save the solved route 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))
MakeRouteLayer の例 4 (ワークフロー)
この例では、1 つの解析で複数のルートを作成します。これは多くの場合、起点と終点の間の距離または運転時間の計算に使用されます。
# Name: MakeRouteLayer_MultiRouteWorkflow.py
# Description: Calculate the home-work commutes for a set of people and save
# the output to a feature class
# Requirements: Network Analyst extension
#Import system modules
import arcpy
from arcpy import env
import datetime
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")
stops_home = os.path.join(input_gdb, "Analysis", "Commuters_Home")
stops_work = os.path.join(input_gdb, "Analysis", "Commuters_Work")
layer_name = "Commuters"
out_routes_featureclass = "Commuter_Routes"
impedance = "TravelTime"
#Set the time of day for the analysis to 8AM on a generic Monday.
start_time = datetime.datetime(1900, 1, 1, 8, 0, 0)
#Create a new Route layer. Optimize on TravelTime, but compute the
#distance traveled by accumulating the Meters attribute.
result_object = arcpy.na.MakeRouteLayer(network, layer_name, impedance,
accumulate_attribute_name=["Meters"],
hierarchy="NO_HIERARCHY",
start_date_time=start_time)
#Get the layer object from the result object. The route layer can now be
#referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the route layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
stops_layer_name = sublayer_names["Stops"]
routes_layer_name = sublayer_names["Routes"]
#Before loading the commuters' home and work locations as route stops, set
#up field mapping. Map the "Commuter_Name" field from the input data to
#the RouteName property in the Stops sublayer, which ensures that each
#unique Commuter_Name will be placed in a separate route. Matching
#Commuter_Names from stops_home and stops_work will end up in the same
#route.
field_mappings = arcpy.na.NAClassFieldMappings(layer_object, stops_layer_name)
field_mappings["RouteName"].mappedFieldName = "Commuter_Name"
#Add the commuters' home and work locations as Stops. The same field mapping
#works for both input feature classes because they both have a field called
#"Commuter_Name"
arcpy.na.AddLocations(layer_object, stops_layer_name, stops_home,
field_mappings, "",
exclude_restricted_elements = "EXCLUDE")
arcpy.na.AddLocations(layer_object, stops_layer_name, stops_work,
field_mappings, "", append="APPEND",
exclude_restricted_elements = "EXCLUDE")
#Solve the route layer.
arcpy.na.Solve(layer_object)
# Get the output Routes sublayer and save it to a feature class
routes_sublayer = layer_object.listLayers(routes_layer_name)[0]
arcpy.management.CopyFeatures(routes_sublayer, out_routes_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))