使用具有网络属性的参数
有时网络属性值取决于变量条件。例如,车辆的高度能够决定是否可穿越建有较低天桥的路段。当前的天气状况可能会降低行驶速度,从而影响网络时间成本。您可以使用以下两种方法之一构建基于车辆高度的限制、基于比例因子的行程成本和网络分析的其他可变状况。一种方法是在每次高度或天气状况发生变化时创建一个网络属性;但是,这种方法不会随着变更次数的增加而进行相应的调整。更为通用的方法是使用一个带参数的网络属性,该参数包含了网络属性的可变状况。
这些参数是需要在以后进行指定的值的占位符。如果未指定新值,每个参数都有一个默认值。在 ArcCatalog 中,参数被添加到网络属性,并由该属性的赋值器进行引用。设置网络问题时可以在 ArcMap 中更改参数值,以便能够在运行时使用表达式和当前参数值确定网络属性的值。
参数化的网络属性如何工作
参数化的网络属性具有可利用网络属性的参数和其他网络属性以帮助确定其值的 VBScript 或函数赋值器。由于参数会在运行时发生变化,它们的值不会写入数据库;相反,只在需要时进行计算。因此,在参数值发生变化时,不需要重新构建网络数据集。
约束属性的参数
可以向约束属性添加参数以确定车辆可以使用哪些网络元素。系统会将具有车辆特征的参数与来自“描述符”属性的值进行比较,以确定网络元素是否可以穿越。例如,参数化的约束属性可以将您车辆的高度和具有天桥或隧道与车辆的间距的描述符属性进行比较。如果车辆高度大于该间距,则边会受到约束。这样会为不同车辆产生不同的路径:如下图所示:低矮的车辆可以在低桥下面沿直达路径行驶,而高大的车辆会选择另外一条路径,以避免因与桥的间距过小而难以通过。
在这种情况下,可以创建两个属性:一个描述符属性和一个约束属性,可以将它们分别命名为 MaxHeight 和 HeightRestriction。MaxHeight 会引入源数据中的间距值,而 HeightRestriction 会读取来自 MaxHeight 的值,并将它们与具有当前车辆高度的参数进行比较。下图显示了此过程的概化版本。
成本属性的参数
您可能需要一个可以引用其他成本属性并进行换算的参数化成本属性。这在诸如冰、雾或大雨等恶劣天气突袭您的研究区域并阻碍正常车流时非常有用。在已经对成本属性配备了参数的情况下,您可以将行驶时间期望值调整为与交通流动速度变化一致。
您可以创建两个网络属性:DriveTime 和 DriveTime_scaled,前者可以将正常行驶时间阻抗与源数据字段中的值一起存储,后者可以获取 DriveTime 属性值,并通过具有当前比例因子的 DriveTime_scaled 属性的参数进行换算。
设置参数化的属性
创建完必要的网络属性后,可以设置参数化的属性,此过程包括两个主要步骤:
- 向网络属性添加参数。
- 设置网络属性的赋值器以使用该参数。
在 ArcCatalog 中使用网络数据集属性 对话框的属性选项卡执行这些步骤。
添加参数
可以按照随后的几个步骤创建参数。下面的示例是针对约束属性 HeightRestriction 定制的,但这些步骤对于成本属性同样适用。
新参数 Vehicle Height 被添加到 HeightRestriction 属性,并指定了默认值零。(车辆高度为零时,假定该车辆可以适合任何间距。)在 ArcMap 中执行网络分析时,可以更改参数的默认值。
设置赋值器
添加参数之后,您需要设计一个包含该参数的赋值器和存储与该参数相关信息的常量或其他网络属性。在下面的示例中,为参数化的约束属性 HeightRestriction 指定了一个赋值器,该赋值器会将车辆高度参数与描述符网络属性 MaxHeight 进行比较,MaxHeight 中包含了网络元素的间距测量值。
由于 VBScript 赋值器在分析时使用 VBScript 环境计算其值,因此指定此赋值器会对分析性能产生负面影响。ESRI 强烈建议在可行的情况下使用函数赋值器代替 VBScript 赋值器,以便在分析时获得最佳性能。
为此示例选择了函数赋值器。下面的“函数赋值器”对话框显示了为每条街道进行计算所使用的表达式。只要函数赋值器返回真,网络元素就会受到约束。如果返回“假”,则网络元素可被穿越并可在解决方案中使用。
为了进行比较,随下面显示的函数赋值器建立了一个参数化的成本属性 DriveTime_scaled,该赋值器使用了“DriveTime 因子”参数。该赋值器从 DriveTime 成本属性读取行驶时间并乘以 DriveTime 因子的值,而该因子在运行时指定。
您可以在运行时更改参数的默认值 1。值 1.5 会将行驶时间减慢正常值的 50%。DriveTime 值为 5 分钟的网络元素所得到的 DriveTime_scaled 值为 7.5 分钟。
重新构建网络数据集
由于函数赋值器不会将它们的值存储在数据库中,而是在运行时进行计算,因此在 ArcCatalog 中添加或修改函数赋值器或相应属性参数后,不必重新构建网络数据集。但是,如果基于字段赋值器对其相关属性进行更改,则需要重新构建网络数据集以利用新值。
在 ArcCatalog 中准备好参数化的属性后,可以开始用它来解决 ArcMap 中的网络问题。更改该参数的默认值时,不必重新构建网络。