Краткая информация
Возвращает объект свойств механизма расчета Network Analyst на основе типа слоя сетевого анализа, указанного в качестве аргумента. Объект свойств механизма расчета используется для обновления свойств анализа слоя.
Описание
Объект GetSolverProperties является основным для изменения свойств анализа слоя сетевого анализа. Он возвращает отдельные свойства механизма расчета на основе слоя сетевого анализа. Существуют шесть типов объектов свойств механизма расчета: Свойства Механизма расчета маршрута (RouteSolverProperties), Свойства Механизма расчета ближайшего пункта обслуживания (ClosestFacilitySolverProperties), Свойства Механизма расчета зон обслуживания (ServiceAreaSolverProperties), Свойства Матрицы Источник-Назначение (ODCostMatrixSolverProperties), Свойства Механизма решения задачи выбора маршрута (VehicleRoutingProblemSolverProperties) и Свойства Механизма расчета Размещение-Распределение (LocationAllocationSolverProperties). Каждый объект свойств механизма расчета обеспечивает доступ на чтение и запись для свойств анализа слоя сетевого анализа.
Синтаксис
GetSolverProperties (network_analyst_layer)
Параметр | Объяснение | Тип данных |
network_analyst_layer | Переменная, ссылающаяся на объект layer, полученный из слоя сетевого анализа. Она может быть получена из существующих слоев в документе карты, либо путем указания пути к файлу слоя сетевого анализа в качестве аргумента класса Layer. Свойство isNetworkAnalystLayer объекта слоя может использоваться для определения, является ли данный объект слоя слоем сетевого анализа. | Layer |
Возвращаемое значение
Тип данных | Объяснение |
Object | Объект свойств механизма расчета соответствует типу слоя сетевого анализа. |
Пример кода
Пример GetSolverProperties
Этот пример наглядно показывает использование GetSolverProperties для доступа к объекту свойств механизма расчета слоя сетевого анализа, а также использование этого объекта свойств механизма расчета для обновления настроек анализа.
# Name: GetSolverProperties_01.py
# Description: Generate 3-minute service areas around fire stations at several
# times of day to compare coverage differences due to varying
# traffic conditions. Use GetSolverProperties to access the
# Service Area layer's solver properties object, and update the
# time of day property prior to each solve.
# Requirements: Network Analyst Extension
#Import system modules
import datetime
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 = "FireStationCoverage"
outSAFC = "Analysis/outSAPolys"
impedanceAttribute = "TravelTime"
inFacilities = "Analysis/FireStations"
timelist = [datetime.datetime(2013, 8, 23, 7, 0, 0),
datetime.datetime(2013, 8, 23, 12, 30, 0),
datetime.datetime(2013, 8, 23, 17, 30, 0),
datetime.datetime(2013, 8, 23, 21, 0, 0)]
#Create a new service area layer.
outSAResultObject = arcpy.na.MakeServiceAreaLayer(inNetworkDataset, outNALayerName,
impedanceAttribute, "TRAVEL_FROM", "3",
"DETAILED_POLYS", "NO_MERGE",
hierarchy = "NO_HIERARCHY")
#Get the layer object from the result object. The service area layer can
#now be referenced using the layer object.
outNALayer = outSAResultObject.getOutput(0)
#Get the names of all the sublayers within the service area layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Store the layer names that we will use later
facilitiesLayerName = subLayerNames["Facilities"]
polygonsLayerName = subLayerNames["SAPolygons"]
#The input data has a field for FireStationID that we want to transfer to
#our analysis layer. Add the field, and then use field mapping to transfer
#the values.
arcpy.na.AddFieldToAnalysisLayer(outNALayer, facilitiesLayerName,
"FireStationID", "TEXT")
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
facilitiesLayerName)
fieldMappings["FireStationID"].mappedFieldName = "FireStationID"
#Load the fire stations as facilities.
arcpy.na.AddLocations(outNALayer, facilitiesLayerName, inFacilities,
fieldMappings, "",
exclude_restricted_elements = "EXCLUDE")
#Get sublayers we will want to work with later
FacilitiesSubLayer = arcpy.mapping.ListLayers(outNALayer,
facilitiesLayerName)[0]
PolygonsSubLayer = arcpy.mapping.ListLayers(outNALayer,
polygonsLayerName)[0]
# Add fields to the output Polygons sublayer. We will fill the values later.
arcpy.na.AddFieldToAnalysisLayer(outNALayer, polygonsLayerName,
"FireStationID", "TEXT")
arcpy.na.AddFieldToAnalysisLayer(outNALayer, polygonsLayerName,
"TimeOfDay", "TEXT")
#Get the Service Area Layer's solver properties. This will allow us to
#set individual properties later without re-creating the layer.
SA_SolverProperties = arcpy.na.GetSolverProperties(outNALayer)
#Solve the Service Area for each time of day in our time list
for t in timelist:
print "Now solving for time of day: " + t
#Use the solver properties to set the time of day for the solve
SA_SolverProperties.timeOfDay = t
#Solve the service area layer
arcpy.na.Solve(outNALayer)
#Transfer the FireStationID field from the input Facilities to the
#output Polygons
arcpy.management.AddJoin(PolygonsSubLayer, "FacilityID",
FacilitiesSubLayer, "ObjectID")
arcpy.management.CalculateField(PolygonsSubLayer, "FireStationID",
"!Facilities.FireStationID!", "PYTHON")
arcpy.management.RemoveJoin(PolygonsSubLayer)
#Populate the TimeOfDay field
expression = '"' + t + '"'
arcpy.management.CalculateField(PolygonsSubLayer, "TimeOfDay",
expression, "PYTHON")
#Append the polygons to the output feature class. If this was the first
#solve, create the feature class.
if not arcpy.Exists(outSAFC):
arcpy.management.CopyFeatures(PolygonsSubLayer, outSAFC)
else:
arcpy.management.Append(PolygonsSubLayer, outSAFC)
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)