NAClassFieldMappings (arcpy.na)
Резюме
Предоставляет словарь Python из объектов NAClassFieldMap, которые используются для сопоставления имен полей или установки значений по умолчанию для свойств класса сетевого анализа в слое сетевого анализа. Ключи словаря – это имена свойств и значения объектов NAClassFieldMap.
Обсуждение
Объект NAClassFieldMappings или его строковое представление используются как входные данные параметра field_mappings в инструменте геообработки Добавить местоположения (Add Locations). Объекты NAClassFieldMap, содержащиеся в объекте NAClassFieldMappings, предоставляют доступ для получения или установки значения по умолчанию и сопоставленного имени поля, связанного с каждым свойством класса сетевого анализа.
Синтаксис
Параметр | Объяснение | Тип данных |
network_analyst_layer |
Переменная, ссылающаяся на объект Слоя (Layer), полученный на основе слоя сетевых данных ArcGIS Network Analyst. Она может быть получена на основе существующих слоев в документе карты, либо при указании пути каталога к файлу слоя сетевых данных ArcGIS Network Analyst в качестве аргумента класса Слой (Layer). Свойство объекта слоя isNetworkAnalystLayer служит для идентификации данного объекта слоя в качестве слоя сетевых данных ArcGIS Network Analyst. | 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 table of contents
saLayer = arcpy.mapping.Layer("Fire Stations Coverage")
#Get the list of fields from the FireStations feature layer in the table of contents
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.
facilitiesSubLayerName = arcpy.na.GetNAClassNames(saLayer)["Facilities"]
#Create a field mappings object for facilities sublayer based on the fields from
#FireStations layer
fieldMappings = arcpy.na.NAClassFieldMappings(saLayer, facilitiesSubLayerName,
False, fields)
#Get the field map corresponding to the "Attr_TravelTime" property of facilities
fieldMap = fieldMappings["Attr_TravelTime"]
#Set a delay of 10 minutes for the facilities
fieldMap.defaultValue = 10
#Load the fire stations as service area facilities using the field mappings
arcpy.na.AddLocations(saLayer, facilitiesSubLayerName, "FireStations", fieldMappings)
В этом примере показано, как найти наилучший маршрут между несколькими точками хранения с учетом погодных условий в местах с затрудненным перемещением. Он показывает, каким образом можно использовать объект NAClassFieldMappings при загрузке полигонов в качестве полигональных барьеров либо местоположений магазинов – остановок с помощью инструмента Добавить положения (Add Locations).
import arcpy
#Set up the environment
arcpy.env.overwriteOutput = True
arcpy.CheckOutExtension("network")
#Set up variables
networkDataset = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
polygonBarriers = "C:/Data/WeatherSlowDownAreas.shp"
stops = "C:/Data/SanFrancisco.gdb/Analysis/Stores"
impedanceAttribute = "TravelTime"
outputLayer = "C:/Data/WeatherRoute.lyr"
#Create a new route layer
routeLayer = arcpy.na.MakeRouteLayer(networkDataset, "WeatherRoute",
impedanceAttribute).getOutput(0)
#Get na class names based on the layer
naClasses = arcpy.na.GetNAClassNames(routeLayer, "INPUT")
#Create field mappings for loading barriers as scaled cost polygon barriers
#with a slow down of 40%
fieldMappings = arcpy.na.NAClassFieldMappings(routeLayer,
naClasses["PolygonBarriers"])
fieldMappings["BarrierType"].defaultValue = 1
fieldMappings["Attr_" + impedanceAttribute].defaultValue = 1.4
#Load weather polygons as slow down barriers
arcpy.na.AddLocations(routeLayer, naClasses["PolygonBarriers"],
polygonBarriers, fieldMappings)
#get a list of field objects from the stores feature class
storeFields = arcpy.ListFields(stops)
#Create field mappings for loading stops based on the field names from the stores
stopsFieldMappings = arcpy.na.NAClassFieldMappings(routeLayer, naClasses["PolygonBarriers"],
False, storeFields)
#Load stops using the field mappings
arcpy.na.AddLocations(routeLayer, naClasses["Stops"], stops, stopsFieldMappings)
#Solve the route
arcpy.na.Solve(routeLayer)
#Save the solved layer as a layer file
arcpy.management.SaveToLayerFile(routeLayer, outputLayer)
arcpy.AddMessage("Completed")