Routen-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.

Ältere Versionen:

Dies ist ein veraltetes Werkzeug. Diese Funktionen wurde durch das Werkzeug Routenanalyse-Layer erstellen ersetzt.

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.

Syntax

arcpy.na.MakeRouteLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {find_best_order}, {ordering_type}, {time_windows}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape}, {start_date_time})
ParameterErklärungDatentyp
in_network_dataset

Das Netzwerk-Dataset, für das die Routenanalyse ausgeführt wird.

Network Dataset Layer
out_network_analysis_layer

Name des zu erstellenden Netzwerkanalyse-Layers für Routen.

String
impedance_attribute

Das Kostenattribut, das in der Analyse als Impedanz verwendet wird.

String
find_best_order
(optional)
  • 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.
  • USE_INPUT_ORDERDie Stopps werden in der Eingabereihenfolge besucht. Dies ist die Standardeinstellung.
Boolean
ordering_type
(optional)

Gibt die Anordnung der Stopps an, wenn Sie FIND_BEST_ORDER verwenden.

  • PRESERVE_BOTHDer erste und letzte Stopp werden in der Eingabereihenfolge als erster und letzter Stopp der Route beibehalten.
  • PRESERVE_FIRSTDer erste Stopp wird in der Eingabereihenfolge als erster Stopp der Route beibehalten. Der letzte Stopp kann jedoch neu angeordnet werden.
  • PRESERVE_LASTDer letzte Stopp wird in der Eingabereihenfolge als letzter Stopp der Route beibehalten. Der erste Stopp kann jedoch neu angeordnet werden.
  • PRESERVE_NONEDer erste und der letzte Stopp werden nicht beibehalten und können neu angeordnet werden.
String
time_windows
(optional)

Gibt an, ob für die Stopps Zeitfenster verwendet werden.

  • USE_TIMEWINDOWSDie Route berücksichtigt Zeitfenster an den Stopps. Wenn ein Stopp vor dem Zeitfenster erreicht wird, kommt es zu einer Wartezeit, bis das Zeitfenster startet. Wenn ein Stopp nach dem Zeitfenster erreicht wird, kommt es zu einem Fehler. Die Zeitfensterüberschreitung insgesamt wird bei Berechnung der Route mit der Mindestimpedanz ausgeglichen. Diese Option ist nur gültig, wenn die Impedanz in Zeiteinheiten angegeben ist.
  • NO_TIMEWINDOWSDie Route ignoriert Zeitfenster an den Stopps. Dies ist die Standardeinstellung.
Boolean
accumulate_attribute_name
[accumulate_attribute_name,...]
(optional)

Eine Liste mit Kostenattributen, die während der Analyse akkumuliert werden sollen. Diese Akkumulationsattribute dienen ausschließlich zu Referenzzwecken. Der Solver verwendet nur das vom Parameter Impedanzattribut angegebene Kostenattribut zum Berechnen der Route.

Für jedes akkumulierte Kostenattribut wird den vom Solver ausgegebenen Routen eine Total_[Impedance]-Eigenschaft hinzugefügt.

String
UTurn_policy
(optional)

Definiert die Wendenregel an, die an Knoten verwendet werden soll. Das Zulassen von Wenden bedeutet, dass der Solver an einem Knoten wenden und auf der gleichen Straße wieder zurückführen kann. Da diese Knoten Straßenkreuzungen und Sackgassen darstellen können, kann es sein, dass verschiedene Fahrzeuge an manchen Knoten wenden können und an anderen wiederum nicht. Dies hängt davon ab, ob der Knoten eine Kreuzung oder eine Sackgasse darstellt. Um dies zu berücksichtigen, wird der Parameter "Wendenregel" implizit durch die Anzahl der mit der Kreuzung verbundenen Kanten angegeben. Diese Anzahl wird als Valenz der Knoten bezeichnet. Die zulässigen Werte für diesen Parameter sowie eine Beschreibung der jeweiligen Bedeutung in Bezug auf die Valenz der Knoten sind unten aufgelistet.

  • ALLOW_UTURNSWenden sind an Knoten mit einer beliebigen Anzahl verbundener Kanten erlaubt. Dies ist der Standardwert.
  • NO_UTURNSWenden sind an allen Knoten verboten, unabhängig von der Valenz der Knoten. Jedoch sind selbst bei Auswahl dieser Einstellung Wenden an Netzwerkpositionen weiterhin erlaubt, Sie können allerdings für die Eigenschaft CurbApproach der jeweiligen Netzwerkposition auch ein Verbot von Wenden festlegen.
  • ALLOW_DEAD_ENDS_ONLYWenden sind an allen Knoten verboten, außer es ist nur eine angrenzende Kante vorhanden (Sackgasse).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYWenden sind an Knoten verboten, an denen genau zwei angrenzende Kanten aufeinander treffen, jedoch an Kreuzungen (Knoten mit drei oder mehr angrenzenden Kanten) und in Sackgassen (Knoten mit genau einer angrenzenden Kante) erlaubt. Oftmals verfügen Netzwerke über unwesentliche Knoten in der Mitte von Straßensegmenten. Durch diese Option wird verhindert, dass Fahrzeuge an diesen Punkten wenden.

Falls Sie eine Wendenregel benötigen, die genauer definiert ist, können Sie einem Netzwerkkostenattribut einen globalen Evaluator für Verzögerung bei Kantenübergängen hinzufügen oder dessen Einstellungen anpassen, sofern dieser vorhanden ist, und der Konfiguration von U-förmigen Kantenübergängen einen besonderen Stellenwert einräumen. Sie können auch die Einstellung der CurbApproach-Eigenschaft Ihrer Netzwerkstandorte festlegen.

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

Eine Liste mit Beschränkungsattributen, die während der Analyse angewendet werden sollen.

String
hierarchy
(optional)
  • USE_HIERARCHYFür die Analyse wird das Hierarchie-Attribut verwendet. Wenn eine Hierarchie verwendet wird, werden vom Solver Kanten einer höheren Rangstufe gegenüber Kanten niedrigerer Rangstufen bevorzugt. Hierarchische Berechnungen sind schneller und können verwendet werden, um zu simulieren, dass ein Fahrer es nach Möglichkeit vorzieht, auf Autobahnen statt auf Landstraßen zu fahren, selbst wenn die Fahrstrecke dann länger ist. Diese Option ist nur dann gültig, wenn das Eingabe-Netzwerk-Dataset ein Hierarchie-Attribut aufweist.
  • NO_HIERARCHYFür die Analyse wird kein Hierarchie-Attribut verwendet. Wird keine Hierarchie verwendet, ist das Ergebnis eine genaue Route für das Netzwerk-Dataset.

Der Parameter wird nicht verwendet, wenn ein Hierarchie-Attribut nicht für das Netzwerk-Dataset definiert ist, das zum Durchführen der Analyse verwendet wird.

Boolean
hierarchy_settings
(optional)

Ältere Versionen:

Vor Version 10 konnten mit diesem Parameter die im Netzwerk-Dataset erstellten Standardhierarchiebereiche in die Hierarchiebereiche für Ihre Analyse geändert werden. In Version 10 wird dieser Parameter nicht mehr unterstützt und sollte als leere Zeichenfolge angegeben werden. Um die Hierarchiebereiche für Ihre Analyse zu ändern, müssen Sie die Standardhierarchiebereiche im Netzwerk-Dataset aktualisieren.

Network Analyst Hierarchy Settings
output_path_shape
(optional)

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

  • TRUE_LINES_WITH_MEASURESDie 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.
  • TRUE_LINES_WITHOUT_MEASURESDie Ausgabe-Routen haben die exakte Form der zugrunde liegenden Netzwerkquellen.
  • STRAIGHT_LINESDas Ausgabe-Routen-Shape ist eine einzelne gerade Linie zwischen den Stopps.
  • NO_LINESFür die Ausgaberouten wird kein Shape erstellt.

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
start_date_time
(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

Abgeleitete Ausgabe

NameErklärungDatentyp
output_layer

Der neu erstellte Netzwerkanalyse-Layer.

Network Analyst-Layer

Codebeispiel

MakeRouteLayer – 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.MakeRouteLayer(network, "WorkRoute", "TravelTime")
MakeRouteLayer – Beispiel 2 (Python-Fenster)

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

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteLayer(network, "InspectionRoute", "TravelTime",
                        "FIND_BEST_ORDER", "PRESERVE_BOTH", "USE_TIMEWINDOWS",
                        ["Meters", "TravelTime"],
                        "ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY", ["Oneway"],
                        "USE_HIERARCHY", "", "TRUE_LINES_WITH_MEASURES",
                        "1/1/1900 9:00 AM")
MakeRouteLayer – Beispiel 3 (Workflow)

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

# Name: MakeRouteLayer_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:
    #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"
    impedance = "TravelTime"
    address_locator = os.path.join(input_gdb, "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.MakeRouteLayer(network, layer_name, impedance)

    #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, "",
                            exclude_restricted_elements="EXCLUDE")

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

In diesem Beispiel werden mehrere Routen in einer einzigen Berechnung erstellt. Dies wird am häufigsten zum Berechnen von Entfernungen oder Fahrzeiten zwischen Start-Ziel-Paaren verwendet.

# Name: MakeRouteLayer_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:
    #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"
    impedance = "TravelTime"

    #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 TravelTime, but compute the
    #distance traveled by accumulating the Meters attribute.
    result_object = arcpy.na.MakeRouteLayer(network, layer_name, impedance,
                                         accumulate_attribute_name=["Meters"],
                                         hierarchy="NO_HIERARCHY",
                                         start_date_time=start_time)

    #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, "",
                        exclude_restricted_elements = "EXCLUDE")
    arcpy.na.AddLocations(layer_object, stops_layer_name, stops_work,
                        field_mappings, "", append="APPEND",
                        exclude_restricted_elements = "EXCLUDE")

    #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