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) | Steuert, ob die Stopps neu angeordnet werden, um die optimale Route zu finden. Nachfolgend finden Sie eine Liste der möglichen Werte:
| 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:
| 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:
| 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:
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:
| 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) | Steuert, ob für die Stopps Zeitfenster verwendet werden. Nachfolgend finden Sie eine Liste der möglichen Werte:
| 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")