网络使用的赋值器类型
网络中定义的每个属性都必须具有与参与网络的每个源相对应的值。赋值器为每个源的属性指定值。在 ArcView GIS 和 ARC/INFO(ArcGIS 的前身)中,属性值由 shapefile 或 coverage 中的字段指定。在 ArcGIS 中,字段赋值器为每个网络源的字段的网络属性指定值。此外,ArcGIS 还提供其他类型的赋值器,可以用于常量、字段表达式、函数或 VBScript 等。
赋值器介绍如下。
赋值器 |
描述 |
---|---|
字段赋值器 |
为网络属性指定值的最常见方式就是标识一个单个字段,该字段用于在网络数据集构建时计算网络属性。例如,在属性值表示测量单位(如米)时,可以使用字段赋值器。 |
字段表达式赋值器 |
字段赋值器经过修改可以使用字段表达式作为值来代替单个字段。此时,可以在字段赋值器 对话框中构建表达式。例如,如果网络属性的单位是米,而源数据的单位是英尺,可以创建一个表达式以在构建网络数据集时将英尺转换成米。 |
常量赋值器 |
可以为属性指定一个常数值。常数值可以是表示成本、描述符、约束和等级等属性的数字 (0, 1, 2),也可以是表示约束属性的布尔表达式(可穿越或受限制)。 |
函数赋值器 |
函数赋值器通过执行关于另一属性值或参数值的倍乘函数或逻辑函数来计算属性值。对于数值属性类型,其值可以通过另一属性值乘以某值的表达式获得。例如:DriveTime * 1.25。对于布尔属性类型,其值可以通过将另一属性值与一个参数值比较的表达式获得,例如:MaxHeight < VehicleHeight。 旧版本: 因为函数赋值器是 ArcGIS 9.3 版本的新功能,所以如果在 ArcGIS 9.3 之前版本中使用函数赋值器,则网络数据集不可用。 |
通用转弯延迟赋值器 |
通用转弯延迟赋值器用于为两个边元素之间的过渡指定默认成本值。该成本取决于两条边之间的偏转角,以及所遍历的各条边的道路类(主要道路、次要道路或地方道路)。您可以将等级范围对话框和等级属性结合使用来指定道路类。例如,可以使用通用转弯延迟赋值器进行如下设定:由偏转角确定的所有左转弯在从地方道路左转到次要道路时所用的时间大于从地方道路左转到其他地方道路的时间。还可以指定增加其他过渡的成本,例如,在两条次要道路的交叉路口处继续直行时,增加 10 秒的延迟时间。 旧版本: 因为通用转弯赋值器是 ArcGIS 9.3 版本的新功能,所以如果在 ArcGIS 9.3 之前版本中使用函数赋值器,则网络数据集不可用。 |
VBScript 赋值器 |
可以通过 VBScript 的执行结果为属性指定值。这为构建复杂属性模型提供了方法。不同于其他赋值器,VBScript 赋值器不会在构建网络数据集时指定值。只有在特定的网络分析需要使用某属性时,它才会为该属性指定值。如果一个属性的值不断变化,使用 VBScript 赋值器可以确保网络分析总会使用更新后的属性。 注: 由于 VBScript 赋值器在分析时计算属性值,因此它会对分析性能产生负面影响。 |
边流量赋值器 |
边流量赋值器专用于历史流量数据。该赋值器可以为一周中的某一天和某一天的特定时刻提供行驶时间。它具有回退成本属性,可以在特定时刻的行驶时间不可用时提供工作日及周末的行驶时间。它还有一些时间中立型成本属性,当排序停止或求解不支持历史流量数据的网络分析图层时,Network Analyst 会引用这些属性。 |
每个交汇点源和转弯源都可以有一个赋值器。每个边源可以有两个赋值器 - 边的每个方向各有一个。
可以为边、交汇点和转弯指定默认赋值器。如果没有为特定的源指定明确的赋值器,则该源的值由默认赋值器指定。
以下为指定赋值器的常规工作流程:
- 选择必须指定赋值器的源
- 选择赋值器类型,如字段、常量、函数或 VBScript。
- 为网络属性指定值。
如果值从一个字段获取,可以在下拉菜单中选择该字段。如果值需要按照字段表达式计算,可以将赋值器类型设置为字段并按键盘上的 F12 调出字段赋值器 对话框。另外,右键单击赋值器 对话框上的源并从值菜单中选择属性也可以打开字段赋值器 对话框。
赋值器示例
为成本属性指定值
对于网络属性 DriveTime,街道网络源的赋值器为字段类型。FT_Minutes 字段包含街道源“自-至”方向的网络属性值。同样,街道源“至-自”方向的值也可以由 TF_Minutes 字段指定。
在此例中,网络中的其他边源是过渡边,没有行驶时间。因此,可以为其指定一个常数值 -1。
此外,成本属性也可以使用函数赋值器通过另一个成本属性获得。例如,对慢速车辆行驶时间建模的属性可以由函数赋值器引用对常速车辆行驶时间建模的属性乘以减速系数获得。
为约束条件指定值
约束属性为布尔数据类型。由于源元素不是受限制,就是被穿越,所以可以为它指定一个常量(受限制或可穿越)。
此外,约束属性也可以使用函数赋值器通过将另一个属性与一个参数值比较获得。例如,对车辆高度限制建模的属性可以使用函数赋值器将道路的高度限制与车辆实际高度(存储在一个属性参数中)进行比较后获得。当该表达式计算结果为真时,此道路受限制;当该表达式计算结果为假时,此道路可穿越。这项规则唯一例外的是,任何时候任意一个运算对象(MaxHeight 或 Vehicle Height)的值为零时,表达式的计算结果总为假。
最后,约束属性也可以通过源要素类中的字段指定。例如,可以使用字段表达式赋值器生成布尔型结果 - 如果表达式为真,元素受限制,否则元素可穿越。
当网络数据集创建后,Network Analyst 会搜索所有源来查找常用字段,如“单向”字段。如果在任意源内找到“单向”字段,都会创建“单向”网络属性并根据字段表达式为相关源指定值。
以下为“自-至”方向的单向约束属性的表达式:
以下为“至-自”方向的单向约束属性的表达式:
这些表达式根据“单向”字段内的文本值确定所允许的行驶方向:
- FT 或 F = 仅允许沿线要素的数字化方向行驶(“自-至”方向)。
- TF 或 T = 仅允许沿与线要素数字化方向相反的方向行驶(“至-自”方向)。
- N = 在这两个方向都不允许行驶。
- 其他任意值 = 在这两个方向都允许行驶。
分配等级
通过为网络数据集分配等级,可以将边分为不同的等级分级,进而减少求解时间。但应记住,等级求解的结果可能不如非等级求解的结果理想。建议您另外阅读关于使用等级进行网络分析,以便更好地理解等级的涵义以及使用它们的原因。
等级分级以连续的整数定义,从 1 开始。最小的整数(即 1)代表最高等级分级。整数值越大,表明等级分级越低。例如,如果将网络分为三个等级分级,应该为主要道路指定值 1、为次要道路指定值 2,并为三级道路指定值 3。主要道路可以包括省际高速公路,而三级道路可以包括居住区街道。
网络数据集中的等级通常用字段赋值器或字段表达式赋值器来指定。如果街道要素类具有值为 1、2 和 3 的道路类属性(等级),而这三个值分别表示省际公路、主干道和次干道,则只使用字段赋值器便可设定该等级属性。
通常会为等级属性指定三个、四个或五个等级分级,但也可以指定所需数量的分级,只要这些分级是由从 1 开始的连续整数表示即可。但是,应避免指定过多的等级分级,因为这会使某些边相对于等级中的其他边而言是断开的,从而导致求解网络分析图层时出现故障。
如果源要素类的某个属性划分的道路组数大于等级中所需的分级数,您可以使用字段表达式赋值器对这些组做进一步分类,从而获得所需的等级分级数。例如,假设街道要素类有一个名为 Func_Class 的整型字段,该字段具有以下六个道路类:
Func_Class |
街道类型 |
---|---|
1 |
省际公路 |
2 |
省际收费公路 |
3 |
国道 |
4 |
主要道路 |
5 |
地方街道 |
6 |
高速公路匝道 |
此外,假定您要按下表对 Func_Class 值进行分组,以创建三个等级分级。
等级分级 | Func_Class 值 |
---|---|
1 | 1(省际公路) 2(省际收费公路) 6(高速公路匝道) |
2 | 3(国道) 4(主干道) |
3 | 5(地方街道) |
为了针对这种情况建模,应将等级属性的赋值器更改为字段表达式赋值器。这样您就可以输入一个使用变量的小的预逻辑 VBScript 代码。在本例中,将创建变量 level 并将其设置为 3(本例中的最低等级分级)。设定以下条件:如果 Func_Class 是 1、2 或 6,则为 level 指定值 1。如果 Func_Class 是 3 或 4,则为 level 指定值 2。对于所有其他情况,该值保留为 3。在字段表达式赋值器的值文本框中,输入 level。
这样可以确保为 Func_Class 值为 1、2 或 6 的所有元素指定等级值 1;为 Func_Class 值为 3 或 4 的所有元素指定等级值 2;并为所有其他元素(即 Func_Class 值为 5 的元素)指定等级值 3。
在 ArcGIS 10 之前的版本中,等级范围 对话框用于将多个字段值恰好转换为三个等级分级。但是,目前将其与通用转弯延迟赋值器结合使用时,只是用来定义主要道路、次要道路和地方道路。这表示等级范围 对话框对网络数据集的等级属性不起任何作用,而只影响通用转弯延迟赋值器。
对等级属性使用通用转弯延迟赋值器时,必须将边划分为三类:地方道路、次要道路和主要道路。由于等级属性可指定任意数量的等级分级,因此使用等级范围 对话框可将指定的分级进一步划分为恰好三种道路类。这样便可基于道路类指定默认添加到转弯行进策略的成本。例如,可以为从次要道路转到地方道路的所有左转弯添加 10 秒延迟,为从地方道路转到其他地方道路的所有左转弯添加 3 秒延迟。将道路类与通用转弯延迟赋值器结合使用时,可以实现许多其他转弯组合。