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