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
Eigenschaft | Erläuterung | Datentyp |
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:
| Dictionary |
findBestSequence (Lesen und schreiben) | Controls whether the stops are reordered to find optimal routes. The following is a list of possible values:
| String |
impedance (Lesen und schreiben) | Provides the ability to get or set the network cost attribute used as impedance. This cost attribute is minimized while determining the best route. | String |
orderingType (Lesen und schreiben) | Controls the ordering of stops when findBestSequence property is set to FIND_BEST_ORDER. The following is a list of possible values:
| String |
outputPathShape (Lesen und schreiben) | Provides the ability to get or set the shape type for the route features that are output by the solver. The following is a list of possible values:
| 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) |
Returns the name of the solver being referenced by the network analysis layer used to obtain the solver properties object. The property always returns the string value Route Solver when accessed from a RouteSolverProperties object. | String |
timeOfDay (Lesen und schreiben) | Provides the ability to get or set the start date and time for the route. Route start time is mostly used to find routes based on the impedance attribute that varies with the time of the day. For example, a start time of 9 a.m. could be used to find a route that considers the rush-hour traffic. A value of None can be used to specify that no date and time should be used. Instead of using a particular date, a day of the week can be specified using the following dates:
For example, to specify that the route should start at 5:00 p.m. on Tuesday, specify the value as datetime.datetime(1900, 1, 2, 17,0,0). The timeZoneUsage parameter specifies whether the date and time refer to UTC or the time zone in which the first stop is located. | DateTime |
timeZoneUsage (Lesen und schreiben) | Specifies the time zone of the timeOfDay parameter.
When solving a route analysis that spans across multiple time zones and setting a start time, the orderingType cannot be set to PRESERVE_NONE. A starting location and time zone must be fixed. | String |
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:
| 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:
| String |
useTimeWindows (Lesen und schreiben) | Controls if time windows will be used at the stops. The following is a list of possible values:
| String |
Codebeispiel
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()
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")