Ajouter des localisations (Network Analyst)
Récapitulatif
Ajoute des objets d'analyse de réseau à la couche d’analyse de réseau. Les objets sont ajoutés aux sous-couche spécifiques telles que Arrêts et Interruptions. Les objets sont entrés en tant qu'entités ou enregistrements.
Utilisation
-
Cet outil peut être exécuté à plusieurs reprises pour ajouter des objets d'analyse de réseau à la même sous-couche. Par exemple, si les arrêts d'une couche d'itinéraire proviennent de deux classes d'entités, l'outil peut être appelé deux fois, grâce à l'option APPEND.
-
Si vous souhaitez supprimer les objets d'analyse de réseau existants avant d'en charger de nouveaux, utilisez l'option Supprimer.
-
Cet outil s'exécute beaucoup plus rapidement si les classes d'entités utilisées en tant que sources de données du réseau dans le jeu de données réseau ont un index spatial valide et à jour.
Lors de l'ajout de points mobiles, tels que des coordonnées GPS capturées à partir d'un récepteur monté sur un véhicule, utilisez les valeurs de relèvement et une tolérance de relèvement pour localiser plus précisément les points sur le réseau.
Syntaxe
Paramètre | Explication | Type de données |
in_network_analysis_layer |
Couche d'analyse de réseau à laquelle les objets d'analyse de réseau seront ajoutés. | Network Analyst Layer |
sub_layer |
Sous-couche de la couche d'analyse de réseau auquel les objets d'analyse de réseau seront ajoutés. | String |
in_table |
Classe d'entités ou table source des nouveaux objets d'analyse de réseau. | Table View |
field_mappings |
Définit les valeurs des propriétés des objets d'analyse de réseau. Les propriétés peuvent être définies sur une constante ou mappées à un champ depuis la classe d'entités ou la table en entrée. Un objet NAClassFieldMappings obtenu à partir de la classe NAClassFieldMappings permet de spécifier la valeur du paramètre. L'objet NAClassFieldMappings est un ensemble d'objets NAClassFieldMap qui vous permet de spécifier les valeurs par défaut ou de mapper un nom de champ à partir des entités en entrée pour les propriétés de l'objet d'analyse de réseau. Si les données que vous chargez contiennent des localisations de réseau ou des plages de localisation basées sur le jeu de données réseau utilisé pour l'analyse, mappez les champs de localisation du réseau de vos entités en entrée aux propriétés de localisation de réseau. La spécification des champs de localisation du réseau dans les mappages de champs est similaire à l'utilisation du paramètre Utiliser les champs de localisation du réseau au lieu de la géométrie à partir de la boîte de dialogue de l'outil. Attention : Si vous spécifiez le mappage de champs pour l'une des propriétés de localisation de réseau, vous devez spécifier les mappages de champs pour les propriétés de localisation de réseau restantes afin d'éviter une erreur d'exécution d'un outil. | Network Analyst Class FieldMap |
search_tolerance | Tolérance de recherche utilisée pour la localisation des entités en entrée appartenant au réseau. Les entités se trouvant à l'extérieur de la tolérance de recherche restent non localisées. Le paramètre comprend une valeur et des unités de tolérance. Le paramètre n'est pas utilisé lors de l'ajout d'emplacements aux sous-couches Barrières linéaires ou Barrières polygonales. Dans ces cas, utilisez "#" comme valeur de paramètre. | Linear unit |
sort_field (Facultatif) |
Champ dans lequel les objets d'analyse du réseau sont triés lorsqu'ils sont ajoutés à la couche d'analyse de réseau. La valeur par défaut est le champ ObjectID sur la classe d'entités ou la table en entrée. | Field |
search_criteria [[Source, SnapType],...] (Facultatif) |
Indique les sources de votre jeu de données réseau qui feront partie de la recherche de localisations et les parties de la géométrie (également appelées types de capture) qui seront utilisées. La valeur de paramètre est indiquée sous la forme d'une liste avec des listes imbriquées. La liste imbriquée est composée de deux valeurs indiquant le nom et le type de capture pour chaque source de données du réseau. Le type de capture est spécifié à l'aide des mots-clés SHAPE, MIDDLE, END ou NONE. Par exemple, lors de la recherche d'emplacements, la valeur de paramètre [["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]] spécifie que la recherche peut localiser sur la forme de la source de données Streets mais pas sur la source de données Streets_ND_Junctions. Pour spécifier plusieurs types de capture pour une seule source de données du réseau, utilisez la combinaison des mots-clés de type de capture séparée par un trait de soulignement. Par exemple, MIDDLE_END spécifie que les emplacements peuvent être capturés au milieu ou à la fin de la source de données du réseau. Lors de l'ajout d'emplacements de ligne ou de réseau de polygone, seul le type de capture de forme est utilisé, même si d'autres types de capture sont spécifiés. | Value Table |
match_type (Facultatif) |
Le paramètre n'est pas utilisé lors de l'ajout d'emplacements aux sous-couches Barrières linéaires ou Barrières polygonales. Dans ces cas, utilisez "#" comme valeur de paramètre. | Boolean |
append (Facultatif) |
Indique s'il faut ou non ajouter de nouveaux objets d'analyse de réseau aux objets existants.
| Boolean |
snap_to_position_along_network (Facultatif) |
Indique que vous souhaitez capturer les localisations de réseau le long du jeu de données réseau ou à un décalage spécifié du jeu de données réseau.
Le paramètre n'est pas utilisé lors de l'ajout d'emplacements aux sous-couches Barrières linéaires ou Barrières polygonales. Dans ces cas, utilisez "#" comme valeur de paramètre. | Boolean |
snap_offset (Facultatif) |
Lors de la capture d'un point sur le réseau, vous avez la possibilité d'appliquer une valeur de décalage. Une valeur de décalage de zéro indique que le point sera coïncident avec l'entité de réseau (généralement une ligne). Pour décaler le point à partir de l'entité de réseau, entrez une valeur de décalage. Le décalage est relatif à l'emplacement du point d'origine ; autrement dit, si le point d'origine se trouvait du côté gauche, son nouvel emplacement sera décalé vers la gauche. De même, s'il se trouvait du côté droit, il sera décalé vers la droite. Le paramètre n'est pas utilisé lors de l'ajout d'emplacements aux sous-couches Barrières linéaires ou Barrières polygonales. Dans ces cas, utilisez "#" comme valeur de paramètre. | Linear unit |
exclude_restricted_elements (Facultatif) |
| Boolean |
search_query [[Source, Expression],...] (Facultatif) | Indique une requête destinée à restreindre la recherche à un sous-ensemble d'entités dans une classe d'entités source. Ceci s'avère utile si vous ne voulez pas trouver d'entités ne convenant pas à une localisation de réseau. Par exemple, si vous chargez des centroïdes de polygones et ne souhaitez pas localiser sur les routes secondaires, vous pouvez définir une requête qui recherche des routes principales uniquement. La valeur de paramètre est indiquée sous la forme d'une liste avec des listes imbriquées. La liste imbriquée est composée de deux valeurs qui indiquent le nom et l'expression SQL pour toutes les sources de données du réseau. La syntaxe de l'expression SQL diffère légèrement selon le type de classe d'entités de source de données du réseau. Par exemple, lorsque vous interrogez des classes d'entités sources stockées dans des géodatabases fichier ou ArcSDE, des fichiers de formes, ou des SDC, placez les noms des champs entre guillemets doubles : "CFCC". Si vous interrogez des classes d'entités source stockées dans les géodatabases personnelles, placez les champs entre crochets : [CFCC]. Si vous ne souhaitez pas spécifier une requête pour une source particulière, utilisez "#" comme valeur pour l'expression SQL ou excluez le nom de la source et l'expression SQL de la valeur de paramètre. Si vous ne souhaitez pas spécifier de requête pour toutes les sources de données du réseau, utilisez "#" comme valeur de paramètre. Par exemple, la valeur de paramètre [["Streets","\"CFCC\" = 'A15'"], ["Streets_ND_Junctions",""]] spécifie une expression SQL pour la classe d'entités source Streets et aucune expression pour la classe d'entité source Streets_ND_Junctions. Notez que les guillemets utilisés pour joindre le nom de champ CFCC sont désactivés par les barres obliques inverses pour éviter une erreur d'analyse du programme d'interprétation Python. | Value Table |
Exemple de code
Exécutez l'outil uniquement avec les paramètres requis.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital","","")
Exécutez l'outil avec tous les paramètres.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital",
"Name Name #;Attr_Minutes VisitTime 0;CurbApproach # 0",
"2 Miles","FID",
[["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]],
"MATCH_TO_CLOSEST","CLEAR","SNAP","10 Feet","EXCLUDE",
[["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]])
Le script Python autonome ci-dessous montre comment l'outil Ajouter des localisations permet de charger des origines et des destinations dans une couche de matrice de coût OD.
# Name: AddLocations_Workflow.py
# Description: The scenario shows how to calculate a travel time matrix between
# store features. Use the Add Locations tool to load origins and
# destinations into an OD Cost Matrix layer. Since the origins and
# destinations are the same in this case, the origins are first loaded
# from the store features using their geometry and the destinations
# are loaded from the origins using network location fields to
# speed up the load times.
# 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 = "StoreTravelTimeMatrix"
impedanceAttribute = "TravelTime"
inFeatures = "Analysis/Stores"
searchTolerance = "500 Meters"
searchQuery = [["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]]
odOrigins = "Origins"
outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
#Create a new OD cost matrix analysis layer. For this scenario, the default
#value for all the remaining parameters statisfies the analysis requirements
outNALayer = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset, outNALayerName,
impedanceAttribute)
#Get the layer object from the result object. The OD cost matrix layer can
#now be referenced using the layer object.
outNALayer = outNALayer.getOutput(0)
#Get the names of all the sublayers within the OD cost matrix layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Stores the layer names that we will use later
originsLayerName = subLayerNames[odOrigins]
destinationsLayerName = subLayerNames["Destinations"]
#Get the origin layer object from within the OD cost matrix layer
#The first layer returned by ListLayers is the OD cost matrix layer itself
#which we don't want to use.
for layer in arcpy.mapping.ListLayers(outNALayer)[1:]:
if layer.datasetName == odOrigins:
originsLayer = layer
break
else:
raise Exception("Failed to get the origins layer object.")
#Load store features as origins using the geometry of store features.
#Ensure that the stores are not located on freeways by using a search query.
#The OD cost matrix layer created previously is referred using its name.
arcpy.na.AddLocations(outNALayer,originsLayerName,inFeatures,"",
searchTolerance, exclude_restricted_elements = "EXCLUDE",
search_query = searchQuery)
#Load origins as destinations using the network locations fields from
#origins. This is much faster than loading destinations from the store
#features using their geometry as their network locations have already been
#calculated while loading them origins.
#Create a field mappings object that supports network location fields from
#origins layer using the candidate fields from origins
originsLayer = arcpy.management.MakeFeatureLayer(originsLayer,
outNALayerName+originsLayerName)
candidateFields = arcpy.ListFields(originsLayer.getOutput(0))
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
destinationsLayerName, True,
candidateFields)
arcpy.na.AddLocations(outNALayer,destinationsLayerName,originsLayer,
fieldMappings,"")
#Solve the od cost matrix layer. Halt the execution if there is an
#invalid location
arcpy.na.Solve(outNALayer,"HALT")
#Save the solved na 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)