Routenanalyse-Layer erstellen (Network Analyst)

Zusammenfassung

Erstellt einen Netzwerkanalyse-Layer für Routen und legt seine Analyse-Eigenschaften fest. Ein Routenanalyse-Layer ist nützlich, um die optimale Route zwischen mehreren Netzwerkstandorten auf der Grundlage der angegebenen Netzwerkkosten zu ermitteln. Der Layer kann mit einem lokalen Netzwerk-Dataset oder mit einem online bzw. in einem Portal gehosteten Routing-Service erstellt werden.

Verwendung

  • Nachdem Sie den Analyse-Layer mit diesem Werkzeug erstellt haben, können Sie ihm Netzwerkanalyse-Objekte mithilfe des Werkzeugs Standorte hinzufügen hinzufügen, die Analyse mit dem Werkzeug Berechnen berechnen und die Ergebnisse mit dem Werkzeug In Layer-Datei speichern auf der Festplatte speichern.

  • Bei Verwendung dieses Werkzeugs in Geoverarbeitungsmodellen muss der Ausgabe-Netzwerkanalyse-Layer in einen Modellparameter geändert werden, wenn das Modell als Werkzeug ausgeführt wird. Andernfalls wird der Ausgabe-Layer dem Inhalt der Karte nicht hinzugefügt.

  • In ArcGIS Pro werden die Daten von Netzwerkanalyse-Layern in File-Geodatabase-Feature-Classes auf der Festplatte gespeichert. Bei der Erstellung eines Netzwerk-Analyse-Layers in einem Projekt werden die Daten des Layers in einem neuen Feature-Dataset in der Umgebung Aktueller Workspace erstellt. Bei der Erstellung eines Netzwerkanalyse-Layers in einem Python-Skript müssen Sie zunächst mit arcpy.env.workspace = "<path to file gdb>" explizit eine File-Geodatabase, in der die Layer-Daten gespeichert werden sollen, als Workspace-Umgebung festlegen. Bei der Erstellung des Layers wird dieser File-Geodatabase ein neues Feature-Dataset mit den entsprechenden Sublayer-Feature-Classes hinzugefügt.

Syntax

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})
ParameterErklärungDatentyp
network_data_source

Das Netzwerk-Dataset oder der Service, für das bzw. den die Netzwerkanalyse ausgeführt wird. Verwenden Sie die Portal-URL für einen Service.

Network Dataset Layer;String
layer_name
(optional)

Der Name des zu erstellenden Netzwerkanalyse-Layers.

String
travel_mode
(optional)

Der Name des Reisemodus, der in der Analyse verwendet werden soll. Der Reisemodus stellt eine Sammlung von Netzwerkeinstellungen (z. B. Reisebeschränkungen und Wendenregeln) dar, mit denen festgelegt wird, wie ein Fußgänger, Auto, Lkw oder anderes Transportmittel sich durch das Netzwerk bewegt. Reisemodi werden für die Netzwerkdatenquelle definiert.

Ein arcpy.na.TravelMode-Objekt und eine Zeichenfolge mit der gültigen JSON-Repräsentation eines Reisemodus können ebenfalls als Eingabe für den Parameter verwendet werden.

String
sequence
(optional)

Gibt an, ob die Eingabestopps bei der Berechnung der optimalen Route in einer bestimmten Reihenfolge besucht werden müssen. Mit dieser Option wird die Routenanalyse vom Problem des kürzesten Weges in das Handlungsreisenden-Problem geändert.

  • USE_CURRENT_ORDERDie Stopps werden in der Eingabereihenfolge besucht. Dies ist die Standardeinstellung.
  • FIND_BEST_ORDERDie Stopps werden neu angeordnet, um die optimale Route zu finden. Mit dieser Option wird die Routenanalyse vom Problem des kürzesten Weges in das Handlungsreisenden-Problem geändert.
  • PRESERVE_BOTHDer erste und letzte Stopp werden in der Eingabereihenfolge beibehalten. Die restlichen Stopps werden neu angeordnet, um die optimale Route zu finden.
  • PRESERVE_FIRSTDer erste Stopp wird in der Eingabereihenfolge beibehalten. Die restlichen Stopps werden neu angeordnet, um die optimale Route zu finden.
  • PRESERVE_LASTDer letzte Stopp wird in der Eingabereihenfolge beibehalten. Die restlichen Stopps werden neu angeordnet, um die optimale Route zu finden.
String
time_of_day
(optional)

Das Startdatum und die Startzeit für die Route. Die Routenstartzeit wird in der Regel verwendet, um Routen auf der Grundlage des Impedanzattributs zu suchen, das sich mit der Tageszeit ändert. So kann beispielsweise eine Startzeit von 7:00 Uhr verwendet werden, um eine Route zu suchen, für die Stoßzeiten berücksichtigt werden. Der Standardwert für diesen Parameter ist 8:00 Uhr. Sie können ein Datum und eine Uhrzeit als 21.10.2005 10:30 angeben. Wenn sich die Route über mehrere Tage erstreckt und nur die Startzeit angegeben wurde, wird das aktuelle Datum verwendet.

Statt ein bestimmtes Datum zu verwenden, kann ein Wochentag mithilfe der folgenden Datumsangaben angegeben werden:

  • Heute: 30.12.1899
  • Sonntag: 31.12.1899
  • Montag: 1.1.1900
  • Dienstag: 02.01.1900
  • Mittwoch: 03.01.1900
  • Donnerstag: 04.01.1900
  • Freitag: 05.01.1900
  • Samstag: 06.01.1900

Wenn Sie beispielsweise angeben möchten, dass die Reise am Dienstag um 17:00 Uhr starten soll, geben Sie den Parameterwert wie folgt an: 2.1.1900 17:00.

Nach dem Berechnen werden die Start- und Endzeiten in die Ausgabe-Route übernommen. Diese Start- und Endzeiten werden auch beim Erzeugen von Wegbeschreibungen verwendet.

Date
time_zone
(optional)

Gibt die Zeitzone des Parameters time_of_day an.

  • LOCAL_TIME_AT_LOCATIONSDer Parameter time_of_day bezieht sich auf die Zeitzone, in der sich der erste Stopp einer Route befindet. Dies ist die Standardeinstellung.Wenn Sie viele Routen erstellen, die in verschiedenen Zeitzonen starten, werden die Startzeiten in koordinierter Weltzeit (Coordinated Universal Time, UTC) gestaffelt. Ein time_of_day-Wert von 2. Januar, 10:00 Uhr bedeutet beispielsweise eine Startzeit von 10:00 Uhr Eastern Standard Time (15:00 Uhr UTC) für Routen, die in der Zeitzone "Eastern Time" beginnen, und 10:00 Uhr Central Standard Time (16:00 Uhr UTC) für Routen, die in der Zeitzone "Central Time" beginnen. Die Startzeiten sind in UTC um eine Stunde versetzt.Die in der Feature-Class für Ausgabe-Stopps aufgezeichneten Zeiten und Datumsangaben für Ankunft und Abfahrt beziehen sich auf die lokale Zeitzone des ersten Stopps jeder Route.
  • UTCDer Parameter time_of_day bezieht sich auf die koordinierte Weltzeit (UTC). Wählen Sie diese Option aus, wenn Sie eine Route für eine bestimmte Zeit (z. B. jetzt) erstellen möchten, sich jedoch nicht sicher sind, in welcher Zeitzone sich der erste Stopp befindet.Wenn Sie viele Routen erstellen, die mehrere Zeitzonen umfassen, sind die Startzeiten in UTC simultan. Ein time_of_day-Wert von 2. Januar, 10:00 Uhr bedeutet beispielsweise eine Startzeit von 05:00 Uhr Eastern Standard Time (10:00 Uhr UTC) für Routen, die in der Zeitzone "Eastern Time" beginnen, und 04:00 Uhr Central Standard Time (10:00 Uhr UTC) für Routen, die in der Zeitzone "Central Time" beginnen. Beide Routen starten um 10:00 Uhr UTC.Die in der Feature-Class für Ausgabe-Stopps aufgezeichneten Zeiten und Datumsangaben für Ankunft und Abfahrt beziehen sich auf UTC.
String
line_shape
(optional)

Gibt den Shape-Typ für die Routen-Features an, die von der Analyse ausgegeben werden.

  • ALONG_NETWORKDie Ausgabe-Routen haben die exakte Form der zugrunde liegenden Netzwerkquellen. Die Ausgabe umfasst Routenmesswerte für die lineare Referenzierung. Die Messwerte nehmen ab dem ersten Halt zu und zeichnen die kumulierte Impedanz auf, um eine bestimmte Position zu erreichen.
  • NO_LINESFür die Ausgaberouten wird kein Shape erstellt.
  • STRAIGHT_LINESDas Ausgabe-Routen-Shape ist eine einzelne gerade Linie zwischen den Stopps.

Gleichgültig, welcher Ausgabe-Shape-Typ gewählt wird, die optimale Route wird immer durch die Netzwerkimpedanz und nie durch die Euklidische Entfernung bestimmt. Dies bedeutet, dass sich nur die Routen-Shapes und nicht der zugrunde liegende Durchlauf des Netzwerks unterscheiden.

String
accumulate_attributes
[accumulate_attributes,...]
(optional)

Eine Liste mit Kostenattributen, die während der Analyse akkumuliert werden sollen. Diese akkumulierten Attribute dienen nur Referenzzwecken. Vom Solver wird bei der Berechnung der Analyse nur das Kostenattribut verwendet, das im festgelegten Reisemodus angegeben ist.

Für jedes akkumulierte Kostenattribut wird den Netzwerkanalyse-Ausgabe-Features eine Total_[Impedance]-Eigenschaft hinzugefügt.

Dieser Parameter ist nicht verfügbar, wenn es sich bei der Netzwerkdatenquelle um einen ArcGIS Online-Service handelt bzw. um einen Service handelt, der auf einer Portal for ArcGIS-Version beruht, in der eine Akkumulation nicht unterstützt wird.

String
generate_directions_on_solve
(optional)

Gibt an, ob beim Ausführen der Analyse Wegbeschreibungen erstellt werden.

  • DIRECTIONSDetaillierte Wegbeschreibungen werden beim Berechnen erstellt. Dies ist die Standardeinstellung.
  • NO_DIRECTIONSDetaillierte Wegbeschreibungen werden beim Berechnen nicht erstellt.

Der Zeitaufwand für Analysen, bei denen das Erstellen detaillierter Wegbeschreibungen nicht erforderlich ist, kann reduziert werden, wenn die Option NO_DIRECTIONS deaktiviert bleibt.

Boolean
time_zone_for_time_fields
(optional)

Gibt die Zeitzone an, die zur Interpretation der in den Eingabetabellen enthaltenen Zeitfelder, wie z. B. die Felder für Zeitfenster, verwendet wird.

  • LOCAL_TIME_AT_LOCATIONSDie Datums- und Zeitangaben in den Zeitfeldern für den Stopp werden entsprechend der Zeitzone, in der sich der Stopp befindet, interpretiert. Dies ist die Standardeinstellung.
  • UTCDie Datums- und Zeitangaben in den Zeitfeldern für den Stopp beziehen sich auf die koordinierte Weltzeit (UTC).
String

Abgeleitete Ausgabe

NameErklärungDatentyp
out_network_analysis_layer

Der Ausgabe-Netzwerkanalyse-Layer.

Network Analyst-Layer

Codebeispiel

MakeRouteAnalysisLayer - Beispiel 1 (Python-Fenster)

Ausführen des Werkzeugs, wenn nur die erforderlichen Parameter verwendet werden.

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "WorkRoute")
MakeRouteAnalysisLayer - Beispiel 2 (Python-Fenster)

Führen Sie das Werkzeug unter Verwendung aller Parameter aus.

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 – Beispiel 3 (Workflow)

Mit dem folgenden eigenständigen Python-Skript wird veranschaulicht, wie das Werkzeug MakeRouteAnalysisLayer verwendet werden kann, um die optimale Route für Stopps an den geokodierten Stopps zu ermitteln.

# 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 – Beispiel 4 (Workflow)

In diesem Beispiel wird veranschaulicht, wie mehrere Routen in einer einzigen Berechnung erstellt werden. Diese Methode ist hilfreich beim Berechnen von Entfernungen oder Fahrzeiten zwischen Start-Ziel-Paaren.

# 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 = 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))

Lizenzinformationen

  • Basic: Ja
  • Standard: Ja
  • Advanced: Ja

Verwandte Themen