NAClassFieldMappings

Résumé

Fournit un dictionnaire Python d'objets NAClassFieldMap permettant de mapper des noms de champs ou de définir des valeurs par défaut pour les propriétés d'une classe d'analyse de réseau au sein d'une couche d'analyse de réseau. Les clés de dictionnaires sont les noms des propriétés de la classe d'analyse de réseau, et les valeurs sont les objets NAClassFieldMap.

Discussion

L'objet NAClassFieldMappings ou sa représentation de chaîne est utilisé comme entrée pour le paramètre field_mappings dans l'outil de géotraitement Ajouter des emplacements. Les objets NAClassFieldMap contenus dans l'objet NAClassFieldMappings fournissent un accès pour obtenir ou définir la valeur par défaut et le nom de champ mappé associé à chaque propriété de la classe d'analyse de réseau.

Syntaxe

NAClassFieldMappings
 (network_analyst_layer, sub_layer_name, {use_location_fields}, {list_candidate_fields})
ParamètreExplicationType de données
network_analyst_layer

A variable that references a Layer object obtained from a network analysis layer. It can be derived from existing layers in a map document or by specifying the catalog path to the network analysis layer file as an argument to the Layer class. The isNetworkAnalystLayer property on the Layer object can be used to identify if a given Layer object is a network analysis layer.

Layer
sub_layer_name

The sublayer name for which the field mappings are to be created. The name must be valid for the particular network analysis layer type. For a given network analysis layer, the sublayer name can be determined using the GetNAClassNames function.

String
use_location_fields

Specifies whether to create the field mappings for the network location properties along with other properties.

(La valeur par défaut est False)

Boolean
list_candidate_fields
[list_candidate_fields,...]

A list of Field objects that are used to generate the mapped field names. The argument value can be obtained from a given feature class or table using the ListFields function. If the argument is not specified, then the field mappings are created with only the default values for the appropriate properties.

(La valeur par défaut est None)

Field

Exemple de code

Exemple 1 d'utilisation de l'objet NAClassFieldMappings (fenêtre Python)

Le script suivant indique comment charger des casernes de pompiers en tant que ressources dans une couche de zone de desserte existante et spécifie un délai de 10 minutes lors du chargement des ressources à l'aide de l'objet NAClassFieldMappings. Il suppose qu'une couche d'analyse de réseau de zone de desserte appelée Couverture de casernes de pompiers, créée à partir du jeu de données réseau du didacticiel pour la région de San Francisco, et qu'une couche d'entités appelée FireStations sont déjà ajoutées à un document ArcMap existant.

#Get the service area layer called "Fire Stations Coverage" from the map
doc = arcpy.mp.ArcGISProject('current')
map_obj = doc.listMaps()[0]
sa_layer = map_obj.listLayers("Fire Stations Coverage")[0]

#Get the list of fields from the FireStations feature layer in the map
fields = arcpy.ListFields("FireStations")

#Get the facilities sublayer name from the service area layer. Note that we are 
#not using a string called "Facilities" because the sublayer name can be
#different if using ArcGIS on a non-English operating system.
facilities_sublayer_name = arcpy.na.GetNAClassNames(sa_layer)["Facilities"]

#Create a field mappings object for facilities sublayer based on the fields from
#FireStations layer
field_mappings = arcpy.na.NAClassFieldMappings(sa_layer, 
                                        facilities_sublayer_name, False, fields)

#Get the field map corresponding to the "Attr_TravelTime" property of facilities
field_map = field_mappings["Attr_TravelTime"]

#Set a delay of 10 minutes for the facilities
field_map.defaultValue = 10

#Load the fire stations as service area facilities using the field mappings
arcpy.na.AddLocations(sa_layer, facilities_sublayer_name, "FireStations",
                        field_mappings)
Exemple 2 d'utilisation de l'objet NAClassFieldMappings (workflow)

L'exemple indique comment trouver le meilleur itinéraire entre divers emplacements de magasin en tenant compte des conditions météorologiques comme surfaces de ralentissement. Il illustre l'utilisation de l'objet NAClassFieldMappings lors du chargement des polygones météorologiques en tant qu'interruptions polygonales et des emplacements de magasin en tant qu'arrêts à l'aide de l'outil Ajouter des emplacements.

# Name: NAClassFieldMappings_workflow_01.py
# Description: Find the fastest route to visit several stores when part of the
#              road network has been slowed due to bad weather. Use
#              NAClassFieldMappings to map fields from the input data and to
#              set default values for some parameters.
# Requirements: Network Analyst Extension

#Import system modules
import arcpy
from arcpy import env
import os

try:
    
    #Check out the Network Analyst extension license

    #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")
    polygon_barriers = os.path.join(input_gdb, "Analysis",
                                    "WeatherSlowDownAreas")
    stops = os.path.join(input_gdb, "Analysis", "Stores")
    travel_mode = "Driving Time"
    layer_name = "WeatherRoute"
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
    
    #Create a new route layer
    route_layer = arcpy.na.MakeRouteAnalysisLayer(network, layer_name,
                                         travel_mode).getOutput(0)
    
    #Get na class names based on the layer
    na_classes = arcpy.na.GetNAClassNames(route_layer, "INPUT")
    
    #Create field mappings for loading barriers as scaled cost polygon barriers
    #with a slow down of 40%
    field_mappings = arcpy.na.NAClassFieldMappings(route_layer,
                                                  na_classes["PolygonBarriers"])
    field_mappings["BarrierType"].defaultValue = 1
    #Figure out the layer's impedance attribute
    solver_props = arcpy.na.GetSolverProperties(route_layer)
    impedance = solver_props.impedance
    field_mappings["Attr_" + impedance].defaultValue = 1.4
    #Load weather polygons as slow down barriers
    arcpy.na.AddLocations(route_layer, na_classes["PolygonBarriers"],
                              polygon_barriers, field_mappings)
    
    #Get a list of field objects from the stores feature class
    stores_fields = arcpy.ListFields(stops)
    #Create field mappings for loading stops based on the field names from the
    #stores
    stops_field_mappings = arcpy.na.NAClassFieldMappings(route_layer,
                                                na_classes["Stops"],
                                                False, stores_fields)
    
    #Load stops using the field mappings
    arcpy.na.AddLocations(route_layer, na_classes["Stops"], stops,
                            stops_field_mappings)
    
    #Solve the route
    arcpy.na.Solve(route_layer)
    
    #Save the solved service area layer as a layer file on disk
    route_layer.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 occured on line %i" % tb.tb_lineno)
    print(str(e))