Copier les entités source traversées (ArcGIS Network Analyst)

Niveau de licence :BasicStandardAdvanced

Récapitulatif

Crée deux classes d'entités et une table, qui ensemble contiennent les informations liées aux tronçons, jonctions et tournants traversés pendant la résolution d'une couche d'analyse de réseau.

Pour en savoir plus sur la sortie de l'outil Copier les entités source traversées

Utilisation

Syntaxe

CopyTraversedSourceFeatures_na (input_network_analysis_layer, output_location, edge_feature_class_name, junction_feature_class_name, turn_table_name)
ParamètreExplicationType de données
input_network_analysis_layer

Couche d'analyse réseau à partir de laquelle les entités en entrée traversées seront copiées. Si la couche d'analyse de réseau n'a pas de résultat valide, elle sera résolue pour en produire un.

Network Analyst Layer
output_location

Espace de travail dans lequel la table et deux classes d'entités en sortie sont enregistrées.

Workspace; Feature Dataset
edge_feature_class_name

Nom de la classe d'entités qui contiendra des informations sur les entités tronçons en entrée traversées. Si la couche d'analyse de réseau résolue ne traverse aucune entité tronçon, une classe d'entités vide est créée.

String
junction_feature_class_name

Nom de la classe d'entités qui contiendra les informations liées aux entités tronçons en entrée traversées, notamment les jonctions système et les points pertinents provenant de la couche d'analyse de réseau en entrée. Si la couche d'analyse de réseau résolue ne traverse aucune jonction, une classe d'entités vide est créée.

String
turn_table_name

Nom de la table qui contiendra des informations sur les entités tournants globaux et tournants traversées qui proportionnent les coûts pour les tronçons sous-jacents. Si la couche d'analyse de réseau résolue ne traverse aucun tournant, une table vide est créée. Les tournants restreints n'étant jamais traversés, ils ne sont jamais inclus dans la sortie.

String

Exemple de code

Exemple 1 d'utilisation de l'outil Copier les entités source traversées (fenêtre Python)

Le script de fenêtre Python suivant montre comment utiliser l'outil Copier les entités source traversées pour écrire dans des classes d'entités et une table dans un espace de travail temporaire les tronçons, les jonctions et les tournants traversés provenant d'une couche d'analyse de réseau Itinéraires.

import arcpy
arcpy.na.CopyTraversedSourceFeatures("Route","in_memory",
                                     "TraversedEdges",
                                     "TraversedJunctions",
                                     "TraversedTurns")
Exemple 2 d'utilisation de l'outil Copier les entités source traversées (workflow)

Le script Python autonome suivant illustre l'utilisation de l'outil Copier les entités source traversées pour trouver les rues communes aux itinéraires entre les centroïdes des secteurs de recensement et la caserne de pompiers la plus proche. Ces résultats permettent d'identifier les rues les plus fréquemment utilisées en cas d'urgence.

# Name: CopyTraversedSourceFeatures_ex02.py
# Description: The scenario shows how to find the streets that are common to the
#              routes between the closest fire station and the census tract
#              centroids. These streets can be used to identify critical points
#              in case of an emergency. 
# Requirements: Network Analyst Extension 

#Import system modules
import os
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 = "EmergencyRoutes"
    impedanceAttribute = "TravelTime"
    inFacilities = "Analysis/FireStations"
    inIncidents = "Analysis/TractCentroids"
    edgeFrequency = "in_memory/EdgeFrequency"
    outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
    outFeatures = "CriticalStreets"
    
    #Create a new closest facility analysis layer. For this scenario, the default 
    #value for all the remaining parameters statisfies the analysis requirements
    outNALayer = arcpy.na.MakeClosestFacilityLayer(inNetworkDataset, outNALayerName,
                                                   impedanceAttribute, "TRAVEL_FROM")
    
    #Get the layer object from the result object. The closest facility layer can 
    #now be referenced using the layer object.
    outNALayer = outNALayer.getOutput(0)
    
    #Get the names of all the sublayers within the closest facility layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Stores the layer names that we will use later
    facilitiesLayerName = subLayerNames["Facilities"]
    incidentsLayerName = subLayerNames["Incidents"]
    
    #Load fire station features as facilities and ensure that they are not
    #located on restricted portions of the network. Use default field mappings
    #and search tolerance
    arcpy.na.AddLocations(outNALayer,facilitiesLayerName,inFacilities,"", "",
                          exclude_restricted_elements = "EXCLUDE")
    
    #Load tract centroids as incidents and ensure that they are not located on
    #restricted portions of the network. Map the ID field from Tract Centroids
    #as the name for incidents using field mappings
    fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, incidentsLayerName)
    fieldMappings['Name'].mappedFieldName = "ID"
    arcpy.na.AddLocations(outNALayer,incidentsLayerName, inIncidents,
                          fieldMappings,"", exclude_restricted_elements = "EXCLUDE")
    
    #Solve the closest facility layer and copy the travered source features to a
    #temporary in-memory workspace. Use default names for the output feature
    #classes and table. Get only the first output which are the edges traversed.
    traversedEdges = arcpy.na.CopyTraversedSourceFeatures(outNALayer,
                                                          "in_memory").getOutput(0)
    
    #Calculate the frequency of SourceOID in the traversed edges
    arcpy.analysis.Frequency(traversedEdges, edgeFrequency,
                             ["SourceOID", "SourceName"])
    
    #Get the full path to the streets feature class by describing the network
    #dataset referenced by the network analysis layer. 
    network = arcpy.Describe(outNALayer.dataSource)
    edgeSources = network.edgeSources
    for es in edgeSources:
        if es.name.lower() == "streets":
            streetsSource = os.path.join(os.path.dirname(network.catalogPath),
                                         es.name)
            break
    else:
        raise Exception("Failed to detrmine the path for the streets feature class")
    
    #Join the frequency field to the streets feature class. In order to speed up
    #the join select the streets that share a line segment with traversed streets.
    streetsLayer = "StreetsLayer"
    arcpy.management.MakeFeatureLayer(streetsSource,streetsLayer)
    arcpy.management.SelectLayerByLocation(streetsLayer, "SHARE_A_LINE_SEGMENT_WITH",
                                           traversedEdges)
    arcpy.management.JoinField(streetsLayer, "ObjectID", edgeFrequency,
                               "SourceOID", "FREQUENCY")
    
    #Copy the streets that have a frequency value to a new feature class.
    arcpy.management.SelectLayerByAttribute(streetsLayer, "SUBSET_SELECTION",
                                            "FREQUENCY IS NOT NULL")
    arcpy.management.CopyFeatures(streetsLayer,outFeatures)
    
    #Delete the Frequency field from the streets feature class
    arcpy.management.DeleteField(streetsLayer, "FREQUENCY")

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

Environnements

Thèmes connexes

Informations de licence

ArcGIS for Desktop Basic: Requis ArcGIS Network Analyst
ArcGIS for Desktop Standard: Requis ArcGIS Network Analyst
ArcGIS for Desktop Advanced: Requis ArcGIS Network Analyst
5/10/2014