arcpy.na.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}, {ignore_invalid_locations}, {analysis_geodatabase}, {analysis_feature_dataset_name})
|
Nom
|
Explication
|
Type de données
|
|
network_data_source
|
Jeu de données réseau ou service sur lequel l'analyse du réseau est effectuée.
Le paramètre peut être spécifié avec une des valeurs suivantes :
Le chemin d’accès du catalogue au jeu de données réseau
Un objet de couche de jeu de données réseau
Le nom de chaîne de la couche de jeu de données réseau
L’URL d’ArcGIS Online ou d’un portail ArcGIS Enterprise configuré avec les services calcul d’itinéraire standards
Pour utiliser une URL du portail, vous devez être connecté au portail avec un compte ayant des privilèges de calcul d’itinéraire.
En savoir plus sur la connexion à un portail dans Python
En savoir plus sur l’analyse de réseau avec les services de calcul d’itinéraire
Lorsque vous utilisez ArcGIS Online ou un portail ArcGIS Enterprise dont les services de calcul d’itinéraire sont configurés avec ArcGIS Online comme réseau en entrée, la réalisation d’une analyse consomme des crédits et est soumise à certaines limites, telles que le nombre d’entrées autorisées.
En savoir plus sur la consommation de crédits et les limites d’analyse de réseau
|
Network Dataset Layer; String
|
|
layer_name
(Facultatif)
|
Nom de la couche d’analyse de réseau à créer.
|
String
|
|
travel_mode
(Facultatif)
|
Nom du mode de déplacement à utiliser dans l’analyse. Le mode de déplacement représente un ensemble de paramètres réseau, tels que des restrictions de circulation et des règles de demi-tour, qui déterminent la façon dont un piéton, une voiture, un camion ou un autre mode de transport se déplace sur le réseau. Les modes de déplacement sont définis dans votre source de données de réseau.
Vous pouvez aussi utiliser un objet arcpy.na.TravelMode et une chaîne contenant la représentation JSON valide d’un mode de déplacement, en guise d’entrée du paramètre.
|
String
|
|
sequence
(Facultatif)
|
Spécifie si les arrêts en entrée doivent être parcourus dans un ordre spécifique lors du calcul de l'itinéraire optimal. Cette option transforme l'analyse des itinéraires d'un problème de plus court chemin en un problème du voyageur de commerce (TSP).
USE_CURRENT_ORDER—Les arrêts sont visités dans l'ordre de saisie. Il s’agit de l’option par défaut.
FIND_BEST_ORDER—Les arrêts sont réorganisés pour trouver le meilleur itinéraire. Cette option transforme l'analyse des itinéraires d'un problème de plus court chemin en un problème du voyageur de commerce (TSP).
PRESERVE_BOTH—Les premier et dernier arrêts sont conservés dans l’ordre de saisie. Les autres sont réorganisés pour trouver le meilleur itinéraire.
PRESERVE_FIRST—Le premier arrêt est conservé dans l’ordre de saisie. Les autres sont réorganisés pour trouver le meilleur itinéraire.
PRESERVE_LAST—Le dernier arrêt est conservé dans l’ordre de saisie. Les autres sont réorganisés pour trouver le meilleur itinéraire.
|
String
|
|
time_of_day
(Facultatif)
|
La date et l’heure de début de l’itinéraire. L'heure de début de l'itinéraire permet généralement de trouver des itinéraires selon l'attribut d'impédance qui varie avec l'heure du jour. Par exemple, une heure de début égale à 7 h permet de trouver un itinéraire tenant compte la circulation à l’heure de pointe. La valeur par défaut de ce paramètre est 8 h. Une date et une heure peuvent être spécifiées sous la forme 10/21/05 10:30 AM. Si l’itinéraire couvre plusieurs jours et que seule l’heure de début est indiquée, la date courante est utilisée.
Après le calcul, l’heure de début et l’heure de fin de l’itinéraire sont renseignées dans les itinéraires en sortie. Ces heures de début et de fin sont également utilisées lors de la génération de directions.
Configurez l’analyse pour utiliser une des dates spéciales suivantes pour modéliser un jour de la semaine ou la date actuelle au lieu d’une date statique spécifique :
Today—12/30/1899
Sunday—12/31/1899
Monday—1/1/1900
Tuesday—1/2/1900
Wednesday—1/3/1900
Thursday—1/4/1900
Friday—1/5/1900
Saturday—1/6/1900
En savoir plus sur l’utilisation des dates et des heures et sur leur interprétation dans une analyse de réseau
|
Date
|
|
time_zone
(Facultatif)
|
Spécifie le fuseau horaire du paramètre time_of_day.
LOCAL_TIME_AT_LOCATIONS—Le paramètre time_of_day se rapporte au fuseau horaire dans lequel se trouve le premier arrêt d’un itinéraire. Il s’agit de l’option par défaut. Si vous générez de nombreux itinéraires commençant dans plusieurs fuseaux horaires, les heures de départ sont échelonnées en temps universel coordonné, ou UTC (Universal Time Coordinated). Par exemple, une valeur time_of_day de 10 h 00, le 2 janvier, signifie une heure de départ fixée à 10 h 00 heure normale de l’Est (15 h 00 UTC) pour les itinéraires commençant dans le fuseau horaire de l’Est et 10 h 00 heure normale du Centre (16 h 00 UTC) pour les itinéraires commençant dans le fuseau horaire du Centre. Les heures de départ sont décalées d’une heure en temps universel coordonné (UTC). Les dates et heures de départ et d’arrivée enregistrées dans la classe d’entités Arrêts en sortie se rapportent au fuseau horaire local du premier arrêt de chaque itinéraire.
UTC—Le paramètre time_of_day est exprimé en temps universel coordonné (UTC). Choisissez cette option pour générer un itinéraire à une heure donnée (maintenant, par exemple), sans toutefois connaître avec certitude le fuseau horaire dans lequel se trouve le premier arrêt. Si vous générez de nombreux itinéraires qui couvrent plusieurs fuseaux horaires, les heures de départ en temps universel coordonné (UTC) sont simultanées. Par exemple, une valeur time_of_day de 10 h 00, le 2 janvier, signifie une heure de départ fixée à 5 h 00 heure normale de l’Est (10 h 00 UTC) pour les itinéraires commençant dans le fuseau horaire de l’Est, et de 4 h 00 heure normale du Centre (10 h 00 UTC) pour les itinéraires commençant dans le fuseau horaire du Centre. Les deux itinéraires commencent à 10 h 00 UTC. Les dates et heures de départ et d’arrivée enregistrées dans la classe d’entités Arrêts se rapportent au temps universel coordonnée (UTC).
|
String
|
|
line_shape
(Facultatif)
|
Indique le type de forme qui sera utilisé pour les entités itinéraires générées par l’analyse.
Quel que soit le type de forme en sortie spécifié, le meilleur itinéraire est toujours déterminé par l’impédance du réseau, pas par la distance euclidienne. Cela signifie que seules les formes d'itinéraire sont différentes, pas le parcours du réseau sous-jacent.
ALONG_NETWORK—Les itinéraires en sortie ont la forme exacte des sources de données du réseau sous-jacentes. La sortie comprend des mesures d’itinéraire pour le référencement linéaire. Les mesures augmentent à partir du premier arrêt et enregistrent l'impédance cumulée pour atteindre une position donnée.
NO_LINES—Aucune forme n’est créée pour les itinéraires en sortie.
STRAIGHT_LINES—La forme d'itinéraire en sortie est une ligne droite unique entre les arrêts.
|
String
|
|
accumulate_attributes
[accumulate_attributes,...]
(Facultatif)
|
Liste des attributs de coût à cumuler lors de l’analyse. Ces attributs accumulés servent uniquement de référence. Le solveur n’utilise que l’attribut de coût utilisé par le mode de déplacement désigné pour la réalisation de l’analyse.
Pour chaque attribut de coût accumulé, une propriété Total_ [Impédance] est renseignée dans les entités en sortie de l’analyse du réseau.
Ce paramètre n’est pas disponible si la source de données réseau est un service ArcGIS Online ou si la source de données réseau est un service hébergé sur une version de Portal for ArcGIS qui ne prend pas en charge l’accumulation.
|
String
|
|
generate_directions_on_solve
(Facultatif)
|
Spécifie si une feuille de route sera générée lors de l’exécution de l’analyse.
Dans le cas d’une analyse pour laquelle la création d’une feuille de route détaillée n’est pas nécessaire, la désactivation de l’option de création d’une feuille de route permet de gagner du temps.
|
Boolean
|
|
time_zone_for_time_fields
(Facultatif)
|
Indique le fuseau horaire qui sera utilisé pour interpréter les champs horaires inclus dans les tables en entrée, par exemple les champs utilisés pour les fenêtres horaires.
LOCAL_TIME_AT_LOCATIONS—Les dates et heures dans les champs horaires pour l’arrêt sont interprétées conformément au fuseau horaire dans lequel se situe l’arrêt. Il s’agit de l’option par défaut.
UTC—Les dates et heures dans les champs horaires pour l’arrêt se rapportent au temps universel coordonné (UTC).
|
String
|
|
ignore_invalid_locations
(Facultatif)
|
Détermine si les localisations en entrée non valides sont ignorées. Généralement, les localisations ne sont pas valides si elles sont impossibles à localiser sur le réseau. Lorsque les emplacements non valides sont ignorés, le solveur les ignore et tente de réaliser l’analyse avec les emplacements restants.
SKIP—Les emplacements en entrée non valides sont ignorés et seuls les emplacements valides sont utilisés. Il s’agit de l’option par défaut.
HALT—Tous les emplacements en entrée sont utilisés. Les localisations non valides provoquent l’échec de l’analyse.
|
Boolean
|
|
analysis_geodatabase
(Facultatif)
|
Espace de travail de la géodatabase fichier où seront stockées les données de la nouvelle couche d’analyse de réseau. Lorsque ce paramètre n’est pas spécifié, les données de la sous-couche seront créées dans l’environnement de géotraitement Current Workspace (Espace de travail courant), qui correspond généralement à la géodatabase du projet.
En savoir plus sur la source de données d’analyse d’une couche d’analyse de réseau
|
Workspace
|
|
analysis_feature_dataset_name
(Facultatif)
|
Nom à utiliser pour le nouveau jeu de classes d’entités que l’outil créera dans la géodatabase d’analyse pour stocker les données des sous-couches d’une couche d’analyse de réseau. Lorsqu’il n’est pas spécifié, le jeu de classes d’entités portera un nom unique et aléatoire.
En savoir plus sur la source de données d’analyse d’une couche d’analyse de réseau
|
String
|
Sortie dérivée
|
Nom
|
Explication
|
Type de données
|
|
out_network_analysis_layer
|
La couche d’analyse de réseau en sortie.
|
Network Analyst Layer
|
Exemple de code
Conseil :
Bien que cet outil puisse être utilisé dans un script Python, la meilleure pratique pour effectuer une analyse de réseau dans Python consiste à lui préférer les classes du solveur dans le module arcpy.nax. En savoir plus sur l’analyse de réseau dans Python.
Exemple 1 d’utilisation de la fonction MakeRouteAnalysisLayer (fenêtre Python)
Exécute l’outil uniquement avec les paramètres requis.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "WorkRoute")
Exemple 2 d’utilisation de la fonction MakeRouteAnalysisLayer (fenêtre Python)
Exécutez l’outil avec tous les paramètres.
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"])
Exemple 3 d’utilisation de la fonction MakeRouteAnalysisLayer (processus)
Le script Python autonome suivant illustre l’utilisation de la fonction MakeRouteAnalysisLayer pour trouver le meilleur itinéraire pour parcourir les localisations d’arrêt géocodées.
# 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:
#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))
Exemple 4 d’utilisation de la fonction MakeRouteAnalysisLayer (processus)
Cet exemple explique comment calculer plusieurs itinéraires en une seule analyse, méthode qui s'avère utile pour calculer des distances ou des temps de trajet entre des paires origine-destination.
Héritage :
La fonction GetNASublayer permet d’extraire les sous-couches d’une couche d’analyse de réseau. Elle a été introduite dans ArcGIS Pro 2.7. Dans les versions précédentes, la meilleure manière d’extraire un objet de sous-couche d’une couche d’analyse de réseau consistait à utiliser la méthode listLayers de l’objet Layer d’analyse de réseau en utilisant le nom de la sous-couche en tant que caractère générique.
# 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:
#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 = arcpy.na.GetNASublayer(layer_object, "Routes")
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))