使用具有网络属性的参数
有时网络属性值取决于变量条件。例如,车辆的高度能够决定是否可穿越建有较低天桥的路段。当前的天气状况可能会降低行驶速度,从而影响网络时间成本。您可以使用以下两种方法之一构建基于车辆高度的限制、基于比例因子的行程成本和网络分析的其他可变状况。一种方法是在每次高度或天气状况发生变化时创建一个网络属性;但是,随着变更次数的增加,这种方法会变得不实用。更为通用的方法是使用一个带参数的网络属性,该参数包含了网络属性的可变状况。
参数是值的占位符,可针对特定分析更改这些值。每个参数都有一个有意义的默认值,需要时该值可被用户覆盖。在 ArcCatalog 中,参数被添加到网络属性,并由该属性的赋值器进行引用。设置网络问题时可以在 ArcMap 中更改参数值,以便能够在运行时使用表达式和当前参数值确定网络属性的值。
参数化的网络属性如何工作
参数化的网络属性具有可利用网络属性的参数和其他网络属性以帮助确定其值的赋值器。
由于参数值可能在运行时发生变化,网络属性值不会写入数据库;相反,只在需要时进行计算。因此,在参数值发生变化时,不需要重新构建网络数据集。
约束属性的参数
默认的“约束条件用法”参数
在您创建的任何约束属性中都会自动添加一个参数:约束条件用法。它指定了约束条件属性对使用约束条件的元素上的行程是禁止、避免还是首选。如果避免或首选元素,可以进一步指定避免或首选这些元素的程度。具体来说,可以为“约束条件用法”指定以下任意值(列表下方的“深入”部分中介绍了括号中的数值):
- 禁止 - (-1) 相关网络元素上的行程被完全禁止。这是最常见的约束条件用法。
- 避免:高 - (5) 求解器极不可能使用与约束条件关联的网络元素。
- 避免:中 - (2) 求解器不可能使用与约束条件关联的网络元素。
- 避免:低 - (1.3) 求解器不太可能使用与约束条件关联的网络元素。
- 首选:低 - (0.8) 求解器略有可能使用与约束条件关联的网络元素。
- 首选:中 - (0.5) 求解器可能使用与约束条件关联的网络元素。
- 首选:高 - (0.2) 求解器极有可能使用与约束条件关联的网络元素。
这七个文本值中的每一个在内部都由固定数值表示,该值显示在上面列表的括号中。所提供的文本选择及其基本数值足够几乎所有用户使用。不过,如果需要微调避免或首选元素的程度,可通过输入自己的数值来实现。
为帮助您了解是否需要输入自定义值,您需要了解这些值对求解程序有哪些影响。通常,将有约束条件的元素的成本乘以这些数值可提高或降低成本,进而使这些元素在分析期间的优先级增加或减少。例如,首选元素乘以一个大于 0 且小于 1 的参数值可降低其成本,并使求解程序更有可能在结果中包含这些元素。值“首选:高”的值更接近于 0,而“首选:低”的值更接近于 1。(请注意,不允许输入值 0;这会在求解时引起错误。)对于想要避免的元素,“约束条件用法”数值应设置为大于 1 的数,因为乘以这些值会提高成本。要禁止元素,“约束条件用法”的值在内部设置为 -1。为简单起见,您可以认为 Network Analyst 将负成本值解释为不可穿越,但内部过程比这更为复杂。
应清楚求解程序只是临时使用这些调整后的成本;它们不会包括在分析输出或路线规划指示中。
要输入自定义值,只需将提供的文本选择(“受限”和“首选:高”等)替换为数字。如果输入的数值与某个文本值使用的数值相匹配,则显示该文本值。
如果使用 ArcGIS 10.1 之前版本的网络数据集,“约束条件用法”参数不会存在于任何约束属性中;在这种情况下,约束条件始终禁止网络元素。请升级网络数据集,以启用将约束条件更改为“避免”或“首选”元素的选项。
用于对车辆特征进行建模的参数
Network Analyst 始终向每个约束属性添加默认参数“约束条件用法”。还可以添加用于设置车辆特征的参数,以细分给定车辆可遍历哪些网络元素。
例如,您可以添加一个约束属性连同车辆高度参数,以将车辆高度与保存有天桥下或隧道中间隙的描述符属性进行比较。如果车辆高度大于该间隙,则边会被禁止。这样会为不同车辆产生不同的路径:如下图所示,低矮的车辆可以在低桥下面沿直达路径行驶,而高大的车辆会选择另外一条路径,以避免因与桥的间距过小而难以通过。
在大多数情况下,当约束属性取决于车辆特征参数时,将“约束条件用法”设置为“禁止”。相应地,该子部分假定约束属性禁止元素。
在这种情况下,可以创建两个属性:一个描述符属性和一个约束属性,可以将它们分别命名为 MaxHeight 和 HeightRestriction。MaxHeight 会引入源数据中的间距值,而 HeightRestriction 会读取来自 MaxHeight 的值,并将它们与具有当前车辆高度的参数进行比较。下图显示了此过程的概化版本。
成本属性的参数
您可能需要一个可以引用其他成本属性并进行换算的参数化成本属性。这在诸如冰、雾或大雨等恶劣天气突袭您的研究区域并阻碍正常车流时非常有用。在已经对成本属性配备了参数的情况下,您可以将行驶时间期望值调整为与交通流动速度变化一致。
您可以创建两个网络属性:DriveTime 和 DriveTime_scaled,前者可以将正常行驶时间阻抗与源数据字段中的值一起存储,后者可以获取 DriveTime 属性值,并通过具有当前比例因子的 DriveTime_scaled 属性的参数进行换算。
设置参数化的属性
创建完必要的网络属性后,可以设置参数化的属性,此过程包括两个主要步骤:
- 向网络属性添加参数。
- 设置网络属性的赋值器以使用该参数。
在 ArcCatalog 中使用网络数据集属性 对话框的属性选项卡执行这些步骤。
添加参数
可以按照随后的几个步骤创建参数。下面的示例是针对约束属性 HeightRestriction 定制的,但这些步骤对于成本属性同样适用。
HeightRestriction 属性新增一个参数“车辆高度”,该参数的默认值为 0。(车辆高度为 0 时,假定车辆可通过任何间隙。)在 ArcMap 中执行网络分析时,可以更改参数的默认值。
设置赋值器
添加参数之后,您需要设计一个包含该参数的赋值器和存储与该参数相关信息的常量或其他网络属性。在下面的示例中,为参数化的约束属性 HeightRestriction 指定了一个赋值器,该赋值器会将车辆高度参数与描述符网络属性 MaxHeight 进行比较,MaxHeight 中包含了网络元素的间距测量值。
由于脚本赋值器在分析时使用 VBScript 或 Python 环境计算其值,因此指定此赋值器会对分析性能产生负面影响。Esri 强烈建议在可行的情况下使用函数赋值器代替脚本赋值器,以便在分析时获得最佳性能。
为此示例选择了函数赋值器。下面的函数赋值器 对话框显示了为每条街道进行计算所使用的表达式。只要函数赋值器返回真,网络元素就会受到约束。如果返回 False,则网络元素不受约束并可在解决方案中使用。
为了进行比较,随下面显示的函数赋值器建立了一个参数化的成本属性 DriveTime_scaled,该赋值器使用了“DriveTime 因子”参数。该赋值器从 DriveTime 成本属性读取行驶时间并乘以 DriveTime 因子的值,而该因子在运行时指定。
您可以在运行时更改参数的默认值 1。值 1.5 会将行驶时间减慢正常值的 50%。DriveTime 值为 5 分钟的网络元素所得到的 DriveTime_scaled 值为 7.5 分钟。
重新构建网络数据集
由于函数赋值器不会将它们的值存储在数据库中,而是在运行时进行计算,因此在 ArcCatalog 中添加或修改函数赋值器或相应属性参数后,不必重新构建网络数据集。但是,如果基于字段赋值器对其相关属性进行更改,则需要重新构建网络数据集以利用新值。
在 ArcCatalog 中准备好参数化的属性后,可以开始用它来解决 ArcMap 中的网络问题。更改该参数的默认值时,不必重新构建网络。