概要
ルート ネットワーク解析レイヤーを作成し、解析プロパティを設定します。ルート解析レイヤーは、指定したネットワーク コストに基づいて、ネットワーク ロケーション間の最適ルートを決定する際に役立ちます。このレイヤーを作成するには、ローカル ネットワーク データセットを使用するか、オンラインでホストされたルート サービスまたはポータル内のルート サービスを使用します。
使用法
このツールで解析レイヤーを作成した後は、[ロケーションの追加 (Add Locations)] ツールを使用して解析レイヤーにネットワーク解析オブジェクトを追加し、[解析の実行 (Solve)] ツールを使用して解析を実行し、[レイヤー ファイルの保存 (Save To Layer File)] ツールを使用して結果をディスクに保存することができます。
このツールをジオプロセシング モデルに使用するときは、モデルをツールとして動作させる場合、出力ネットワーク解析レイヤーにモデル パラメーターを作成する必要があります。そうしないと、出力レイヤーはマップのコンテンツに追加されません。
ArcGIS Pro では、ネットワーク解析レイヤーのデータは、ディスク上のファイル ジオデータベースのフィーチャクラスに格納されます。プロジェクトでネットワーク解析レイヤーを作成する場合、レイヤーのデータは、現在のワークスペース環境の新しいフィーチャ データセット内に作成されます。Python スクリプトでネットワーク解析レイヤーを作成する場合、まず arcpy.env.workspace = "<path to file gdb>" を使用して、ワークスペース環境をレイヤーのデータを格納するファイル ジオデータベースに明示的に設定する必要があります。レイヤーが作成されるとき、適切なサブレイヤーのフィーチャクラスを含む新しいフィーチャ データセットがこのファイル ジオデータベースに追加されます。
構文
arcpy.na.MakeRouteAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {sequence}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes}, {generate_directions_on_solve}, {time_zone_for_time_fields})
パラメーター | 説明 | データ タイプ |
network_data_source | ネットワーク解析が実行されるネットワーク データセットまたはサービス。サービスのポータル URL を使用します。 | Network Dataset Layer;String |
layer_name (オプション) | 作成するネットワーク解析レイヤーの名前。 | String |
travel_mode (オプション) | 解析で使用する移動モードの名前。移動モードは、移動規制や U ターン ポリシーなど、歩行者、車、トラック、その他の交通手段がネットワークをどのように移動するかを決定するネットワーク設定のコレクションを表します。移動モードは、ネットワーク データ ソースに対して定義されます。 arcpy.na.TravelMode オブジェクトおよび移動モードの有効な JSON 表現を含む文字列もパラメーターの入力として使用できます。 | String |
sequence (オプション) | 最適ルートの計算時に、入力ストップを特定の順序で巡回する必要があるかどうかを指定します。このオプションにより、ルート解析は最短パス問題から巡回セールスマン問題に変わります。
| String |
time_of_day (オプション) | ルートの開始日時。ルートの開始時間は一般的に、1 日の時刻に応じて変化するインピーダンス属性に基づいたルートの検索に使用されます。たとえば、ラッシュアワーの交通量を考慮したルートの検索では、開始時間として午前 7 時を使用します。このパラメーターのデフォルト値は、午前 8 時です。日時は、2005/10/21 10:30 のように指定できます。ルートが複数日にわたり、開始時間のみが指定されている場合、現在の日付が使用されます。 特定の日付を使用する代わりに、次の日付を使用して曜日を指定することができます。
たとえば、移動を火曜日の 5:00 PM に開始するよう指定するには、パラメーター値を「1900/1/2 5:00 PM」に指定します。 解析後、出力ルートにはルートの開始時刻と終了時刻が挿入されます。このような開始時間と終了時間は、ルート案内の生成時にも使用されます。 | Date |
time_zone (オプション) | time_of_day パラメーターのタイム ゾーンを指定します。
| String |
line_shape (オプション) | 解析で出力されるルート フィーチャの形状タイプを指定します。
どの出力形状のタイプを選択するかに関係なく、常に最適なルートはユークリッド距離ではなくネットワーク インピーダンスによって決定されます。これは、ルート形状のみが異なり、ネットワークの基となっているトラバースは同じであることを意味します。 | String |
accumulate_attributes [accumulate_attributes,...] (オプション) | 解析中に累積されるコスト属性のリスト。これらの累積属性は、参考情報としてのみ使用されます。解析では、指定されている移動モードで使用されるコスト属性のみが使用されます。 累積されるコスト属性ごとに、ネットワーク解析の出力フィーチャに Total_[Impedance] プロパティが入力されます。 このパラメーターは、ネットワーク データ ソースが ArcGIS Online サービスである場合、あるいはネットワーク データ ソースが累積をサポートしないバージョンの Portal for ArcGIS のサービスである場合には使用できません。 | String |
generate_directions_on_solve (オプション) | 解析の実行時にルート案内を生成するかどうかを指定します。
ターンごとのルート案内を生成する必要のない解析では、NO_DIRECTIONS オプションを使用すると、解析にかかる時間が短縮されます。 | Boolean |
time_zone_for_time_fields (オプション) | タイム ウィンドウに使用されるフィールドなど、入力テーブルに含まれる時間フィールドを解釈するために使用されるタイム ゾーンを指定します。
| String |
派生した出力
名前 | 説明 | データ タイプ |
out_network_analysis_layer | 出力ネットワーク解析レイヤー。 | Network Analyst レイヤー |
コードのサンプル
必須パラメーターのみを使用してツールを実行します。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "WorkRoute")
すべてのパラメーターを使用してツールを実行します。
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "InspectionRoute", "Driving Time",
"FIND_BEST_ORDER", "1/1/1900 9:00 AM", "UTC",
"ALONG_NETWORK", ["Meters", "TravelTime"])
次のスタンドアロン Python スクリプトは、MakeRouteAnalysisLayer ツールを使用して、ジオコーディングされたストップ ロケーションを巡回する最適ルートを検索する方法を示しています。
# Name: MakeRouteAnalysisLayer_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:
#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 = "BestRoute"
travel_mode = "Driving Time"
address_locator = "C:/Data/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.MakeRouteAnalysisLayer(network, layer_name,
travel_mode)
#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, "")
#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))
この例では、1 つの解析で複数のルートを作成する方法を示します。この方法は、起点と終点の間の距離または運転時間を計算するのに便利です。
レガシー:
GetNASublayer 関数を使用して、ネットワーク解析レイヤーのサブレイヤーを取得できます。これは ArcGIS Pro 2.7 で導入されました。以前のソフトウェア バージョンでは、サブレイヤー名をワイルドカードとして使用するネットワーク解析の Layer オブジェクトの listLayers メソッドを使用することがネットワーク解析レイヤーのサブレイヤー オブジェクトを取得する最適な方法でした。
# Name: MakeRouteAnalysisLayer_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:
#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")
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"
travel_mode = "Driving Time"
#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 driving time, but compute the
#distance traveled by accumulating the Meters attribute.
result_object = arcpy.na.MakeRouteAnalysisLayer(network, layer_name,
travel_mode, time_of_day=start_time,
accumulate_attributes=["Meters"])
#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, "")
arcpy.na.AddLocations(layer_object, stops_layer_name, stops_work,
field_mappings, "", append="APPEND")
#Solve the route layer.
arcpy.na.Solve(layer_object)
# Get the output Routes sublayer and save it to a feature class
routes_sublayer = arcpy.na.GetNASublayer(layer_object, "Routes")
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))
ライセンス情報
- Basic: はい
- Standard: はい
- Advanced: はい