Générer une couche de zones de desserte (Network Analyst)

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.

Héritage :

C'est un outil déconseillé. Cette fonctionnalité a été remplacée par l'outil Générer une couche d'analyse de la zone de desserte.

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.

Syntaxe

MakeServiceAreaLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {travel_from_to}, {default_break_values}, {polygon_type}, {merge}, {nesting_type}, {line_type}, {overlap}, {split}, {excluded_source_name}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {polygon_trim}, {poly_trim_value}, {lines_source_fields}, {hierarchy}, {time_of_day})
ParamètreExplicationType de données
in_network_dataset

Jeu d'entités réseau sur lequel le calcul de zones de dessertes sera effectué.

Network Dataset Layer
out_network_analysis_layer

Nom de la couche d'analyse de réseau des zones de desserte à créer.

String
impedance_attribute

L'attribut de coût à utiliser comme impédance dans l'analyse.

String
travel_from_to
(Facultatif)

Spécifie la direction de déplacement vers les équipements ou à partir des équipements.

  • TRAVEL_FROMLa zone de desserte est créée depuis les ressources.
  • TRAVEL_TOLa zone de desserte est créée dans la direction des ressources.

Cette option peut engendrer des zones de desserte différentes sur 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
default_break_values
(Facultatif)

Valeurs d'impédance par défaut qui indiquent l'étendue de la zone de desserte à calculer. La valeur par défaut peut être remplacée par la valeur de borne sur les ressources.

Plusieurs bornes de polygones peuvent être configurées pour créer des zones de desserte concentriques. Par exemple, pour trouver les zones de desserte de 2, 3 et 5 minutes pour la même ressource, spécifiez "2 3 5" comme valeur pour le paramètre de valeurs de borne Par défaut (les nombres 2, 3 et 5 doivent être séparés par un espace).

String
polygon_type
(Facultatif)

Spécifie le type de polygone à générer.

  • SIMPLE_POLYSCrée des polygones généralisés, qui sont générés rapidement et offrent une assez bonne précision, sauf au niveau des bordures. Il s’agit de l’option par défaut.
  • DETAILED_POLYSCrée des polygones détaillés, qui modélisent avec précision les lignes de zone de desserte et peuvent contenir des îlots de zones non atteintes. Cette option s'avère plus lente que la création de polygones généralisés.
  • NO_POLYSDésactive la génération de polygones lorsque seules des lignes de zone de desserte sont requises.

Si vos données proviennent d'une zone urbaine avec un réseau de type quadrillage, la différence entre les polygones généralisés et les polygones détaillés est minime. Cependant, les polygones 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
merge
(Facultatif)

Spécifie les options de fusion des polygones qui partagent des valeurs de bornes similaires. Cette option est applicable uniquement lors de la génération de polygones pour plusieurs ressources.

  • NO_MERGECrée des polygones individuels pour chaque ressource. Les polygones peuvent se superposer.
  • NO_OVERLAPCrée des polygones individuels les plus proches possible pour chaque ressource. Les polygones ne se chevauchent pas.
  • MERGE Combine les polygones de plusieurs ressources partageant la même valeur de borne.
String
nesting_type
(Facultatif)

Précise l'option de création de polygones de zone de desserte concentriques sous forme de disques ou d'anneaux. Cette option s'applique uniquement lorsque plusieurs valeurs de bornes sont spécifiées pour les ressources.

  • RINGSN'inclue pas la zone contenant les plus petites bornes. Ils créent des polygones entre des bornes consécutives. Utilisez cette option si vous souhaitez définir la zone d'une borne à une autre.
  • DISKS Crée les polygones entre la ressource et la borne. Par exemple, si vous créez des zones de desserte de 5 et 10 minutes, le polygone de la zone de desserte de 10 minutes inclura la zone située sous le polygone de la zone de desserte de 5 minutes. Utilisez cette option si vous souhaitez trouver la surface entière entre la ressource et la borne pour chaque borne.
String
line_type
(Facultatif)

Spécifie le type de lignes à générer selon l'analyse des zones de desserte. Le fait de sélectionner l'option TRUE_LINES ou TRUE_LINES_WITH_MEASURES pour les grandes zones de desserte augmente la quantité de mémoire consommée par l'analyse.

  • NO_LINESNe génère pas de lignes. Il s’agit de l’option par défaut.
  • TRUE_LINESLes lignes sont générées sans mesures.
  • TRUE_LINES_WITH_MEASURESLes lignes sont générées avec des mesures. Les valeurs de mesure sont générées en fonction de la valeur d'impédance à chaque extrémité du tronçon avec les sommets intermédiaires interpolés. N'utilisez pas cette option si vous souhaitez des performances plus rapides.
String
overlap
(Facultatif)

Détermine si des lignes superposées sont générées lorsque les lignes de zone de desserte sont calculées.

  • OVERLAP Comprend une entité linéaire distincte pour chaque ressource lorsque les ressources ont des lignes de zones de desserte coïncidentes.
  • NON_OVERLAP Inclut toutes les lignes d'une zone de desserte une fois au plus et les associe à la ressource la plus proche (impédance la plus faible).
Boolean
split
(Facultatif)
  • SPLITFractionne chaque ligne entre deux bornes en deux lignes, chacune étant positionnée sur sa borne. Cette option est utile si vous souhaitez symboliser les lignes de zones de desserte par borne. Dans le cas contraire, utilisez l'option NO_SPLIT pour des performances optimales.
  • NO_SPLITLes lignes ne sont pas fractionnées aux limites des bornes. Il s’agit de l’option par défaut.
Boolean
excluded_source_name
[excluded_source_name,...]
(Facultatif)

Spécifie la liste des sources de données du réseau à exclure lors de la génération des polygones. La géométrie des éléments parcourus provenant des sources exclues est omise de tous les polygones.

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 dans un réseau multimodal de rues et de voies ferrées, vous devez choisir d'exclure les voies ferrées de la génération de polygones afin de modéliser correctement les zones accessibles par un véhicule.

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 des sources de polygones de zone de desserte influence uniquement la forme des polygones des zones de desserte. Si vous souhaitez empêcher la traversée d'une source de données précise, vous devez créer une restriction appropriée lors de la définition de votre jeu de données réseau.

String
accumulate_attribute_name
[accumulate_attribute_name,...]
(Facultatif)

Liste des attributs de coût à cumuler lors de l’analyse. Ces attributs d’accumulation sont destinés à servir à titre de référence uniquement ; le solveur utilise uniquement l’attribut de coût spécifié par le paramètre Impedance Attribute (Attribut d’impédance) pour calculer l’itinéraire.

Pour chaque attribut de coût accumulé, une propriété Total_[Impédance] est ajoutée aux itinéraires générés en sortie par le solveur.

String
UTurn_policy
(Facultatif)

Spécifie la règle de demi-tour qui sera utilisée aux jonctions. L’autorisation des demi-tours implique que le solveur puisse faire demi-tour au niveau d’une jonction et revenir en arrière par la même rue. Dans la mesure où les jonctions représentent des intersections de rues et des voies sans issue, différents véhicules peuvent faire demi-tour à certaines jonctions mais pas à d’autres, selon que la jonction représente une intersection ou une voie sans issue. Pour en tenir compte, le paramètre de règle de demi-tour est spécifié implicitement par le nombre de tronçons connectés à la jonction, également connu sous le nom de « valence de jonction ». Les valeurs acceptables pour ce paramètre sont répertoriées ci-dessous ; chacune est suivie d'une description de sa signification en termes de valence de jonction.

  • ALLOW_UTURNSLes demi-tours sont autorisés aux jonctions comportant un nombre quelconque de tronçons connectés. Il s'agit de la valeur par défaut.
  • NO_UTURNSLes demi-tours sont interdits à toutes les jonctions, indépendamment de la valence de jonction. Les demi-tours restent toutefois autorisés aux localisations de réseau même lorsque ce paramètre est sélectionné ; vous pouvez cependant configurer la propriété CurbApproach de chaque localisation de réseau pour y interdire les demi-tours.
  • ALLOW_DEAD_ENDS_ONLYLes demi-tours sont interdits au niveau de toutes les jonctions, sauf celles ayant un seul tronçon adjacent (voie sans issue).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYLes demi-tours sont interdits aux jonctions où deux tronçons adjacents se rencontrent, mais sont autorisés aux intersections (jonctions avec au moins trois tronçons adjacents) et aux voies sans issue (jonctions avec exactement un tronçon adjacent). Souvent, les réseaux comportent des jonctions superflues au milieu de segments de route. Cette option empêche des véhicules de faire des demi-tours à ces emplacements.

Si la définition de votre règle de demi-tour n’est pas suffisamment précise, envisagez d’ajouter un évaluateur de délai de tournant global à un attribut de coût de réseau ou de modifier ses paramètres, le cas échéant, en veillant tout particulièrement à la configuration des tournants inversés. Vous pouvez également définir la propriété CurbApproach de vos localisations de réseau.

String
restriction_attribute_name
[restriction_attribute_name,...]
(Facultatif)

Liste des attributs de restriction à appliquer lors de l’analyse.

String
polygon_trim
(Facultatif)
  • TRIM_POLYSTronque les polygones contenant les tronçons à la périphérie de la zone de desserte pour qu'ils se trouvent dans la distance spécifiée des tronçons extérieurs. Cette option s'avère utile si 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é.
  • NO_TRIM_POLYSNe tronque pas les polygones.
Boolean
poly_trim_value
(Facultatif)

Spécifie la distance au sein de laquelle les polygones de zone de desserte sont tronqués. Le paramètre comprend une valeur et des unités de distance. La valeur par défaut est 100 mètres.

Linear Unit
lines_source_fields
(Facultatif)
  • LINES_SOURCE_FIELDS Ajoute les champs SourceID, SourceOID, FromPosition et ToPosition aux lignes de zones de desserte, afin de contenir des informations concernant les entités source sous-jacentes parcourues pendant l'analyse. Cela facilite la jonction des résultats des lignes de zone de desserte aux données sources d'origine.
  • NO_LINES_SOURCE_FIELDSN'ajoute pas les champs source (SourceID, SourceOID, FromPosition et ToPosition) aux lignes de zone de desserte.
Boolean
hierarchy
(Facultatif)
  • USE_HIERARCHYAttribut de hiérarchie utilisé pour l’analyse. L'utilisation d'une hiérarchie implique une préférence du solveur pour les tronçons d'ordre supérieur par rapport aux tronçons d'ordre inférieur. Les recherches hiérarchiques sont plus rapides et permettent de simuler la préférence d’un chauffeur de circuler sur des autoroutes au lieu de routes locales si possible, même si cela implique un trajet plus long. Cette option est valide uniquement si le jeu de données réseau en entrée comporte un attribut de hiérarchie.
  • NO_HIERARCHYL’attribut de hiérarchie ne sera pas utilisée pour l’analyse. Si vous n’utilisez aucune hiérarchie, vous obtenez une zone de desserte mesurée le long de tous les tronçons du jeu de données réseau, quel que soit le niveau de hiérarchie.

Le paramètre n'est pas utilisé si aucun attribut de hiérarchie n'est défini dans le jeu de données réseau utilisé pour effectuer l'analyse.

Boolean
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.

  • Elle représente l'heure de départ si la propriété Trajet depuis ou vers la ressource est définie sur TRAVEL_FROM.
  • Elle représente l'heure d'arrivée si la propriété Trajet depuis ou vers la ressource est définie sur TRAVEL_TO.

Si vous avez choisi un attribut d'impédance basé sur la circulation, l'analyse est effectuée selon des conditions de circulation dynamiques correspondant à l'heure du jour spécifiée ici. Une date et une heure peuvent être spécifiées sous la forme 5/14/2012 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 :

  • Aujourd’hui - 12/30/1899
  • Dimanche - 12/31/1899
  • Lundi - 1/1/1900
  • Mardi - 1/2/1900
  • Mercredi - 1/3/1900
  • Jeudi - 1/4/1900
  • Vendredi - 1/5/1900
  • Samedi - 1/6/1900

En répétant la même analyse avec des valeurs différentes du paramètre Heure, 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.

Date

Sortie dérivée

NomExplicationType de données
output_layer

La couche d’analyse de réseau nouvellement créée.

Couche Network Analyst

Exemple de code

Exemple 1 d'utilisation de l'outil Générer une couche de zones de desserte (fenêtre Python)

Exécute l'outil uniquement avec les paramètres requis.

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaLayer(network, "FireStationCoverage", "TravelTime")
Exemple 2 d'utilisation de l'outil Générer une couche de zones de desserte (fenêtre Python)

Exécutez l'outil avec tous les paramètres.

network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaLayer(network, "WarehouseCoverage", "DriveTime",
                                "TRAVEL_FROM", "5 10 15", "SIMPLE_POLYS", 
                                "NO_OVERLAP", "RINGS", "TRUE_LINES",
                                "NON_OVERLAP", "NO_SPLIT",
                                ["Metro_Lines", "Transfer_Stations",
                                "Transfer_Street_Station"],
                                ["Meters", "DriveTime"], "ALLOW_DEAD_ENDS_ONLY",
                                ["Oneway"], "NO_TRIM_POLYS", "",
                                "LINES_SOURCE_FIELDS")
Exemple 3 d'utilisation de l'outil Générer une couche de zones de desserte (workflow)

Le script Python autonome suivant illustre l'utilisation de l'outil MakeServiceAreaLayer pour générer des zones de desserte de 1, 2 et 3 minutes autour de casernes de pompiers.

# Name: MakeServiceAreaLayer_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:
    #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"
    impedance = "TravelTime"
    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 as we can determine the
    #number of fire stations that cover a given location. We use hierarchy to
    #speed up the time taken to create the polygons. We will specify these
    #options while creating the new service area layer.
    result_object = arcpy.na.MakeServiceAreaLayer(network, layer_name,
                                    impedance, "TRAVEL_FROM", "1 2 3",
                                    "DETAILED_POLYS", "NO_MERGE", "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)))
Exemple 4 d'utilisation de l'outil Générer une couche de zones de desserte (workflow)

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.

# Name: MakeServiceAreaLayer_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:
    #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")
    impedance = "TravelTime"
    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.MakeServiceAreaLayer(network, layer_name,
                                                impedance, "TRAVEL_FROM", "3",
                                                "DETAILED_POLYS", "NO_MERGE",
                                                hierarchy = "NO_HIERARCHY")

    #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, "",
                            exclude_restricted_elements = "EXCLUDE")

    # 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 = layer_object.listLayers(facilities_layer_name)[0]
    polygons_sublayer = layer_object.listLayers(polygons_layer_name)[0]

    #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))

Informations de licence

  • Basic: Oui
  • Standard: Oui
  • Advanced: Oui

Rubriques connexes