需要 Network Analyst 许可。
网络中定义的每个属性都必须具有与参与网络的每个源相对应的值。赋值器为每个源的属性指定值。在 ARC/INFO 和 ArcView GIS(ArcGIS 的前身)中,属性值由 shapefile 或 coverage 中的字段指定。在 ArcGIS Desktop 中,字段赋值器为网络源字段的网络属性赋值。此外,ArcGIS Desktop 还提供其他类型的可用赋值器,例如常量、字段表达式、函数和脚本赋值器。
赋值器介绍如下。
赋值器 | 说明 |
---|---|
字段赋值器 | 为网络属性指定值的最常见方式就是识别单个字段,该字段用于在网络数据集构建时计算网络属性。例如,当属性值描述测量(如用米表示的每个路段的长度)时,可以使用字段赋值器。 |
字段表达式赋值器 | 字段赋值器经过修改可以使用字段表达式作为值来代替单个字段。在此情况下,可以在字段赋值器 对话框中使用 VBScript 或 Python 来构建表达式。例如,如果网络属性的单位是米,而源数据的单位是英尺,可以创建一个表达式以在构建网络数据集时将英尺转换为米。 |
常量赋值器 | 可以为属性指定一个常数值。该值可以是表示成本、描述符和等级等属性的数字 (0, 1, 2),也可以是表示约束属性的“使用约束条件”或“忽略约束条件”的布尔数据类型。 |
函数赋值器 | 函数赋值器可通过对另一属性值、参数值或常量执行简单数学运算或逻辑比较来计算属性值。对于数值属性类型,可以通过乘以、除以、加上或减去另一个网络属性、常量或参数值来得到该值。对于布尔属性类型,其值可以通过将另一属性值与一个参数值或常量比较的表达式获得,例如:MaxHeight < VehicleHeight。 ArcGIS Desktop 10.7 版本中新增了 + 和 - 运算符。赋值器在旧版本的软件中会产生错误。 |
通用转弯延迟赋值器 | 通用转弯延迟赋值器用于为两个边元素之间的过渡指定默认成本值。该成本取决于两条边之间的偏转角,以及所遍历的各条边的道路类(主要道路、次要道路或地方道路)。您可以将等级范围对话框和等级属性结合使用来指定道路类。例如,可以使用通用转弯延迟赋值器进行如下设定:由偏转角确定的所有左转弯在从地方道路左转到次要道路时所用的时间大于从地方道路左转到其他地方道路的时间。还可以指定增加其他过渡的成本,例如,在两条次要道路的交叉路口处继续直行时,增加 10 秒的延迟时间。 |
脚本赋值器 | 可根据 VBScript 或 Python 脚本的执行结果指定属性。这为构建复杂属性模型提供了方法。不同于其他赋值器,脚本赋值器不会在构建网络时指定值。相反,只有在特定的网络分析需要使用某属性时(可能发生在求解时),它才会为该属性指定值。如果某个属性的值不断变化,使用脚本赋值器可以确保每个网络分析的属性都得到更新。 |
边流量赋值器 | 边流量赋值器专用于流量数据。该类赋值器可通过历史数据或实时数据为某一天的特定时刻和一周中的某一天提供行驶时间。它们包含回退成本属性,可以在一天中的特定时刻的行驶时间不可用时提供工作日及周末的行驶时间。边流量赋值器还具有时间中立成本属性,当路径分析中的排序停止或访问车辆配送时,Network Analyst 参考该属性。 如果描述符属性的名称与使用边流量赋值器的成本属性(其后面为速度限制)相同(例如,名为 TravelTime 的成本属性具有名为 TravelTime Speed Limit 的相关描述符属性),则成本属性的边流量赋值器将会返回受限于描述符属性中指定的速度的行驶时间。这在对低于常规交通流量速度限制的缓慢行驶车辆的速度限制进行建模时非常有用。 |
每个交汇点源和转弯源都可以有一个赋值器。每个边源可以有两个赋值器 - 边的每个数字化方向各有一个。
可以为边、交汇点和转弯指定默认赋值器。如果没有为特定的源指定明确的赋值器,则该源的值由默认赋值器指定。
以下提供了指定赋值器的常规工作流:
- 选择必须指定赋值器的源。
- 选择赋值器类型,如字段、常量、函数或脚本。
- 为网络属性指定值。
如果值从一个字段获取,可以在下拉菜单中选择该字段。如果值需要按照字段表达式计算,可以将赋值器类型设置为字段并按键盘上的 F12 调出字段赋值器 对话框。另外,右键单击赋值器 对话框上的源并从值菜单中选择属性也可以打开字段赋值器 对话框。
赋值器示例
为成本属性指定值
下图中的 DriveTime 网络属性为 Streets 源要素类使用了字段赋值器。这在类型列中指明。值列显示 FT_Minutes 字段为 Streets 源的“自-至”方向提供的网络属性值。同样,街道源“至-自”方向的值也由 TF_Minutes 字段决定。
在此例中,网络中的其他边源是过渡边,没有行驶时间。因此,可以为其指定常数值 -1,或常数值零更好,并指定禁止汽车和其他街道车辆的约束属性。

此外,成本属性也可以使用函数赋值器通过另一个成本属性获得。例如,对慢速车辆行驶时间建模的属性可以由函数赋值器引用对常速车辆行驶时间建模的属性乘以减速系数获得。

为约束条件指定值
约束属性为布尔数据类型。由于源元素可使用或忽略关联的约束条件,因此可为其指定常数值使用约束条件或忽略约束条件。

此外,约束属性也可以使用函数赋值器通过将另一个属性与一个参数值比较获得。例如,对车辆高度限制建模的属性可以使用函数赋值器将道路的高度限制与车辆实际高度(存储在一个属性参数中)进行比较后获得。当该表达式计算结果为真时,该道路将使用约束条件;当该表达式计算结果为假时,则忽略约束条件。这项规则唯一例外的是,任何时候任意一个运算对象(MaxHeight 或 Vehicle Height)的值为零时,表达式的计算结果总为假。

约束属性也可以通过源要素类中的字段指定。例如,可以使用字段表达式赋值器生成布尔型结果 - 如果表达式为真,元素将使用约束条件,否则元素将忽略约束条件。
创建网络数据集后,ArcGIS Network Analyst extension 会搜索所有源来查找常用字段,如“单向”字段。如果在任意源内找到“单向”字段,都会创建“单向”网络属性并根据字段表达式为相关源指定值。
以下是单向约束属性的 VBScript 表达式的两个屏幕截图。街道的每个数字化方向都有一个赋值器和表达式。
这些表达式根据“单向”字段内的文本值确定所允许的行驶方向:
- FT 或 F = 仅允许沿线要素的数字化方向行驶(“自-至”方向)。
- TF 或 T = 仅允许沿与线要素数字化方向相反的方向行驶(“至-自”方向)。
- N = 在这两个方向都不允许行驶。
- 其他任意值 = 在这两个方向都允许行驶。
“约束条件用法”参数
约束属性始终具有一个名为“约束条件用法”的关联参数,该参数决定是禁止、仅避免还是甚至首选使用约束条件的元素。在大多数情况下,“约束条件用法”设置为“禁止”,但也有几种情况可以进行其他选择。
分配等级
通过为网络数据集分配等级,可以将边分为不同的等级分级,进而减少求解时间。但应记住,等级求解的结果可能不如非等级求解的结果理想。建议您另外阅读关于使用等级进行网络分析,以便更好地理解等级的涵义以及使用它们的原因。
等级分级以连续的整数定义,从 1 开始。最小的整数(即 1)代表最高等级分级。整数值越大,表明等级分级越低。例如,如果将网络分为三个等级分级,应该为主要道路指定值 1、为次要道路指定值 2,并为三级道路指定值 3。主要道路可以包括省际高速公路,而三级道路可以包括居住区街道。
网络数据集中的等级通常用字段赋值器或字段表达式赋值器来指定。如果 Streets 要素类具有值为 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 或 Python 脚本写入。下例使用的是 VBScript,创建了名为 level 的变量并将其设置为 3(本例中的最低等级分级)。接下来,设置以下条件:如果 unc_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。