ルート解析レイヤーの作成 (Make Route Analysis Layer) (Network Analyst)

概要

ルート ネットワーク解析レイヤーを作成し、解析プロパティを設定します。ルート解析レイヤーは、指定したネットワーク コストに基づいて、ネットワーク ロケーション間の最適ルートを決定する際に役立ちます。このレイヤーを作成するには、ローカル ネットワーク データセットを使用するか、オンラインでホストされたルート サービスまたはポータル内のルート サービスを使用します。

使用法

  • このツールで解析レイヤーを作成した後は、[ロケーションの追加 (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
(オプション)

最適ルートの計算時に、入力ストップを特定の順序で巡回する必要があるかどうかを指定します。このオプションにより、ルート解析は最短パス問題から巡回セールスマン問題に変わります。

  • USE_CURRENT_ORDER入力の順序に従って、ストップを巡回します。これがデフォルトです。
  • FIND_BEST_ORDER最適ルートを検索するためにストップの順番を並べ替えます。このオプションにより、ルート解析は最短パス問題から巡回セールスマン問題に変わります。
  • PRESERVE_BOTH入力の順序に従って最初と最後のストップを維持します。最適ルートを検索するために残りのストップの順番を並べ替えます。
  • PRESERVE_FIRST入力の順序に従って最初のストップを維持します。最適ルートを検索するために残りのストップの順番を並べ替えます。
  • PRESERVE_LAST入力の順序に従って最後のストップを維持します。最適ルートを検索するために残りのストップの順番を並べ替えます。
String
time_of_day
(オプション)

ルートの開始日時。ルートの開始時間は一般的に、1 日の時刻に応じて変化するインピーダンス属性に基づいたルートの検索に使用されます。たとえば、ラッシュアワーの交通量を考慮したルートの検索では、開始時間として午前 7 時を使用します。このパラメーターのデフォルト値は、午前 8 時です。日時は、2005/10/21 10:30 のように指定できます。ルートが複数日にわたり、開始時間のみが指定されている場合、現在の日付が使用されます。

特定の日付を使用する代わりに、次の日付を使用して曜日を指定することができます。

  • 今日 - 12/30/1899
  • 日曜 - 12/31/1899
  • 月曜 - 1/1/1900
  • 火曜 - 1/2/1900
  • 水曜 - 1/3/1900
  • 木曜 - 1/4/1900
  • 金曜 - 1/5/1900
  • 土曜 - 1/6/1900

たとえば、移動を火曜日の 5:00 PM に開始するよう指定するには、パラメーター値を「1900/1/2 5:00 PM」に指定します。

解析後、出力ルートにはルートの開始時刻と終了時刻が挿入されます。このような開始時間と終了時間は、ルート案内の生成時にも使用されます。

Date
time_zone
(オプション)

time_of_day パラメーターのタイム ゾーンを指定します。

  • LOCAL_TIME_AT_LOCATIONStime_of_day パラメーターが、ルートの最初のストップがある場所のタイム ゾーンを表します。これがデフォルトです。多くのルートを生成していて、それらが複数のタイム ゾーンで開始される場合、それぞれの開始時間は世界協定時 (UTC) でずれが発生します。たとえば、1 月 2 日の time_of_day の値が 10:00 a.m. の場合、東部標準時ゾーンで開始されるルートは開始時間が東部標準時の 10:00 a.m. (3:00 p.m. UTC)、中央標準時ゾーンで開始されるルートは開始時間が中央標準時の 10:00 a.m. (4:00 p.m. UTC) になります。開始時間が UTC では 1 時間異なります。出力ストップ フィーチャクラスに記録される到着日時と出発日時は、各ルートの最初のストップがある場所のタイム ゾーンです。
  • UTCtime_of_day パラメーターが、UTC (協定世界時) を参照します。特定の時刻 (たとえば今) におけるルートを生成する場合で、最初のストップがある場所のタイム ゾーンがわからない場合、このオプションを選択します。多くのルートを生成していて、それらが複数のタイム ゾーンにまたがっている場合、UTC での開始時間は同時です。たとえば、1 月 2 日の time_of_day の値が 10:00 a.m. の場合、東部標準時ゾーンで開始されるルートは開始時間が東部標準時の 5:00 a.m. (10:00 a.m. UTC)、中央標準時ゾーンで開始されるルートは開始時間が中央標準時の 4:00 a.m. (10:00 a.m. UTC) になります。どちらのルートも 10:00 a.m. UTC に に開始されます。出力ストップ フィーチャクラスに記録される到着日時と出発日時は UTC です。
String
line_shape
(オプション)

解析で出力されるルート フィーチャの形状タイプを指定します。

  • ALONG_NETWORK出力ルートはネットワーク ソースの正確な形状を保持します。リニア リファレンスのためのルートのメジャー値が出力に含まれます。メジャー値は、最初のストップから増加し、指定された位置に到着するまでの累積インピーダンスを記録します。
  • NO_LINES出力ルートに形状は生成されません。
  • STRAIGHT_LINES出力ルート形状はストップ間を結ぶ 1 本の直線になります。

どの出力形状のタイプを選択するかに関係なく、常に最適なルートはユークリッド距離ではなくネットワーク インピーダンスによって決定されます。これは、ルート形状のみが異なり、ネットワークの基となっているトラバースは同じであることを意味します。

String
accumulate_attributes
[accumulate_attributes,...]
(オプション)

解析中に累積されるコスト属性のリスト。これらの累積属性は、参考情報としてのみ使用されます。解析では、指定されている移動モードで使用されるコスト属性のみが使用されます。

累積されるコスト属性ごとに、ネットワーク解析の出力フィーチャに Total_[Impedance] プロパティが入力されます。

このパラメーターは、ネットワーク データ ソースが ArcGIS Online サービスである場合、あるいはネットワーク データ ソースが累積をサポートしないバージョンの Portal for ArcGIS のサービスである場合には使用できません。

String
generate_directions_on_solve
(オプション)

解析の実行時にルート案内を生成するかどうかを指定します。

  • DIRECTIONS解析時にターンごとのルート案内が生成されます。これがデフォルトです。
  • NO_DIRECTIONS解析時にターンごとのルート案内が生成されません。

ターンごとのルート案内を生成する必要のない解析では、NO_DIRECTIONS オプションを使用すると、解析にかかる時間が短縮されます。

Boolean
time_zone_for_time_fields
(オプション)

タイム ウィンドウに使用されるフィールドなど、入力テーブルに含まれる時間フィールドを解釈するために使用されるタイム ゾーンを指定します。

  • LOCAL_TIME_AT_LOCATIONSストップのタイム フィールド内の日時は、ストップがある場所のタイム ゾーンに従って解釈されます。これがデフォルトです。
  • UTCストップのタイム フィールド内の日時は、UTC (世界協定時) を参照します。
String

派生した出力

名前説明データ タイプ
out_network_analysis_layer

出力ネットワーク解析レイヤー。

Network Analyst レイヤー

コードのサンプル

MakeRouteAnalysisLayer (ルート解析レイヤーの作成) の例 1 (Python ウィンドウ)

必須パラメーターのみを使用してツールを実行します。

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "WorkRoute")
MakeRouteAnalysisLayer (ルート解析レイヤーの作成) の例 2 (Python ウィンドウ)

すべてのパラメーターを使用してツールを実行します。

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"])
MakeRouteAnalysisLayer (ルート解析レイヤーの作成) の例 3 (ワークフロー)

次のスタンドアロン 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))
MakeRouteAnalysisLayer (ルート解析レイヤーの作成) の例 4 (ワークフロー)

この例では、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: はい

関連トピック