ServiceAreaSolverProperties

摘要

用于访问服务区网络分析图层中的分析属性。GetSolverProperties 函数用于从服务区网络分析图层获取 ServiceAreaSolverProperties 对象。

说明

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

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

属性

属性说明数据类型
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
defaultBreaks
(可读写)

用于获取或设置要计算的服务区范围的默认阻抗值。 可以设置多个面中断来创建同心服务区。 例如,要查找同一设施点的 2 分钟、3 分钟和 5 分钟服务区域,将值指定为 [2, 3, 5]

Double
excludeSources
(可读写)

用于获取或设置生成面时要排除的网络源的列表。 将从所有面中忽略来自排除源的遍历元素的几何。 空列表 [] 表示不排除任何网络源。

String
ignoreInvalidLocations
(可读写)

指定是否忽略无效的输入位置。 通常,如果无法在网络上定位,则位置无效。 当无效位置被忽略时,求解程序将跳过它们并尝试使用剩余位置执行分析。

  • SKIP将忽略无效的输入位置,仅使用有效位置即可成功进行分析。 该值也可以使用布尔值 True 来指定。
  • HALT不会忽略无效位置,从而导致分析失败。 该值也可以使用布尔值 False 来指定。
String
impedance
(可读写)

用于获取或设置用作阻抗的网络成本属性。 在确定服务区域时累积该成本属性。

String
includeNetworkSourceFields
(可读写)

控制是否将分析期间遍历的基础源要素中的附加字段添加到服务区线。 以下是可能值列表:

  • LINES_SOURCE_FIELDS向服务区线添加 SourceID、SourceOID、FromPosition 和 ToPosition 字段,以保存分析过程中已遍历的基础源要素的信息。 如需将服务区线的结果连接到原始源数据,这将非常有用。 值 True 也可用于指定此选项。
  • NO_LINES_SOURCE_FIELDS不向服务区线添加源字段(SourceID、SourceOID、FromPosition 和 ToPosition)。 值 False 也可用于指定此选项。
String
lineOverlap
(可读写)

控制计算服务区线时是否生成重叠线。 以下是可能值列表:

  • OVERLAP当设施点具有重合的服务区线时,为每个设施点包括一个单独的线要素。 值 True 也可用于指定此选项。
  • NON_OVERLAP每个服务区线被包含一次,并将它与最近(阻抗最小)的设施点相关联。 值 False 也可用于指定此选项。
String
lineType
(可读写)

用于获取或设置要从分析中生成的服务区线类型。 以下是可能值列表:

  • NO_LINES不生成线。
  • TRUE_LINES生成不具有测量值的线。
  • TRUE_LINES_WITH_MEASURES生成具有测量值的线。 基于插入了中间结点的边上每个端点的阻抗值生成测量值。 如果需要更快的性能,请勿使用此选项。
String
polygonMerge
(可读写)

控制是否合并共享相似中断值的面。 此选项仅适用于为多个设施点生成面的情况。 以下是可能值列表:

  • NO_MERGE为各个设施点创建单独的面。 这些面可以相互叠置。
  • NO_OVERLAP为各个设施点创建最接近的单独面。 这些面不会相互叠置。
  • MERGE连接具有相同中断值的多个设施点的面。
String
polygonNesting
(可读写)

控制是否将同心服务区面创建为圆盘或圆环。 仅当为设施点指定多个中断值时,此选项才适用。 以下是可能值列表:

  • RINGS不包括较小中断的区域。 这将在连续的中断之间创建面。 如果要查找从一个中断到另一个中断的区域,请使用此选项。 值 True 也可用于指定此选项。
  • DISKS在设施点与中断之间创建面。 例如,如果创建 5 分钟和 10 分钟服务区,则 10 分钟服务区面将包含 5 分钟服务区面内的区域。 如果要针对各中断值查找从设施点到中断的整个区域,请使用此选项。 值 False 也可用于指定此选项。
String
polygonType
(可读写)

用于获取或设置要生成的面类型。 以下是可能值列表:

  • SIMPLE_POLYS创建生成速度快并且相当精确的概化面,边缘除外。
  • DETAILED_POLYS创建详细面,用于对服务区线进行精确建模并且可包含未到达的岛状区域。 这种面比概化面的生成速度慢。
  • NO_POLYS如果仅需要服务区线,则关闭面生成。
String
restrictions
(可读写)

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

String
solverName
(只读)

返回被用于获取求解程序属性对象的网络分析图层所引用的求解程序的名称。 从 ServiceAreaSolverProperties 对象访问时,该属性始终返回字符串值 Service Area Solver

String
splitLinesAtBreaks
(可读写)

控制服务区线在跨越中断值时是否拆分。 以下是可能值列表:

  • SPLIT将两个中断之间的每条线分割为两条线,各自位于其对应中断内。 如果要按中断对服务区线进行符号化,此选项很有用;否则,使用 NO_SPLIT 选项以达到最佳性能。
  • NO_SPLIT在中断的边界处不对线进行分割。
String
timeOfDay
(可读写)

用于获取或设置离开或到达设施点的时间。 对该值的解释取决于行驶方向是朝向设施点还是远离设施点。 如果 travelDirection 属性设置为 TRAVEL_FROM,则表示离开时间;如果 travelDirection 属性设置为 TRAVEL_TO,则表示到达时间。 可以用值 None 指定不应使用任何日期和时间。

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

  • Today—12/30/1899
  • Sunday—12/31/1899
  • Monday—1/1/1900
  • Tuesday—1/2/1900
  • Wednesday—1/3/1900
  • Thursday—1/4/1900
  • Friday—1/5/1900
  • Saturday—1/6/1900

例如,要指定应该在星期五 8:00 a.m. 离开设施点,则将值指定为 datetime.datetime(1900, 1, 5, 8,0,0)

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

DateTime
timeZoneUsage
(可读写)

指定 timeOfDay 参数的一个或多个时区。

  • GEO_LOCALtimeOfDay 参数是指设施点所在的一个或多个时区。 因此,服务区开始时间或结束时间的时区交错。将 timeOfDay 设为 9:00 a.m.,选择 GEO_LOCAL,然后进行求解,将为处于东部时区的所有设施点生成东部时间 9:00 a.m. 的服务区、为处于中部时区的设施点生成中部时间 9:00 a.m. 的服务区、为处于山区时区的设施点生成山区时间 9:00 a.m. 的服务区等等。 时间始终为本地时间 9:00 a.m.,但会因不同时区而实时交错。如果商店处于覆盖美国、在当地时间 9:00 a.m. 开业的商店链中,则可以在一次求解中选择此参数值来查找处于所有商店开业时间的市场地区。 首先,东部时区的商店开业并生成一个面,一小时后中部时区的商店开业,以此类推。
  • UTCtimeOfDay 参数采用协调世界时间 (UTC)。 因此,无论各设施点是处于同一时区还是不同时区都会同时到达或出发。将 timeOfDay 设为 2:00 p.m.,选择 UTC,然后进行求解,将为处于东部时区的所有设施点生成东部标准时间 9:00 a.m. 的服务区、为处于中部时区的设施点生成中部标准时间 8:00 a.m. 的服务区、为处于山地时区的设施点生成山地标准时间 7:00 a.m. 的服务区,等等。
    注:

    以上情况均假定为标准时间。 在夏令时期间,东部、中部和山地时间应各提前 1 小时(即分别为 10:00 a.m.、9:00 a.m. 和 8:00 a.m.)。

    UTC 选项可用于为跨两个时区的管辖区显示紧急响应范围。 将急救车辆加载为设施点。 将 timeOfDay 设置为 UTC 的当前时间。 (您需要确定当前 UTC 时间和日期,以便正确使用此选项。)设置其他属性,并对分析进行求解。 尽管时区边界会分割车辆,但结果仍将显示当前交通状况下可以到达的区域。 也可对其他时间使用相同的过程,而不仅是当前时间。

无论 timeZoneUsage 的设置如何,当 timeOfDay 的值不为空且 polygonMerge 设置为创建合并或非重叠面时,所有设施点必须处于同一时区。

String
travelDirection
(可读写)

控制服务区分析期间阻抗累积的方向。 以下是可能值列表:

  • TRAVEL_FROM在远离设施点的方向上创建服务区。
  • TRAVEL_TO在指向设施点的方向上创建服务区。
String
travelMode
(只读)

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

Object
trimDistance
(可读写)

用于获取或设置对服务区面进行修剪的距离范围。 属性值包括距离的数值和单位,用空格分隔;例如,要指定 100 米的修剪距离,使用 "100 Meters"

String
trimPolygons
(可读写)

控制是否对服务区面进行修剪。 以下是可能值列表:

  • TRIM_POLYS对包含服务区外围边的面进行修剪,以使其达到外边界的指定距离内。 这在网络非常稀疏且不需要服务区覆盖大片不含要素的区域时十分有用。 值 True 也可用于指定此选项。
  • NO_TRIM_POLYS不修剪面。 值 False 也可用于指定此选项。
String
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 异常。

代码示例

ServiceAreaSolverProperties 示例 1(独立脚本)

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

# Name: ServiceAreaSolverProperties_Workflow.py
# Description: Finds the regions fire stations can reach within four minutes
#              as the initial assesment of the coverage of the region. We will
#              then change the break values to 1, 4, and 10 minutes to see a
#              better picture of coverage
# 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 = "FireHouseRegions"
    travel_mode = "Driving Time"
    direction = "FROM_FACILITIES"
    cutoffs = 4
    in_facilities = os.path.join(input_gdb, "Analysis/FireStations")
    four_minute_polygons = os.path.join(output_dir, "Output.gdb", "four_minute_polygons")
    ten_minute_polygons = os.path.join(output_dir, "Output.gdb", "ten_minute_polygons")


    # Create a new Service Area layer. Fire stations are concerned with the
    # drive times away from the fire stations to the incidents.
    result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network,
                                            layer_name, travel_mode,
                                            direction, cutoffs)

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

    # Get the names of all the sublayers within the service area 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"]
    polygons_layer_name = sub_layer_names["SAPolygons"]

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

    # Solve the service area layer
    arcpy.na.Solve(layer_object)

    # Save the resulting polygon sublayer
    arcpy.management.CopyFeatures(polygons_layer_name, four_minute_polygons)

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

    # Update the breaks to 1, 4, and 10 minutes
    solverProps.defaultBreaks = [1, 4, 10]

    # Solve the service area layer
    arcpy.na.Solve(layer_object)

    # Save the resulting polygon sublayer
    arcpy.management.CopyFeatures(polygons_layer_name, ten_minute_polygons)


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 service area layer object from a layer named "Service Area" in the map
doc = arcpy.mp.ArcGISProject('current')
map_obj = doc.listMaps()[0]
sa_layer = map_obj.listLayers('Service Area')[0]

#Get the Trucking Time travel mode from the network dataset
desc = arcpy.Describe(sa_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(sa_layer)
solver_properties.applyTravelMode(trucking_mode)

相关主题