ClosestFacilitySolverProperties

摘要

用于访问最近设施点网络分析图层中的分析属性。GetSolverProperties 函数用于从最近设施点网络分析图层中获取 ClosestFacilitySolverProperties 对象。

说明

ClosestFacilitySolverProperties 对象提供对最近设施点网络分析图层中所有分析属性的读取和写入权限。该对象可用于修改最近设施点图层的分析属性,并可重新求解相关图层以确定合适结果。使用创建最近设施点分析图层地理处理工具可创建新的最近设施点图层。通过从新的最近设施点图层获取 ClosestFacilitySolverProperties 对象,可重新对现有图层进行后续分析,而无需每次分析都创建一个图层,以节省时间。

修改 ClosestFacilitySolverProperties 对象的属性后,相应的图层可立即与其他函数和地理处理工具配合使用。无需刷新或更新图层,通过上述对象进行的修改便可生效。

属性

属性说明数据类型
accumulators
(可读写)

用于获取或设置累积为分析一部分的网络成本属性的列表。空列表 [] 表示没有累积成本属性。

String
attributeParameters
(可读写)

用于获取或设置将在分析中使用的参数化属性。该属性返回一个 Python 字典。该字典关键字是由属性名称和参数名称这两个值组成的元组。字典中每个项目的值均为参数值。

参数化的网络属性用于对属性值的某个动态方面进行建模。例如,可使用某个参数对高度限制为 12 英尺的隧道进行建模。在这种情况下,应将以英尺为单位的车辆高度指定为参数值。如果车辆高度超过 12 英尺,此限制条件将评估为 True,从而限制车辆穿越隧道。类似的,桥梁还可以具有一个用来指定重量限制的参数。

尝试修改 attributeParameters 属性不会导致值更新。相反,您应始终使用新的字典对象来设置属性值。以下两个代码块将演示这两种方法的差异。

请勿尝试修改 attributeParameters 属性,这种编码方法不起作用。

solverProps.attributeParameters[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"

使用新的字典对象修改 attributeParameters 属性。

params = solverProps.attributeParameters params[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"
solverProps.attributeParameters = params
如果网络分析图层没有参数化属性,则该属性将返回 None

Dictionary
defaultCutoff
(可读写)

用于获取或设置求解程序停止在设施点中搜索给定事件点时对应的默认阻抗值。None 值用于指定不应使用中断。

Double
defaultTargetFacilityCount
(可读写)

用于获取或设置要按事件点查找的最近设施点数。

Integer
impedance
(可读写)

用于获取或设置用作阻抗的网络成本属性。当确定最近设施点和到最近设施点的最佳路径时,该成本属性最小化。

String
outputPathShape
(可读写)

用于获取或设置求解程序输出的路径要素的形状类型。以下是可能值列表:

  • TRUE_LINES_WITH_MEASURES输出路径将具有基础网络源的精确形状。而且,输出还包括线性参考的路径测量值。测量值从第一个停靠点增加并将记录到达指定位置的累积阻抗。
  • TRUE_LINES_WITHOUT_MEASURES输出路径将具有基础网络源的精确形状。
  • STRAIGHT_LINES输出路径形状是一条介于各个事件点-设施点对之间的直线。
  • NO_LINES将不会为输出路径生成任何形状。
String
restrictions
(可读写)

用于获取或设置适用于分析的约束属性的列表。空列表 [] 表示没有约束属性用于分析。

String
solverName
(只读)

返回被用于获取求解程序属性对象的 Network Analyst 图层所引用的求解程序的名称。从 ClosestFacilitySolverProperties 对象访问时,该属性始终返回字符串值最近设施点求解程序

String
streetDirectionsProperties
(可读写)

StreetDirectionsProperties 提供读写访问权限,使您可以自定义最近设施点图层的方向输出。

Object
timeOfDay
(可读写)

用于获取或设置路径应开始或结束的时间和日期。对该值的解释取决于 timeOfDayUsage 属性是设置为 START_TIME 还是 END_TIME。可以用值 None 指定不应使用任何日期和时间。

可使用以下日期来指定一周中的每一天,而无需使用特定的日期。

  • 今天 - 12/30/1899
  • 星期日 - 12/31/1899
  • 星期一 - 1/1/1900
  • 星期二 - 1/2/1900
  • 星期三 - 1/3/1900
  • 星期四 - 1/4/1900
  • 星期五 - 1/5/1900
  • 星期六 - 1/6/1900

例如,要指定路径应该在星期一 8:00 a.m 开始或结束,则将值指定为 datetime.datetime(1900, 1, 1, 8,0,0)

timeZoneUsage 参数指定该日期和时间是 UTC 还是设施点或事件点所在时区。

DateTime
timeOfDayUsage
(可读写)

控制 timeOfDay 属性的值表示路径的到达时间还是离开时间。以下是可能值列表:

  • END_TIME将在 timeOfDay 属性中设置的时间到达设施点或事件点的路径。如果到达时间更重要,则此选项很有用;也就是说,您希望知道需要何时离开才能在指定时间到达目的地。
  • START_TIME将在 timeOfDay 属性中设置的时间离开设施点或事件点的路径。此选项在查找给定了离开时间的最佳路径时十分有用。
  • NOT_USED此路径不使用起始或结束时间和日期。如果 timeOfDay 属性的值为 None,则应使用此选项。
String
timeZoneUsage
(可读写)

指定 timeOfDay 参数的时区。

  • GEO_LOCALtimeOfDay 参数采用设施点或事件点所处的时区。如果将 timeOfDayUsage 设置为 Start_Time 并将 travelDirection 设置为 TRAVEL_FROM,则为设施点所在时区。如果将 timeOfDayUsage 设置为 Start_Time 并将 travelDirection 设置为 TRAVEL_TO,则为事件点所在时区。如果将 timeOfDayUsage 设置为 End_Time 并将 travelDirection 设置为 TRAVEL_FROM,则为事件点所在时区。如果将 timeOfDayUsage 设置为 End_Time 并将 travelDirection 设置为 TRAVEL_TO,则为设施点所在时区。
  • UTCtimeOfDay 参数采用协调世界时间 (UTC)。如果您想要查找可在指定时间内(如现在)到达的最近地点,但不确定设施点或事件点所在的时区,请选择此选项。

无论 timeZoneUsage 如何设置,如果您的设施点和事件点在多个时区中,则工具将强制执行以下规则:

  • 下列情况中,所有事件点必须在同一时区

    • 指定起始时间并从事件点行驶至设施点
    • 指定结束时间并从设施点行驶至事件点

  • 下列情况中,所有设施点必须在同一时区

    • 指定起始时间并从设施点行驶至事件点
    • 指定结束时间并从事件点行驶至设施点

String
travelDirection
(可读写)

用于获取或设置分析过程中设施点和事件点之间的行驶方向。以下是可能值列表:

  • TRAVEL_FROM行驶方向 - 从设施点到事件点。
  • TRAVEL_TO行驶方向 - 从事件点到设施点。
String
travelMode
(只读)

访问网络分析图层上设置为 arcpy.na.TravelMode 对象的出行模式。

Object
useHierarchy
(可读写)

当执行分析时控制等级属性的使用。以下是可能值列表:

  • USE_HIERARCHY 使用等级属性进行分析。使用等级的结果是,求解程序更偏好高等级的边而不是低等级的边。分等级求解的速度更快,并且可用于模拟驾驶员在可能的情况下选择在高速公路而非地方道路上行驶(即使行程可能更远)的偏好。仅当 Network Analyst 图层引用的网络数据集具有等级属性时,此选项才适用。值 True 也可用于指定此选项。
  • NO_HIERARCHY不使用等级属性进行分析。如果不使用等级属性,则会为网络数据集生成精确的路径。值 False 也可用于指定此选项。
String
uTurns
(可读写)

用于获取或设置策略,该策略指示交汇点处的 U 形转弯在求解程序处理停靠点之间的遍历期间可如何出现。以下是可能值列表:

  • ALLOW_UTURNS无论在交汇点处有几条连接的边,均允许 U 形转弯。
  • NO_UTURNS在所有交汇点处均禁止 U 形转弯,不管交汇点原子价如何。不过请注意,即使已选择该设置,在网络位置仍允许 U 形转弯;但是也可以通过设置个别网络位置的 CurbApproach 属性来禁止 U 形转弯。
  • ALLOW_DEAD_ENDS_ONLY除仅有一条相邻边的交汇点(死角)外,其他交汇点均禁止 U 形转弯。
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY在恰好有两条相邻边相遇的交汇点处禁止 U 形转弯,但是交叉点(三条或三条以上相邻边的交汇点)和死角(仅有一条相邻边的交汇点)处允许。通常,网络在路段中间有多余的交汇点。此选项可防止车辆在这些位置出现 U 形转弯。
String

方法概述

方法说明
applyTravelMode (travel_mode)

根据出行模式对象更新网络分析图层的分析属性。随后可对更新的网络分析图层进行求解以完成分析。

方法

applyTravelMode (travel_mode)
参数说明数据类型
travel_mode

该变量引用一个源自网络数据集的出行模式对象。可通过调用 arcpy.na.GetTravelModes 函数获得出行模式对象的列表。

Object

创建网络分析图层后,将为其分配所有分析属性的默认值。可使用从网络分析图层获得的求解程序属性对象更新各个分析属性。出行模式存储了一组预定义的分析设置,用于帮助执行特定分析,例如,步行时间出行模式存储了执行基于时间的步行分析所需的分析设置。

使用 applyTravelMode 方法,可一次性应用在一个出行模式中定义的所有分析设置。在分析属性完成更新后,可对网络分析图层进行求解以完成分析。

如果在更新求解程序属性时出错,例如,当提供的出行模式所引用的属性在当前网络数据集中不存在,或不再适用于创建求解程序属性对象的相应网络分析图层所使用的网络数据集时,不会产生任何异常。此方法将成功执行,但当您尝试求解此类网络分析图层时会出现错误。

如果 travel_mode 参数不引用出行模式对象或字符串,则将产生 TypeError 异常。如果 travel_mode 参数引用字符串并且该字符串无法在内部转换成出行模式对象的有效字符串表示,将产生 ValueError 异常。

代码示例

ClosestFacilitySolverProperties 示例 1(独立脚本)

该脚本显示如何通过完整的工作流来更新最近设施点求解程序属性。其基于旧金山地区的教程网络数据集。

# Name: ClosestFacilitySolverProperties_Workflow.py
# Description: For some emergency planning a distribution center is seeing how
#              long it will take to get to the nearest hospital at different
#              times of the day.
# Requirements: Network Analyst Extension

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

try:
    # Check out the Network Analyst license if available.
    # Fail if the Network Analyst
    # license is not available.
    if arcpy.CheckExtension("network") == "Available":
        arcpy.CheckOutExtension("network")
    else:
        raise arcpy.ExecuteError("Network Analyst Extension license is not available.")

    # 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")
    layer_name = "ClosestHospital"
    travel_mode = "Driving Time"
    direction = "TO_FACILITIES"
    cutoffs = 4
    in_facilities = os.path.join(input_gdb, "Analysis/Hospitals")
    in_incident = os.path.join(input_gdb, "Analysis/DistributionCenter")
    nine_in_the_morning = os.path.join(output_dir, "Output.gdb", "nine_in_the_morning")
    mid_day = os.path.join(output_dir, "Output.gdb", "mid_day")


    # Create a new Closest Facilities layer. The warehouse is concerned with an
    # accident during their workday and wants to know how long it will take to
    # get to the closest hospital.
    result_object = arcpy.na.MakeClosestFacilityAnalysisLayer(network,
                                        layer_name, travel_mode,
                                        direction,
                                        number_of_facilities_to_find = 1,
                                        time_of_day = "1/4/1900 09:00 am")

    # Get the layer object form the result object. The closest facility layer
    # can now be referenced using the layer object.
    layer_object = result_object.getOutput(0)

    # Get the names of all the sublayers within the closest facility layer.
    sub_layer_names = arcpy.na.GetNAClassNames(layer_object)
    # Store the layer names that we will use later
    facilities_layer_name = sub_layer_names["Facilities"]
    incidents_layer_name = sub_layer_names["Incidents"]
    routes_layer_name = sub_layer_names["CFRoutes"]

    # Load the hospital locations as facilities.
    arcpy.na.AddLocations(layer_object, facilities_layer_name, in_facilities,
                          "", "")

    # Load the distribution center location as incidents
    arcpy.na.AddLocations(layer_object, incidents_layer_name, in_incident,
                          "", "")

    # Solve the closest facilities layer
    arcpy.na.Solve(layer_object)

    # Save the resulting route sublayer
    arcpy.management.CopyFeatures(routes_layer_name, nine_in_the_morning)

    # Get the solver properties object from the closest facility layer
    solverProps = arcpy.na.GetSolverProperties(layer_object)

    # Update the breaks to 1, 4, and 10 minutes
    solverProps.timeOfDay = "1/4/1900 12:00 pm"

    # Solve the closest facility layer
    arcpy.na.Solve(layer_object)

    # Save the resulting route sublayer
    arcpy.management.CopyFeatures(routes_layer_name, mid_day)


except Exception as e:
    # If an error occurred, print line number and error message
    import traceback
    import sys
    tb = sys.exc_info()[2]
    print ("An error occurred on line %i" % tb.tb_lineno)
    print (str(e))
ApplyTravelMode 示例 2(Python 窗口)

此脚本显示如何将 TruckingTime 出行模式应用到现有图层。

#Get the closest facility layer object from a layer named "Closest Facility" in
#the map
doc = arcpy.mp.ArcGISProject('current')
map_obj = doc.listMaps()[0]
cf_layer = map_obj.listLayers('Closest Facility')[0]

#Get the Trucking Time travel mode from the network dataset
desc = arcpy.Describe(cf_layer)
travel_modes = arcpy.na.GetTravelModes(desc.network.catalogPath)
trucking_mode = travel_modes["Trucking Time"]

#Apply the travel mode to the analysis layer
solver_properties = arcpy.na.GetSolverProperties(cf_layer)
solver_properties.applyTravelMode(trucking_mode)