通過したソース フィーチャのコピー (Copy Traversed Source Features) (Network Analyst)

概要

2 つのフィーチャクラスと 1 つのテーブルを作成し、それらをすべて使用して、ネットワーク解析レイヤーの解析中に通過したエッジ、ジャンクション、およびターンに関する情報を格納します。

通過したソース フィーチャのコピーからの出力の詳細

使用法

  • このツールは入力ネットワーク解析レイヤーがまだ解析されていない場合は、その解析を実行します。解析レイヤーは、最後の解析の後に入力が変更された場合には、再解析されます。

  • 通過したソース フィーチャは、次のネットワーク解析レイヤーに対して生成できます。

    • ルート
    • 到達圏
    • 最寄り施設の検出
    • 配車ルート (VRP)

    通過したソース フィーチャは、次のレイヤーに対しては生成できません。

    • OD コスト マトリックス
    • ロケーション-アロケーション

  • 出力ジャンクション フィーチャクラスは、通過したネットワーク ジャックションを表すポイントだけでなく、次の場所を表すポイントも含みます。

    • 通過したポイント バリア
    • 通過したラインおよびポリゴン バリアの開始ポイントと終了ポイント
    • ルート解析の訪問ストップ
    • 到達圏解析における訪問施設と休憩の終了
    • 最寄り施設解析における訪問施設とインシデント
    • 配車ルートにおける訪問先、拠点、休憩

    通過したソース フィーチャのコピーからの出力の詳細

  • 出力フィーチャクラスの座標系を制御するには、出力座標系環境設定を指定するか、出力場所パラメーターの値としてジオデータベースのフィーチャ データセットを指定します。出力座標系環境設定が指定されず、出力場所パラメーターがフィーチャ データセットではない場合、出力フィーチャクラスの座標系は入力ネットワーク解析レイヤーの座標系と同じになります。

構文

arcpy.na.CopyTraversedSourceFeatures(input_network_analysis_layer, output_location, edge_feature_class_name, junction_feature_class_name, turn_table_name)
パラメーター説明データ タイプ
input_network_analysis_layer

通過したソース フィーチャのコピー元になるネットワーク解析レイヤー。ネットワーク解析レイヤーに有効な結果がない場合は、結果を得るためにレイヤーが解析されます。

Network Analyst Layer
output_location

出力テーブルと 2 つのフィーチャクラスが保存されるワークスペース。

Workspace; Feature Dataset
edge_feature_class_name

通過したエッジ ソース フィーチャに関する情報が入るフィーチャクラスの名前。解析されたネットワーク解析レイヤーがエッジ フィーチャを通過しない場合は、空のフィーチャクラスが作成されます。

String
junction_feature_class_name

通過したジャンクション ソース フィーチャに関する情報が入るフィーチャクラスの名前。これには、システム ジャンクションと、入力ネットワーク解析レイヤーからの関連ポイントが含まれます。解析されたネットワーク解析レイヤーがジャンクションを通過しない場合は、空のフィーチャクラスが作成されます。

String
turn_table_name

基本エッジのコストを増減する、通過したグローバル ターンおよびターン フィーチャに関する情報が入るテーブルの名前。解析されたネットワーク解析レイヤーがターンを通過しない場合は、空のテーブルが作成されます。規制ターンは通過されないため、出力に含まれることはありません。

String

派生した出力

名前説明データ タイプ
edge_features

ネットワーク解析で通過したネットワーク データセットのエッジを含むフィーチャクラス。

フィーチャ クラス
junction_features

ネットワーク解析で通過したネットワーク データセットのジャンクションを含むフィーチャクラス。

フィーチャ クラス
turn_table

ネットワーク解析で通過したネットワーク データセットのターンを含むテーブル。

テーブル
modified_input_network_analysis_layer

解析されたネットワーク解析レイヤー。

Network Analyst レイヤー

コードのサンプル

CopyTraversedSourceFeatures (通過したソース フィーチャのコピー) の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、CopyTraversedSourceFeatures (通過したソース フィーチャのコピー) ツールを使用して通過したエッジ、ジャンクション、およびターンをルート ネットワーク解析レイヤーから、メモリ内ワークスペースのフィーチャクラスとテーブルに書き込む方法を示しています。

arcpy.na.CopyTraversedSourceFeatures("Route", "C:/Data/Output.gdb",
                                     "TraversedEdges",
                                     "TraversedJunctions",
                                     "TraversedTurns")
CopyTraversedSourceFeatures (通過したソース フィーチャのコピー) の例 2 (ワークフロー)

次のスタンドアロン Python スクリプトは、CopyTraversedSourceFeatures (通過したソース フィーチャのコピー) を使用して、国勢調査地区の重心から最寄りの消防署までのルートに共通する道路を見つける方法を示しています。これらの結果は、どの道路が最も頻繁に使用される緊急時の経路かを示すために役立ちます。

# Name: CopyTraversedSourceFeatures_ex02.py
# Description: The scenario shows how to find the streets that are common to the
#              routes between the closest fire station and the census tract
#              centroids. These streets can be used to identify critical points
#              in case of an emergency.
# Requirements: Network Analyst Extension

#Import system modules
import os
import arcpy
from arcpy import env

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
    env.qualifiedFieldNames = False

    #Set local variables
    input_gdb = "C:/Data/SanFrancisco.gdb"
    output_gdb = "C:/Data/Output.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    layer_name = "EmergencyRoutes"
    travel_mode = "Driving Time"
    facilities = os.path.join(input_gdb, "Analysis", "FireStations")
    incidents = os.path.join(input_gdb, "Analysis", "TractCentroids")
    edge_frequency = os.path.join(output_gdb, "EdgeFrequency")
    critical_streets = os.path.join(output_gdb, "CriticalStreets")

    #Create a new closest facility analysis layer.
    result_object = arcpy.na.MakeClosestFacilityAnalysisLayer(network,
                                                layer_name, travel_mode,
                                                "FROM_FACILITIES")

    #Get the layer object from the result object. The closest facility layer can
    #now be referenced using the layer object.
    layer_object = result_object.getOutput(0)

    #Get the names of all the sublayers within the closest facility layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    facilities_layer_name = sublayer_names["Facilities"]
    incidents_layer_name = sublayer_names["Incidents"]

    #Load fire station features as facilities and ensure that they are not
    #located on restricted portions of the network. Use default field mappings
    #and search tolerance
    arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
                          "", exclude_restricted_elements="EXCLUDE")

    #Load tract centroids as incidents and ensure that they are not located on
    #restricted portions of the network. Map the ID field from Tract Centroids
    #as the name for incidents using field mappings
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                        incidents_layer_name)
    field_mappings['Name'].mappedFieldName = "ID"
    arcpy.na.AddLocations(layer_object, incidents_layer_name, incidents,
                          field_mappings, "",
                          exclude_restricted_elements="EXCLUDE")

    #Solve the closest facility layer and copy the travered source features to
    #the output geodatabase. Use default names for the output feature
    #classes and table. Retrieve the first output, which is the traversed edges.
    traversed_edges = arcpy.na.CopyTraversedSourceFeatures(layer_object,
                                                      output_gdb).getOutput(0)

    #Some streets might be traversed by more than one route. Streets traversed
    #by many routes are the most critical emergency routes. Count the number of
    #routes using each street.
    arcpy.analysis.Frequency(traversed_edges, edge_frequency,
                             ["SourceOID", "SourceName"])

    #The resulting edge features from CopyTraversedSourceFeatures may include
    #clipped versions of the original street features because the Closest
    #Facility route only traveled across part of the street feature. Select
    #the complete street features from the original street feature class and
    #copy them to output.
    #Get the full path to the network dataset's streets feature class by
    #describing the network dataset.
    network_desc = arcpy.Describe(network)
    edge_sources = network_desc.edgeSources
    for es in edge_sources:
        if es.name.lower() == "streets":
            streets_source = os.path.join(os.path.dirname(network), es.name)
            break

    #Select the relevant streets based on overlap with the results from
    #CopyTraversedSourceFeatures
    streets_layer = arcpy.management.MakeFeatureLayer(streets_source,
                                                        "StreetsLayer")
    arcpy.management.SelectLayerByLocation(streets_layer,
                                "SHARE_A_LINE_SEGMENT_WITH", traversed_edges)

    #Add the frequency information to the output feature class using JoinField
    arcpy.management.JoinField(streets_layer, "ObjectID", edge_frequency,
                               "SourceOID", "FREQUENCY")

    #Save the selected features to disk
    arcpy.management.CopyFeatures(streets_layer, critical_streets)

    #Delete the Frequency field from the street feature class
    arcpy.management.DeleteField(streets_layer, "FREQUENCY")

    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: 次のものが必要 Network Analyst
  • Standard: 次のものが必要 Network Analyst
  • Advanced: 次のものが必要 Network Analyst

関連トピック