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

Niveau de licence :BasicStandardAdvanced

Récapitulatif

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.

RemarqueRemarque :

Bien que similaires, les outils Générer des zones de desserte et Générer une couche de zones de desserte ont été conçus à des fins différentes. Faites appel à l'outil Générer des zones de desserte si vous configurez un service de géotraitement. Cela permettra de simplifier le processus de configuration. Sinon, utilisez Générer une couche de zones de desserte. En outre, utilisez Générer une couche de zones de desserte si vous devez générer des lignes de zone de desserte ; l'option Générer des zones de desserte ne permet pas de générer ces lignes.

Pour créer un service de géotraitement de zone de desserte avec Générer des zones de desserte, il vous suffit de configurer un outil et de le publier directement en tant que service. En revanche, vous devez créer un modèle avec Générer une couche de zones de desserte, le connecter à d'autres outils et le publier pour créer un service de géotraitement de zone de desserte. Reportez-vous à la rubrique Exemple de service de géotraitement : Polygones de temps de conduite pour apprendre à définir un service de polygones de temps de conduite à l'aide de données de didacticiel. Vous pouvez également utiliser le service ArcGIS Online Générer des zones de desserte. Ce service fonctionne comme un outil de géotraitement ArcMap et vous pouvez y accéder à partir d'autres applications. Il inclut en outre des données routières de haute qualité pour la majorité des pays du monde.

Utilisation

Syntaxe

MakeServiceAreaLayer_na (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 de l'attribut 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)

Règle de demi-tour 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. Notez toutefois que les demi-tours restent autorisés aux emplacements réseau même lorsque ce paramètre est sélectionné ; en revanche, vous pouvez configurer la propriété CurbApproach des emplacements réseau individuels pour y interdire les demi-tours également.
  • 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.
AstuceAstuce:

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. Pensez également à définir la propriété CurbApproach de vos localisations 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_HIERARCHY Utilise l'attribut de hiérarchie 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_HIERARCHYN'utilise pas l'attribut de hiérarchie 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. Dans ces cas, utilisez "#" comme valeur de paramètre.

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
Par exemple, pour préciser que le trajet doit commencer mardi à 17h00, spécifiez la valeur de paramètre sous la forme 1/2/1900 5:00 PM.

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

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.

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeServiceAreaLayer("Transportation/Streets_ND","FireStationCoverage",
                              "Minutes")
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.

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/Paris.gdb"
arcpy.na.MakeServiceAreaLayer("Transportation/ParisNet","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 Générer une couche de zones de desserte 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 area 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

try:
    #Check out the Network Analyst extension license
    arcpy.CheckOutExtension("Network")

    #Set environment settings
    env.workspace = "C:/data/SanFrancisco.gdb"
    env.overwriteOutput = True

    #Set local variables
    inNetworkDataset = "Transportation/Streets_ND"
    outNALayerName = "FireStationCoverage"
    impedanceAttribute = "TravelTime"
    inFacilities = "Analysis/FireStations"
    outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"

    #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.
    outNALayer = arcpy.na.MakeServiceAreaLayer(inNetworkDataset, outNALayerName,
                                  impedanceAttribute, "TRAVEL_FROM", "1 2 3",
                                  "SIMPLE_POLYS", "NO_MERGE", "RINGS",
                                  hierarchy = "USE_HIERARCHY")

    #Get the layer object from the result object. The service layer can now be
    #referenced using the layer object.
    outNALayer = outNALayer.getOutput(0)

    #Get the names of all the sublayers within the service area layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Stores the layer names that we will use later
    facilitiesLayerName = subLayerNames["Facilities"]

    #Load the fire stations as facilities using default field mappings and
    #default search tolerance
    arcpy.na.AddLocations(outNALayer, facilitiesLayerName, inFacilities, "", "")

    #Solve the service area layer
    arcpy.na.Solve(outNALayer)

    #Save the solved service area layer as a layer file on disk with relative
    #paths
    arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")

    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 occured 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 datetime

#Import system modules
import arcpy
from arcpy import env

try:
    #Check out the Network Analyst extension license
    arcpy.CheckOutExtension("Network")

    #Set environment settings
    env.workspace = "C:/Data/SanFrancisco.gdb"
    env.overwriteOutput = True

    #Set local variables
    inNetworkDataset = "Transportation/Streets_ND"
    outNALayerName = "FireStationCoverage"
    outSAFC = "Analysis/outSAPolys"
    impedanceAttribute = "TravelTime"
    inFacilities = "Analysis/FireStations"
    timelist = [datetime.datetime(2013, 8, 23, 7, 0, 0),
                datetime.datetime(2013, 8, 23, 12, 30, 0),
                datetime.datetime(2013, 8, 23, 17, 30, 0),
                datetime.datetime(2013, 8, 23, 21, 0, 0)]

    #Create a new service area layer.
    outSAResultObject = arcpy.na.MakeServiceAreaLayer(inNetworkDataset, outNALayerName,
                                  impedanceAttribute, "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.
    outNALayer = outSAResultObject.getOutput(0)

    #Get the names of all the sublayers within the service area layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Store the layer names that we will use later
    facilitiesLayerName = subLayerNames["Facilities"]
    polygonsLayerName = subLayerNames["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(outNALayer, facilitiesLayerName,
                                                    "FireStationID", "TEXT")
    fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
                                                    facilitiesLayerName)
    fieldMappings["FireStationID"].mappedFieldName = "FireStationID"

    #Load the fire stations as facilities.
    arcpy.na.AddLocations(outNALayer, facilitiesLayerName, inFacilities,
                            fieldMappings, "",
                            exclude_restricted_elements = "EXCLUDE")

    #Get sublayers we will want to work with later
    FacilitiesSubLayer = arcpy.mapping.ListLayers(outNALayer,
                                                    facilitiesLayerName)[0]
    PolygonsSubLayer = arcpy.mapping.ListLayers(outNALayer,
                                                    polygonsLayerName)[0]

    # Add fields to the output Polygons sublayer. We will fill the values later.
    arcpy.na.AddFieldToAnalysisLayer(outNALayer, polygonsLayerName,
                                        "FireStationID", "TEXT")
    arcpy.na.AddFieldToAnalysisLayer(outNALayer, polygonsLayerName,
                                        "TimeOfDay", "TEXT")

    #Get the Service Area Layer's solver properties. This will allow us to
    #set individual properties later without re-creating the layer.
    SA_SolverProperties = arcpy.na.GetSolverProperties(outNALayer)

    #Solve the Service Area for each time of day in our time list
    for t in timelist:

        print "Now solving for time of day: " + t

        #Use the solver properties to set the time of day for the solve
        SA_SolverProperties.timeOfDay = t

        #Solve the service area layer
        arcpy.na.Solve(outNALayer)

        #Transfer the FireStationID field from the input Facilities to the
        #output Polygons
        arcpy.management.AddJoin(PolygonsSubLayer, "FacilityID",
                                        FacilitiesSubLayer, "ObjectID")
        arcpy.management.CalculateField(PolygonsSubLayer, "FireStationID",
                                        "!Facilities.FireStationID!", "PYTHON")
        arcpy.management.RemoveJoin(PolygonsSubLayer)

        #Populate the TimeOfDay field
        expression = '"' + t + '"'
        arcpy.management.CalculateField(PolygonsSubLayer, "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(outSAFC):
            arcpy.management.CopyFeatures(PolygonsSubLayer, outSAFC)
        else:
            arcpy.management.Append(PolygonsSubLayer, outSAFC)

    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 occured on line %i" % tb.tb_lineno
    print str(e)

Environnements

Thèmes connexes

Informations de licence

ArcGIS for Desktop Basic: Oui
ArcGIS for Desktop Standard: Oui
ArcGIS for Desktop Advanced: Oui
5/10/2014