arcpy.na.MakeVehicleRoutingProblemAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {time_units}, {distance_units}, {default_date}, {time_zone_for_time_fields}, {line_shape}, {time_window_factor}, {excess_transit_factor}, {generate_directions_on_solve}, {spatial_clustering}, {ignore_invalid_locations}, {analysis_geodatabase}, {analysis_feature_dataset_name})
|
名前
|
説明
|
データ タイプ
|
|
network_data_source
|
ネットワーク解析が実行されるネットワーク データセットまたはサービス。
このパラメーターは、次のいずれかを使用して指定できます。
ポータル URL を使用するには、ルート検索権限があるアカウントでポータルにサイン インする必要があります。
Python でポータルにサイン インする方法の詳細
ルート検索サービスを使用したネットワーク解析についての詳細
ArcGIS Online を使用してルート検索サービスが入力ネットワークとして構成されている ArcGIS Online または ArcGIS Enterprise ポータルを使用している場合、解析を実行するとクレジットが消費され、特定の制限 (許可された入力の数など) の対象になります。
ネットワーク解析におけるクレジット消費量と解析の制限の詳細
このネットワークには、インピーダンス属性が時間単位の移動モードが少なくとも 1 つ必要です。
|
Network Dataset Layer; String
|
|
layer_name
(オプション)
|
作成する VRP ネットワーク解析レイヤーの名前。
|
String
|
|
travel_mode
(オプション)
|
解析で使用する移動モードの名前。 移動モードは、移動規制や U ターン ポリシーなど、歩行者、車、トラック、その他の交通手段がネットワークをどのように移動するかを決定するネットワーク設定のコレクションを表します。 移動モードは、ネットワーク データ ソースに対して定義されます。 arcpy.na.TravelMode オブジェクトおよび移動モードの有効な JSON 表現を含む文字列もパラメーターの入力として使用できます。
移動モードには、時間単位を持つインピーダンス属性が必要です。
|
String
|
|
time_units
(オプション)
|
解析レイヤーのサブレイヤーおよびテーブル (ネットワーク解析のクラス) の時間的なフィールドで使用される時間の単位を指定します。 この値は、時間コスト属性の単位と一致する必要はありません。
コスト属性の詳細
|
String
|
|
distance_units
(オプション)
|
解析レイヤーのサブレイヤーおよびテーブル (ネットワーク解析のクラス) の距離的なフィールドで使用される距離の単位を指定します。 この値は、オプションである距離コスト属性の単位と一致する必要はありません。
コスト属性の詳細
Miles—距離の単位はマイルです。 これがデフォルトです。
Kilometers—距離の単位はキロメートルです。
Feet—距離の単位はフィートです。
Yards—距離の単位はヤードです。
Meters—距離の単位はメートルです。
Inches—距離の単位はインチです。
Centimeters—距離の単位はセンチメートルです。
Millimeters—距離の単位はミリメートルです。
Decimeters—距離の単位はデシメートルです。
NauticalMiles—距離の単位は海里です。
|
String
|
|
default_date
(オプション)
|
時間フィールド値として日付が指定されない場合の日付。 訪問先オブジェクトに対する時間フィールド (TimeWindowStart など) が時刻のみを示す値である場合、日付はデフォルトの日付となります。 時間フィールド値として特定の日付がすでに指定されている場合、デフォルトの日付は無効になります。
特定の静的な日付の代わりに曜日または現在の日付をモデル化するには、次のいずれかの特殊な日付を使用するように解析を構成します。
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_for_time_fields
(オプション)
|
このツールでサポートされている入力日時フィールドに使用されるタイム ゾーンを指定します。
UTC 形式での日時の値の指定は、訪問先や拠点があるタイム ゾーンが不明な場合や、訪問先と拠点が複数のタイム ゾーンに分散しているときに、すべての日時の値を同時に開始する必要がある場合に役立ちます。 UTC オプションは、ネットワーク データセットでタイム ゾーン属性が定義されている場合のみ適用されます。 定義されていない場合、すべての日時の値はその場所に対応するタイム ゾーンと見なされます。
LOCAL_TIME_AT_LOCATIONS—訪問先または拠点に関連付けられた日時の値は、それらの訪問先と拠点のタイム ゾーンにあります。 ルートの場合、日時の値は、ルートの開始拠点があるタイム ゾーンをベースとします。 ルートの開始拠点がない場合は、全ルートにわたるすべての訪問先と拠点が、1 つのタイム ゾーンにある必要があります。 休憩の場合、日時の値は、ルートのタイム ゾーンをベースとします。 これがデフォルトです。
UTC—訪問先または拠点に関連付けられた日時の値は、UTC (協定世界時) 形式であり、それらの訪問先や拠点のタイム ゾーンをベースとしません。
|
String
|
|
line_shape
(オプション)
|
解析で出力されるルート フィーチャに使用される形状タイプを指定します。
指定した出力形状のタイプに関係なく、常に最適なルートはユークリッド距離ではなくネットワーク インピーダンスによって決定されます。 これは、ルート形状のみが異なり、ネットワークの基となっているトラバースは同じであることを意味します。
ALONG_NETWORK—出力ルートはネットワーク ソースの正確な形状を保持します。 リニア リファレンスのためのルートのメジャー値が出力に含まれます。 メジャー値は、最初のストップから増加し、指定された位置に到着するまでの累積インピーダンスを記録します。
NO_LINES—出力ルートに形状は生成されません。
STRAIGHT_LINES—出力ルートの形状が各ストップ間を結ぶ 1 本の直線になります。選択したネットワーク データ ソースがサービスの場合、このオプションは使用できません。
|
String
|
|
time_window_factor
(オプション)
|
違反が発生しないタイム ウィンドウの重要度を指定します。 タイム ウィンドウ違反は、タイム ウィンドウが閉じてから訪問先、拠点、または休憩にルートが到着した場合に発生します。 この超過時間は、タイム ウィンドウの終了からルートの到着時間までの時間です。
High—全体の移動時間の増大を無視して、タイム ウィンドウ違反を最小にするソリューションを検索します。 全体のソリューション コストを最小にするよりも訪問先に時間どおりに到着することが重要である場合は、この設定を選択します。 訪問先で顧客と打ち合わせをする予定があり、遅刻して先方に迷惑をかけたくないという場合に使用します (別のオプションとして、超過が許されない厳格なタイム ウィンドウを使用することもできます)。配車ルートの他の制約が指定されている場合、タイム ウィンドウの期間内に立ち寄ることができない訪問先が出てくると考えられます。 この場合は、高 設定でも違反が発生することがあります。
Medium—タイム ウィンドウの条件を満たすことと、全体のソリューション コストを削減することのバランスを取ります。 これがデフォルトです。
Low—タイム ウィンドウを無視して、全体の移動時間を最小にするソリューションを検索します。 タイム ウィンドウの条件を満たすことが全体のソリューション コストを削減することより重要でない場合は、この設定を選択します。 未処理のサービス依頼が増えている場合は、この設定を使用すると便利です。 保有車両の到着が遅れて顧客に迷惑をかけることになっても、1 日にサービスを提供する訪問先の数を増やして手持ちの注文をさばくために、この設定を選択することができます。
|
String
|
|
excess_transit_factor
(オプション)
|
超過移動時間を減らすことの重要度を指定します。 超過移動時間とは、訪問先ペア間を直接移動するのに必要な時間に対する超過時間です。 この超過時間は、訪問先ペアへの立ち寄りの途中で、休憩を取ったり、他の訪問先や拠点に移動したりすることで発生します。 このパラメーターは、訪問先ペアを使用する場合のみ関連します。
訪問先ペアの詳細
High—全体の移動コストの増大を無視して、訪問先ペア間で超過移動時間が短いソリューションを検索します。 訪問先ペア間で人を輸送し、乗車時間を短くしたい場合にこの設定を使用します。 これは、タクシー サービスの特徴を示します。
Medium—超過移動時間を短縮することと、全体のソリューション コストを削減することのバランスを取ります。 これがデフォルトです。
Low—超過移動時間を無視して、全体のソリューション コストを最小にするソリューションを検索します。 この設定は、一般に、宅配サービスで使用されます。 宅配業者は、人ではなく荷物を輸送するので、一般に、乗車時間はそれほど重要ではありません。 宅配業者はこの設定を使用することで、訪問先ペアに適切な順序でサービスを提供し、全体のソリューション コストを最小にすることができます。
|
String
|
|
generate_directions_on_solve
(オプション)
|
解析を実行するときに、ルート案内を生成するかどうかを指定します。
ターンごとのルート案内を生成する必要のない解析では、ルート案内の生成をオフにすると、解析にかかる時間が短縮されます。
|
Boolean
|
|
spatial_clustering
(オプション)
|
空間クラスタリングを使用するかどうかを指定します。
CLUSTER—個別のルートに割り当てられた訪問先が、空間的にクラスタリングされます。 訪問先をクラスタリングすると、ルートを含む領域がより小さく保たれ、ルート ラインの交点数が減少する傾向がありますが、同時に、移動時間全体が増加する可能性があります。 これがデフォルトです。
NO_CLUSTER—解析で、訪問先を空間的にクラスタリングすることを優先せず、ルート ラインが交差することがあります。 ルート ゾーンを指定する場合は、このオプションを使用してください。
|
Boolean
|
|
ignore_invalid_locations
(オプション)
|
無効な入力ロケーションを除外するかどうかを指定します。
|
Boolean
|
|
analysis_geodatabase
(オプション)
|
新しいネットワーク解析レイヤーのサブレイヤー データが格納されるファイル ジオデータベース ワークスペース。 このパラメーターが指定されていない場合、サブレイヤー データは、通常プロジェクト ジオデータベースである 現在のワークスペース ジオプロセシング環境に作成されます。
ネットワーク解析レイヤーの解析データ ソースの詳細
|
Workspace
|
|
analysis_feature_dataset_name
(オプション)
|
ネットワーク解析レイヤーのサブレイヤー データを格納するために、このツールが解析ジオデータベースに作成する新しいフィーチャ データセットに使用する名前。 指定しない場合、ランダムな一意の名前を使用してフィーチャ データセットが作成されます。
ネットワーク解析レイヤーの解析データ ソースの詳細
|
String
|
派生した出力
|
名前
|
説明
|
データ タイプ
|
|
out_network_analysis_layer
|
新しいネットワーク解析レイヤー。
|
Network Analyst Layer
|
コードのサンプル
MakeVehicleRoutingProblemAnalysisLayer の例 1 (Python ウィンドウ)
必須パラメーターのみを使用して、ツールを実行します。
import arcpy
arcpy.env.workspace = "C:/Data/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemAnalysisLayer("Transportation/Streets_ND")
MakeVehicleRoutingProblemAnalysisLayer の例 2 (Python ウィンドウ)
すべてのパラメーターを使用してツールを実行します。
import arcpy
arcpy.env.workspace = "C:/Data/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemAnalysisLayer('Streets_ND', 'FridayRoutes',
'Driving Time', 'Minutes',
'Miles', '1/2/2020',
'LOCAL_TIME_AT_LOCATIONS',
'TRUE_LINES_WITHOUT_MEASURES',
'High', 'Medium', 'DIRECTIONS')
MakeVehicleRoutingProblemAnalysisLayer の例 3 (ワークフロー)
次のスタンドアロン Python スクリプトは、MakeVehicleRoutingProblemAnalysisLayer 関数を使用して複数の車両で訪問先にサービスを提供する方法を示しています。
# Name: MakeVRPAnalysisLayer_Ex3_Workflow.py
# Description: Find the best routes for a fleet of vehicles, which is operated
# by a distribution company, to deliver goods from a main
# distribution center to a set of grocery stores.
# Requirements: Network Analyst extension
# Import system modules
import arcpy
import os
try:
# Set environment settings
output_dir = r"C:\Data"
# The NA layer's data will be saved to the workspace specified here
arcpy.env.workspace = os.path.join(output_dir, "Output.gdb")
arcpy.env.overwriteOutput = True
# Set local variables
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "StoreDeliveryRoute"
travel_mode = "Driving Time"
time_units = "Minutes"
distance_units = "Miles"
in_orders = os.path.join(input_gdb, "Analysis", "Stores")
in_depots = os.path.join(input_gdb, "Analysis", "DistributionCenter")
in_routes = os.path.join(input_gdb, "Analysis", "Routes")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
# Create a new Vehicle Routing Problem (VRP) layer. Since the time-based
# attributes such as ServiceTime on orders and CostPerUnitTime on routes is
# recorded in minutes, we use minutes for time_units parameter. As we are
# using cost per unit distance in routes, we have to specify a distance
# attribute. The values for CosterPerUnitDistance are in miles, so we
# specify miles for distance units parameter
result_object = arcpy.na.MakeVehicleRoutingProblemAnalysisLayer(
network, layer_name, travel_mode, time_units, distance_units,
line_shape="STRAIGHT_LINES")
# Get the layer object form 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 VRP layer.
sub_layer_names = arcpy.na.GetNAClassNames(layer_object)
# Store the layer names that we will use later
orders_layer_name = sub_layer_names["Orders"]
depots_layer_name = sub_layer_names["Depots"]
routes_layer_name = sub_layer_names["Routes"]
# Load the store locations as orders. Using field mappings we map the
# TimeWindowStart1, TimeWindowEnd1, and DeliveryQuantities properties
# for Orders from the fields of store features and assign a value of
# 0 to MaxViolationTime1 property. The Name and ServiceTime properties
# have the correct mapped field names when using the candidate fields
# from store locations feature class.
candidate_fields = arcpy.ListFields(in_orders)
order_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, orders_layer_name, False, candidate_fields)
order_field_mappings["TimeWindowStart"].mappedFieldName = "TimeStart1"
order_field_mappings["TimeWindowEnd"].mappedFieldName = "TimeEnd1"
order_field_mappings["DeliveryQuantity_1"].mappedFieldName = "Demand"
order_field_mappings["MaxViolationTime"].defaultValue = 0
arcpy.na.AddLocations(layer_object, orders_layer_name, in_orders, order_field_mappings, "")
# Load the depots from the distribution center features. Using field mappings
# we map the Name properties for Depots from the fields of distribution
# center features and assign a value of 8 AM for TimeWindowStart1 and a
# value of 5 PM for TimeWindowEnd1 properties
depot_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, depots_layer_name)
depot_field_mappings["Name"].mappedFieldName = "Name"
depot_field_mappings["TimeWindowStart"].defaultValue = "8 AM"
depot_field_mappings["TimeWindowEnd"].defaultValue = "5 PM"
arcpy.na.AddLocations(layer_object, depots_layer_name, in_depots, depot_field_mappings, "")
# Load the routes from a table containing information about routes. In this
# case, since the fields on the routes table and property names for Routes
# are the same, we will just use the default field mappings
routes_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, routes_layer_name)
routes_field_mappings["Name"].mappedFieldName = "Name"
routes_field_mappings["StartDepotName"].mappedFieldName = "StartDepotName"
routes_field_mappings["EndDepotName"].mappedFieldName = "EndDepotName"
routes_field_mappings["StartDepotServiceTime"].mappedFieldName = "StartDepotServiceTime"
routes_field_mappings["Capacity_1"].mappedFieldName = "Capacities"
routes_field_mappings["CostPerUnitTime"].mappedFieldName = "CostPerUnitTime"
routes_field_mappings["CostPerUnitDistance"].mappedFieldName = "CostPerUnitDistance"
routes_field_mappings["MaxOrderCount"].mappedFieldName = "MaxOrderCount"
routes_field_mappings["MaxTotalTime"].mappedFieldName = "MaxTotalTime"
routes_field_mappings["MaxTotalTravelTime"].mappedFieldName = "MaxTotalTravelTime"
routes_field_mappings["MaxTotalDistance"].mappedFieldName = "MaxTotalDistance"
arcpy.na.AddLocations(layer_object, routes_layer_name, in_routes, routes_field_mappings, "")
# Solve the VRP layer
arcpy.na.Solve(layer_object)
# Save the solved VRP layer as a layer file on disk with relative paths
arcpy.management.SaveToLayerFile(layer_object, output_layer_file, "RELATIVE")
print("Script Completed Successfully")
except Exception as e:
# If an error occurred, print line number and error message
import traceback
import sys
tb = sys.exc_info()[2]
print("An error occurred on line %i" % tb.tb_lineno)
print(str(e))