RouteSolverProperties (arcpy.na)

Zusammenfassung

Ermöglicht den Zugriff auf Analyse-Eigenschaften eines Netzwerkanalyse-Layers für Routen. Die Funktion GetSolverProperties wird verwendet, um ein RouteSolverProperties-Objekt aus einem Netzwerkanalyse-Layer für Routen zu erhalten.

Diskussion

Das RouteSolverProperties-Objekt bietet Lese- und Schreibzugriff auf alle Analyse-Eigenschaften eines Netzwerkanalyse-Layers für Routen. Das Objekt kann verwendet werden, um die gewünschten Analyse-Eigenschaften des Routen-Layers zu ändern, und der entsprechende Layer kann erneut berechnet werden, um die gewünschten Ergebnisse zu erhalten. Ein neuer Routen-Layer kann über das Geoverarbeitungswerkzeug Routen-Layer erstellen erstellt werden. Durch das Abrufen des RouteSolverProperties-Objekts aus einem neuen Routen-Layer kann der bestehende Layer für nachfolgende Analysen erneut verwendet werden, wodurch das mitunter zeitaufwändige Erstellen eines neuen Layers für jede Analyse nicht mehr erforderlich ist.

Nachdem die Eigenschaften des RouteSolverProperties-Objekts geändert wurden, kann der entsprechende Layer sofort mit anderen Funktionen und Geoverarbeitungswerkzeugen verwendet werden. Eine Aktualisierung des Layers zum Übernehmen der Änderungen am Objekt ist nicht erforderlich.

Eigenschaften

EigenschaftErläuterungDatentyp
accumulators
(Lesen und schreiben)

Ermöglicht das Abrufen oder Festlegen einer Liste der Netzwerk-Kostenattribute, die als Teil der Analyse akkumuliert werden. Eine leere Liste, [], weist darauf hin, dass keine Kostenattribute akkumuliert werden.

String
attributeParameters
(Lesen und schreiben)

Ermöglicht das Abrufen oder Festlegen der parametrierten Attribute, die für die Analyse verwendet werden sollen. Die Eigenschaft gibt ein Python-Wörterbuch zurück. Der Wörterbuchschlüssel ist ein Tupel mit zwei Werten, der aus dem Attributnamen und dem Parameternamen besteht. Der Wert der einzelnen Elemente im Wörterbuch ist der Parameterwert.

Mithilfe der parametrierten Netzwerkattribute können dynamische Aspekte eines Attributwertes modelliert werden. So kann beispielsweise ein Tunnel mit einer Höhenbeschränkung von 12 Fuß mit einem Parameter modelliert werden. In diesem Fall sollte die Höhe des Fahrzeugs (in Fuß) als angegebener Parameterwert verwendet werden. Wenn das Fahrzeug höher als 12 Fuß ist, wird diese Einschränkung als "Wahr" bewertet und das Passieren des Tunnels somit untersagt. Entsprechend kann eine Brücke einen Parameter zur Angabe einer Gewichtsbeschränkung aufweisen.

Das Ändern der festgelegten Eigenschaft " attributeParameters" würde keine aktualisierten Werte zurückgeben. Sie sollten daher immer ein neues Wörterbuchobjekt verwenden, um die Werte für die Eigenschaft festzulegen. Die zwei folgenden Codeblöcke veranschaulichen den Unterschied zwischen diesen beiden Ansätzen:

#Don't attempt to modify the attributeParameters property in place.
#This coding method won't work.

solverProps.attributeParameters[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"
#Modify the attributeParameters property using a new dictionary object.
#This coding method works. 

params = solverProps.attributeParameters
params[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"
solverProps.attributeParameters = params
Wenn der Netzwerkanalyse-Layer keine parametrierten Attribute aufweist, gibt diese Eigenschaft None zurück.

Dictionary
findBestSequence
(Lesen und schreiben)

Steuert, ob die Stopps neu angeordnet werden, um die optimale Route zu finden. Nachfolgend finden Sie eine Liste der möglichen Werte:

  • 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. Diese Option kann auch über den Wert True festgelegt werden.
  • USE_INPUT_ORDERDie Stopps werden in der Eingabereihenfolge besucht. Diese Option kann auch über den Wert False festgelegt werden.
String
impedance
(Lesen und schreiben)

Ermöglicht das Abrufen oder Festlegen des als Impedanz verwendete Netzwerk-Kostenattributs. Dieses Kostenattribut wird während der Ermittlung der besten Route minimiert.

String
orderingType
(Lesen und schreiben)

Steuert die Reihenfolge der Stopps, wenn die Eigenschaft findBestSequence auf FIND_BEST_ORDER gesetzt ist. Nachfolgend finden Sie eine Liste der möglichen Werte:

  • PRESERVE_BOTHBehält den ersten und letzten Stopp in der Eingabereihenfolge als ersten und letzten Stopp der Route bei.
  • PRESERVE_FIRSTBehält den ersten Stopp in der Eingabereihenfolge als ersten Stopp der Route bei. Der letzte Stopp kann jedoch neu angeordnet werden.
  • PRESERVE_LASTBehält den letzten Stopp in der Eingabereihenfolge als letzten Stopp der Route bei. Der erste Stopp kann jedoch neu angeordnet werden.
  • PRESERVE_NONEDer erste und letzte Stopp können neu angeordnet werden.
String
outputPathShape
(Lesen und schreiben)

Ermöglicht das Abrufen oder Festlegen des Shape-Typs für die Routen-Features, die vom Solver ausgegeben werden. Nachfolgend finden Sie eine Liste der möglichen Werte:

  • TRUE_LINES_WITH_MEASURESDie Ausgaberouten weisen die exakte Form der zugrunde liegenden Netzwerkquellen auf. Die Ausgabe umfasst zudem Routenmesswerte für die lineare Referenzierung. Die Messwerte nehmen ab dem ersten Halt zu und zeichnen die kumulierte Impedanz zum Erreichen einer definierten Position auf.
  • TRUE_LINES_WITHOUT_MEASURESDie Ausgaberouten weisen die exakte Form der zugrunde liegenden Netzwerkquellen auf.
  • STRAIGHT_LINESDas Ausgaberouten-Shape ist eine einzelne gerade Linie zwischen den Stopps.
  • NO_LINESFür die Ausgaberouten wird kein Shape erstellt.
String
restrictions
(Lesen und schreiben)

Ermöglicht das Abrufen oder Festlegen einer Liste der Restriktionsattribute, die für die Analyse angewendet werden. Eine leere Liste, [], weist darauf hin, dass keine Restriktionsattribute für die Analyse verwendet werden.

String
solverName
(Schreibgeschützt)

Gibt den Namen des Solvers zurück, der vom Netzwerkanalyse-Layer referenziert wird, um das Eigenschaftenobjekt des Solvers zu erhalten. Die Eigenschaft gibt immer den Zeichenfolgenwert Route Solver zurück, wenn der Zugriff über ein RouteSolverProperties-Objekt erfolgt.

String
timeOfDay
(Lesen und schreiben)

Ermöglicht das Abrufen oder Festlegen des Startdatums und der Startzeit für die Route. Die Routenstartzeit wird i.d.R. verwendet, um Routen auf der Grundlage des Impedanzattributs zu suchen, das sich mit der Zeit des Tags ändert. So kann beispielsweise eine Startzeit von 9:00 Uhr verwendet werden, um eine Route zu suchen, für die die Stoßzeiten berücksichtigt werden. Durch den Wert None kann festgelegt werden, dass keine Datums- und Uhrzeitangaben verwendet werden sollen.

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 – 2.1.1900
  • Mittwoch – 3.1.1900
  • Donnerstag – 4.1.1900
  • Freitag – 5.1.1900
  • Samstag – 6.1.1900

Wenn Sie beispielsweise festlegen möchten, dass die Route um 17:00 Uhr am Dienstag beginnen soll, geben Sie den folgenden Wert an: datetime.datetime(1900, 1, 2, 17,0,0).

DateTime
uTurns
(Lesen und schreiben)

Ermöglicht das Abrufen oder Festlegen der Richtlinie, die angibt, wie der Solver Wenden an Knoten, die beim Durchlaufen des Netzwerks zwischen Stopps auftreten können, verarbeitet. Nachfolgend finden Sie eine Liste der möglichen Werte:

  • ALLOW_UTURNSWenden sind an Knoten mit einer beliebigen Anzahl verbundener Kanten erlaubt.
  • NO_UTURNSWenden sind an allen Knoten verboten, unabhängig von der Valenz der Knoten. Beachten Sie, dass Wenden an Netzwerkstandorten auch dann erlaubt sind, wenn diese Einstellung ausgewählt wurde. Sie können jedoch die Eigenschaft "CurbApproach" der einzelnen Netzwerkstandorte festlegen, um auch hier Wenden zu verbieten.
  • 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.
String
useHierarchy
(Lesen und schreiben)

Steuert die Verwendung des Hierarchieattributs während der Durchführung der Analyse. Nachfolgend finden Sie eine Liste der möglichen Werte:

  • USE_HIERARCHY Verwenden Sie das Hierarchieattribut für die Analyse. 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 die Präferenzen eines Fahrers auf der Straße zu simulieren, der – wenn möglich – lieber auf Autobahnen statt auf Landstraßen fährt, selbst wenn die Fahrstrecke dann länger ist. Diese Option ist nur verfügbar, wenn das Netzwerk-Dataset, auf das vom ArcGIS Network Analyst-Layer verwiesen wird, über ein Hierarchieattribut verfügt. Diese Option kann auch über den Wert True festgelegt werden.
  • NO_HIERARCHYVerwenden Sie das Hierarchieattribut nicht für die Analyse. Wird keine Hierarchie verwendet, dann wird eine genaue Route für das Netzwerk-Dataset berechnet. Diese Option kann auch über den Wert False festgelegt werden.
String
useTimeWindows
(Lesen und schreiben)

Steuert, ob für die Stopps Zeitfenster verwendet werden. Nachfolgend finden Sie eine Liste der möglichen Werte:

  • 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 einer Zeitfensterverletzung. Die Zeitfensterverletzung insgesamt wird bei Berechnung der Route mit der Mindestimpedanz ausgeglichen. Diese Option ist nur verfügbar, wenn das Netzwerkkostenattribut, das als Wert für die Eigenschaft Impedanz festgelegt ist, in Zeiteinheiten angegeben ist. Diese Option kann auch über den Wert True festgelegt werden.
  • NO_TIMEWINDOWSDie Route ignoriert Zeitfenster an den Stopps. Diese Option kann auch über den Wert False festgelegt werden.
String

Codebeispiel

RouteSolverProperties – Beispiel 1 (Python-Fenster)

Das Skript veranschaulicht, wie Sie die Eigenschaft "Impedanz" für das TravelTime-Kostenattribut aktualisieren, die Kostenattribute "Minutes" und "Meters" als Akkumulationsattribute festlegen und die aktuelle Zeit als Startzeit der Route verwenden. Es wird davon ausgegangen, dass ein Netzwerkanalyse-Layer für Routen mit den Namen "Route" in einem neuen Kartendokument erstellt wurde, basierend auf dem Netzwerk-Dataset des Lernprogramms für die Region San Francisco.

#Get the route layer object from a layer named "Route" in the table of contents
routeLayer = arcpy.mapping.Layer("Route")

#Get the route solver properties object from the route layer
solverProps = arcpy.na.GetSolverProperties(routeLayer)

#Update the properties for the route layer using the route solver properties object
solverProps.impedance = "TravelTime"
solverProps.accumulators = ["Meters", "Minutes"]
#Only set the time component from the current date time as time of day
solverProps.timeOfDay = datetime.datetime.now().time()
RouteSolverProperties – Beispiel 2 (Workflow)

Das Skript veranschaulicht, wie die kürzeste (Entfernung) und schnellste (Fahrzeit) Route zwischen einer Reihe von Stopps ermittelt wird und die einzelnen Routen als Feature-Class in einer Geodatabase gespeichert werden. Es veranschaulicht zudem, wie nur eine Instanz eines Routen-Layers erstellt wird und die Eigenschaft "Impedanz" über das RouteSolverProperties-Objekt geändert wird, um die gewünschten Ergebnisse zu erhalten.

import arcpy

#Set up the environment
arcpy.env.overwriteOutput = True
arcpy.CheckOutExtension("network")

#Set up variables
networkDataset = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
stops = "C:/Data/SanFrancisco.gdb/Analysis/Stores"
fastestRoute = "C:/Data/SanFrancisco.gdb/FastestRoute"
shortestRoute = "C:/Data/SanFrancisco.gdb/ShortestRoute"

#Make a new route layer using travel time as impedance to determine fastest route
routeLayer = arcpy.na.MakeRouteLayer(networkDataset, "StoresRoute",
                                     "TravelTime").getOutput(0)

#Get the network analysis class names from the route layer
naClasses = arcpy.na.GetNAClassNames(routeLayer)

#Get the routes sublayer from the route layer
routesSublayer = arcpy.mapping.ListLayers(routeLayer, naClasses["Routes"])[0]

#Load stops
arcpy.na.AddLocations(routeLayer, naClasses["Stops"], stops)

#Solve the route layer
arcpy.na.Solve(routeLayer)

#Copy the route as a feature class
arcpy.management.CopyFeatures(routesSublayer, fastestRoute)

#Get the RouteSolverProperties object from the route layer to modify the
#impedance property of the route layer.
solverProps = arcpy.na.GetSolverProperties(routeLayer)

#Set the impedance property to "Meters" to determine the shortest route.
solverProps.impedance = "Meters"

#Resolve the route layer
arcpy.na.Solve(routeLayer)

#Copy the route as a feature class
arcpy.management.CopyFeatures(routesSublayer, shortestRoute)

arcpy.AddMessage("Completed")

Verwandte Themen

9/11/2013