Сводка
Предоставляет словарь Python из объектов NAClassFieldMap, которые используются для сопоставления имен полей или установки значений по умолчанию для свойств класса сетевого анализа в слое сетевого анализа. Ключи словаря – это имена свойств и значения объектов NAClassFieldMap.
Описание
Объект NAClassFieldMappings или его строковое представление используются как входные данные параметра field_mappings в инструменте геообработки Добавить местоположения (Add Locations). Объекты NAClassFieldMap, содержащиеся в объекте NAClassFieldMappings, предоставляют доступ для получения или установки значения по умолчанию и сопоставленного имени поля, связанного с каждым свойством класса сетевого анализа.
Синтаксис
NAClassFieldMappings (network_analyst_layer, sub_layer_name, {use_location_fields}, {list_candidate_fields})
Parameter | Объяснение | Тип данных |
network_analyst_layer | Переменная, ссылающаяся на объект Layer, полученный из слоя сетевого анализа. Она может быть получена из существующих слоев в документе карты, либо путем указания пути к файлу слоя сетевого анализа в качестве аргумента класса Layer. Свойство isNetworkAnalystLayer объекта Layer может использоваться для определения, является ли данный объект Layer слоем сетевого анализа. | Layer |
sub_layer_name | Имя подслоя, для которого следует создать соответствия полей. Имя должно быть корректным для определенного типа слоя сетевого анализа. Для данного слоя сетевого анализа имя подслоя можно определить с помощью функции GetNAClassNames. | String |
use_location_fields | Указывает, следует ли создавать соответствия полей для свойств сетевого положения вместе с другими свойствами. (Значение по умолчанию — False) | Boolean |
list_candidate_fields [list_candidate_fields,...] | Список объектов Field, которые используются для генерации имен полей с установленным соответствием. Значение этого аргумента может быть получено из данного класса пространственных объектов или таблицы с помощью функции ListFields. Если аргумент не задан, соответствия полей будут созданы только со значениями свойств по умолчанию. (Значение по умолчанию — None) | Field |
Пример кода
Следующий скрипт показывает, как загрузить пожарные станции в качестве пунктов обслуживания в существующий слой области обслуживания и установить десятиминутный интервал при загрузке пунктов обслуживания с помощью объекта NAClassFieldMappings. Предполагается, что слой сетевого анализа области обслуживания Fire Stations Coverage создан из учебного набора сетевых данных на территорию города Сан-Франциско, а также слой FireStations, были добавлены в существующий документ карты.
#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)
В этом примере показано, как найти наилучший маршрут между несколькими точками хранения с учетом погодных условий в местах с затрудненным перемещением. Он показывает, каким образом можно использовать объект NAClassFieldMappings при загрузке полигонов в качестве полигональных барьеров либо местоположений магазинов – остановок с помощью инструмента Добавить положения (Add Locations).
# 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))