Résumé
Crée une couche de calcul de réseau de zones de desserte et définit ses propriétés d'analyse. Une couche d'analyse de zones de desserte est utile pour déterminer la zone d'accessibilité à partir de la localisation d'une ressource, au sein d'une valeur limite. La couche peut être créée à l'aide d'un jeu de données réseau local ou d'un service de calcul d'itinéraire hébergé en ligne ou sur un portail.
Utilisation
Après avoir créé la couche d'analyse avec cet outil, vous pouvez ajouter des objets d'analyse de réseau à l'aide de l'outil Ajouter des localisations, résoudre l'analyse à l'aide de l'outil Calculer et enregistrer les résultats sur le disque à l'aide de l'outil Enregistrer dans un fichier de couche.
Lorsque vous utilisez cet outil dans des modèles de géotraitement, si le modèle est exécuté en tant qu'outil, la couche d'analyse de réseau en sortie doit être convertie en paramètre de modèle. Dans le cas contraire, la couche en sortie n'est pas ajoutée au contenu de la carte.
Dans ArcGIS Pro, les données des couches d’analyse de réseau sont stockées sur disque dans des classes d’entités de géodatabase fichier. Lorsque vous créez une couche d’analyse de réseau dans un projet, les données de cette couche sont créées dans un nouveau jeu de classes d’entités dans l’environnement Espace de travail courant. Lorsque vous créez une couche d’analyse de réseau dans un script Python, vous devez commencer par définir de façon explicite l’environnement de l’espace de travail sur une géodatabase fichier dans laquelle vous voulez stocker les données de la couche à l’aide de arcpy.env.workspace = "<path to file gdb>". Lorsque la couche est créée, un nouveau jeu de données d'entité contenant les classes d'entités de sous-couche appropriées est ajouté à cette géodatabase fichier.
Syntaxe
arcpy.na.MakeServiceAreaAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {cutoffs}, {time_of_day}, {time_zone}, {output_type}, {polygon_detail}, {geometry_at_overlaps}, {geometry_at_cutoffs}, {polygon_trim_distance}, {exclude_sources_from_polygon_generation}, {accumulate_attributes})
Paramètre | 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. Utilisez l'URL du portail pour un service. | 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 une collection de paramètres réseau, tels que des restrictions de circulation et des règles de demi-tour, qui détermine 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 entrée du paramètre. | String |
travel_direction (Facultatif) | Spécifie la direction de déplacement vers les équipements ou à partir des équipements.
Ce paramètre peut engendrer des zones de desserte différentes dans un réseau avec des restrictions unidirectionnelles et des impédances différentes selon le sens du trajet. La zone de desserte d'un vendeur de pizzas, par exemple, doit être créée depuis la ressource, alors que la zone de desserte d'un hôpital doit être créée vers la ressource. | String |
cutoffs [cutoffs,...] (Facultatif) | Etendue de la zone de desserte à calculer, dans les unités de l'attribut d'impédance utilisé par le mode de déplacement sélectionné. Par exemple, lors de l’analyse de la durée du trajet, une valeur limite de 10 signifie que la zone de desserte obtenue représente la zone accessible avec un temps de conduite de 10 minutes. Plusieurs limites peuvent être configurées pour créer des zones de desserte concentriques. Par exemple, pour trouver des zones de desserte de 2, 3 et 5 minutes à partir d’une même ressource, spécifiez 2, 3 et 5 comme valeurs de ce paramètre. Vous pouvez remplacer cette valeur limite par défaut ressource par ressource en spécifiant des valeurs de borne individuelles dans la sous-couche des ressources. | Double |
time_of_day (Facultatif) | Heure de départ ou d'arrivée aux ressources de la couche de zone de desserte. Cette valeur est interprétée comme heure de départ ou heure d'arrivée selon que le trajet s'effectue à partir des ressources ou vers celles-ci.
Le paramètre time_of_day est très utile pour trouver les routes accessibles en fonction d’un mode de déplacement utilisant un attribut d’impédance qui varie selon l’heure, tel qu’un attribut basé sur des conditions de circulation dynamiques. En effectuant la même analyse avec des valeurs différentes pour le paramètre time_of_day, vous pouvez voir l'évolution de la portée d'une ressource en fonction de l'heure. Par exemple, la zone de desserte de 5 minutes autour d’une caserne de pompiers peut être grande tôt le matin, diminuer aux heures de pointe matinales, augmenter en fin de matinée, et ainsi de suite, tout au long de la journée. Une date et une heure peuvent être spécifiées au format 10/21/2015 10:30 AM. Au lieu d'utiliser une date particulière, un jour de la semaine peut être spécifié à l'aide des dates suivantes :
| Date |
time_zone (Facultatif) | Spécifie le fuseau horaire du paramètre d’heure.
| String |
output_type (Facultatif) | Spécifie le type de sortie à générer. La sortie des zones de desserte peut être constituée d'entités linéaires représentant les routes atteignables avant que les valeurs limites ne soient dépassées ou les entités surfaciques comprenant ces lignes (représentant la zone atteignable).
Les types de sortie Lines (Lignes) et Polygons and Lines (Polygones et lignes) ne sont pas disponibles 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 la génération de lignes. | String |
polygon_detail (Facultatif) | Spécifie le niveau de détail des polygones en sortie.
Si votre analyse inclut une zone urbaine avec un réseau de transport de type grille, la différence entre les polygones généralisés et les polygones standard est minime. Cependant, les polygones standard et détaillés peuvent afficher des résultats beaucoup plus précis que les polygones généralisés pour les routes de montagne et de campagne. | String |
geometry_at_overlaps (Facultatif) | Spécifie le comportement de la sortie de zones de desserte à partir de plusieurs ressources liées les unes aux autres.
| String |
geometry_at_cutoffs (Facultatif) | Spécifie le comportement de la sortie de zones de desserte pour une seule ressource lorsque plusieurs valeurs limites sont spécifiées. Ce paramètre ne s'applique pas à la sortie de lignes.
| String |
polygon_trim_distance (Facultatif) | Distance de découpage des polygones de la zone de desserte. La distance de découpage des polygones correspond à la distance d’extension du polygone de la zone de desserte à partir de la route, lorsqu’aucune autre route accessible ne se trouve à proximité. Elle fonctionne de la même manière qu’une taille de zone tampon de lignes. Cette option est utile lorsque le réseau est clairsemé et que vous ne voulez pas que la zone de desserte couvre de larges surfaces sur lesquelles il n’y a aucune entité. Ce paramètre comprend une valeur et des unités de distance. La valeur par défaut est 100 mètres. | Linear Unit |
exclude_sources_from_polygon_generation [exclude_sources_from_polygon_generation,...] (Facultatif) | Sources de tronçons du jeu de données réseau exclues lors de la génération des polygones des zones de desserte. Aucun polygone n’est généré autour des sources exclues, même si elles sont traversées lors de l’analyse. L’exclusion d’une source de données de polygones de zone de desserte n’empêche pas ces sources d’être traversées. L’exclusion de sources de polygones de zone de desserte agit uniquement sur la forme des polygones des zones de desserte. Si vous souhaitez empêcher la traversée d’une source de réseau précise, vous devez créer une restriction correspondante lors de la définition de votre jeu de données réseau. Cette option est utile si vous avez quelques sources de données du réseau que vous ne voulez pas inclure dans la génération de polygones parce qu'elles créent des polygones moins précis ou sont sans importance pour l'analyse des zones de desserte. Par exemple, lors de la création d'une zone de desserte de durée de trajet à pied dans un réseau multimodal incluant des rues et des lignes de métro, vous devez choisir d'exclure les lignes de métro de la génération de polygones. Bien que le voyageur puisse utiliser les lignes de métro, il ne peut pas s'arrêter à mi-chemin le long d'une ligne de métro et entrer dans un bâtiment voisin. Il doit voyager sur toute la ligne de métro, sortir du métro à la station choisie, puis emprunter les rues menant au bâtiment. Il n’est donc pas pertinent de générer une entité surfacique autour d’une ligne de métro. Ce paramètre n’est pas disponible si les types de géométrie en sortie n’incluent aucun polygone, si le réseau comporte moins de deux sources de segment, 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 dans une version de Portal for ArcGIS qui ne prend pas en charge l’exclusion des sources. | 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 utilise uniquement 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 couche d’analyse n’est pas configurée pour obtenir des lignes en sortie, 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 |
Sortie dérivée
Nom | Explication | Type de données |
out_network_analysis_layer | Couche d’analyse de réseau nouvellement créée. | Couche Network Analyst |
Exemple de code
Exécute l'outil uniquement avec les paramètres requis.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "FireStationCoverage")
Exécutez l'outil avec tous les paramètres.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "WarehouseCoverage",
"Driving Time", "FROM_FACILITIES", [5, 10, 15],
"1/1/1900 9:00 AM", "UTC", "POLYGONS",
"STANDARD", "DISSOLVE", "RINGS", "100 meters",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"], ["Meters",
"DriveTime"])
Le script Python autonome suivant illustre l'utilisation de l'outil MakeServiceAreaAnalysisLayer pour générer des zones de desserte de 1, 2 et 3 minutes autour de casernes de pompiers.
# Name: MakeServiceAreaAnalysisLayer_Workflow.py
# Description: Generate 1-,2-,3- minute service areas around fire stations and
# save the results to a layer file on disk. The service area
# polygons can be used to visualize the areas that do not have
# adequate coverage from the fire stations
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#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 = "FireStationCoverage"
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new service area layer. We wish to generate the service area
#polygons as rings, so that we can easily visualize the coverage for any
#given location. We also want overlapping polygons so we can determine the
#number of fire stations that cover a given location. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES", [1, 2, 3],
polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP",
geometry_at_cutoffs="RINGS")
#Get the layer object from the result object. The service layer can now be
#referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
#Load the fire stations as facilities using default field mappings and
#default search tolerance
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
"")
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Save the solved service area 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))
Cet exemple explique comment créer des zones de desserte autour de ressources à des heures différentes de la journée. Il montre également comment transférer des champs d'entités en entrée à destination d'entités en sortie et ajouter des polygones en sortie à une classe d'entités existante.
Héritage :
La fonction GetNASublayer peut être utilisée pour 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: MakeServiceAreaAnalysisLayer_Workflow2.py
# Description: Generate 3-minute service areas around fire stations at several
# times of day to compare coverage differences due to varying
# traffic conditions. Save the results to a feature class on disk.
# Requirements: Network Analyst Extension
# Import system modules
import arcpy
from arcpy import env
import os, datetime
try:
# Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
# 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 = "FireStationCoverage"
out_featureclass = os.path.join(output_dir, "Output.gdb",
"FireStationCoverage")
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
times_of_day = [datetime.datetime(2014, 9, 25, 7, 0, 0),
datetime.datetime(2014, 9, 25, 12, 30, 0),
datetime.datetime(2014, 9, 25, 17, 30, 0),
datetime.datetime(2014, 9, 25, 21, 0, 0)]
# Create a new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES",
[3], polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP")
# Get the layer object from the result object. The service area layer can
# now be referenced using the layer object.
layer_object = result_object.getOutput(0)
# Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
# Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
polygons_layer_name = sublayer_names["SAPolygons"]
# The input data has a field for FireStationID that we want to transfer to
# our analysis layer. Add the field, and then use field mapping to transfer
# the values.
arcpy.na.AddFieldToAnalysisLayer(layer_object, facilities_layer_name,
"FireStationID", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
facilities_layer_name)
field_mappings["FireStationID"].mappedFieldName = "FireStationID"
# Load the fire stations as facilities.
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities,
field_mappings, "")
# Add fields to the output Polygons sublayer for later use.
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"FireStationID", "TEXT")
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"TimeOfDay", "TEXT")
# Get sublayers to work with later
facilities_sublayer = arcpy.na.GetNASublayer(layer_object, "Facilities")
polygons_sublayer = arcpy.na.GetNASublayer(layer_object, "SAPolygons")
# Get the Service Area Layer's solver properties. This can be used to
# set individual properties later without re-creating the layer.
solver_properties = arcpy.na.GetSolverProperties(layer_object)
# Solve the Service Area for each time of day in the time list
for t in times_of_day:
print("Calculating service area for time of day: ", t)
# Use the solver properties to set the time of day for the solve
solver_properties.timeOfDay = t
# Solve the service area layer
arcpy.na.Solve(layer_object)
# Transfer the FireStationID field from the input Facilities to the
# output Polygons
arcpy.management.AddJoin(polygons_sublayer, "FacilityID",
facilities_sublayer, "ObjectID")
# The joined fields are qualified by the feature class name of the joined
# table, so determine the feature class names
field_qualifier_pol = os.path.basename(polygons_sublayer.dataSource)
target_field_name = "%s.FireStationID" % field_qualifier_pol
field_qualifier_fac = os.path.basename(facilities_sublayer.dataSource)
expression = "!%s.FireStationID!" % field_qualifier_fac
arcpy.management.CalculateField(polygons_sublayer, target_field_name,
expression, "PYTHON")
arcpy.management.RemoveJoin(polygons_sublayer)
# Populate the TimeOfDay field in the output feature class
expression = '"' + str(t) + '"'
arcpy.management.CalculateField(polygons_sublayer, "TimeOfDay",
expression, "PYTHON")
# Append the polygons to the output feature class. If this was the first
# solve, create the feature class.
if not arcpy.Exists(out_featureclass):
arcpy.management.CopyFeatures(polygons_sublayer, out_featureclass)
else:
arcpy.management.Append(polygons_sublayer, out_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))
Environnements
Informations de licence
- Basic: Oui
- Standard: Oui
- Advanced: Oui
Vous avez un commentaire à formuler concernant cette rubrique ?