车辆跨越时区时,时间(可能还有日期)将发生变化。 如果未在跨越多个时区的网络数据集上配置时区属性,则分析中的时间值可能会导致混乱和不准确。 您可向网络数据集添加时区属性对时区进行建模。
本主题解释了必须在网络数据集中配置时区的原因,并介绍了配置时区属性的方法。
当需要时区属性时
不是每个网络数据集都需要时区属性,但在某些情况下是必要的:
时区和网络分析
时区以多种方式在网络分析中发挥作用。
时间相关的分析设置的解释
网络分析可以选择包括多个与时间相关的设置。 例如,时间窗可用于对预约时间或设施点开放的时间进行建模。 开始时间可用于对旅客开始旅程的时间进行建模。 分析输出字段显示到达和出发时间。
可通过配置时区属性输入和解释这些时间属性,特别是对于跨越多个时区的网络数据集。 否则,时间设置的正确解释可能不明确,值可能有误,或者分析人员可能需要将所有值转换为 UTC。
例如,假定您添加了两个停靠点(一个位于东部时区,另一个位于中部时区),并且希望将它们的时间窗都设置为当地时间上午 8:00 至 9:00 间。 如果未配置时区,您必须将两个时间窗转换为 UTC 并调整分析设置以指示时间应按 UTC 进行解释。
如果在网络数据集上配置了时区属性,则输入的时间会自动使用基础边的当地时间进行解释,而且 Network Analyst 会从内部管理时间的转换。
行驶时间计算的准确性
对于配置了流量的网络数据集,遍历网络中的边的行驶时间取决于遍历该边时的流量状况。 如果由于时区配置不正确而导致时间不正确,则可能会计算出错误的行驶时间,并且分析结果可能不准确。
例如,我们假定在上午 8:38 时,路径分析遍历了两条相邻边,即从山区时区的一条边开始,然后沿太平洋时区的另一条边继续。 如果未配置时区属性,网络数据集将忽略时差并仅根据一个时区检索边的行驶时间。 这意味着将不能得到太平洋时区上午 7:38 时边的行驶时间,而是可能得到上午 8:38 或当天其他时间的行驶时间,这将取决于默认的时区。
但是,如果正确配置了时区,则山区时区中边的行驶时间会按当地时间上午 8:38 进行计算,而太平洋时区中边的成本会按当地时间上午 7:38 正确计算。 因此,可以保持在启用流量功能的网络数据集中行驶时间的准确性。
行驶方向
当网络具有时区属性时,行驶方向会提醒驾驶员其路线上的时区变化。
网络数据集如何对时区进行建模
使用时区属性在网络数据集中对时区进行建模,该属性使用赋值器将时区分配给每个网络边,赋值器的配置方式与成本和限制属性类似。 对于完全包含在一个时区内的网络,一个常量赋值器足以为所有边设置时区。 如果网络跨越多个时区,则可以使用字段脚本赋值器来引用每个边源中标识边的时区的字段。
可供网络使用的时区列表在包含网络的地理数据库的时区表中定义。 时区表必须有一个名为 MSTimeZone 的文本字段,并且该表中的每一行必须包含一个与 Windows 操作系统识别的官方时区 ID 之一相匹配的字符串值。
时区相对于 UTC 具有时态偏移。 本地规则指定了 UTC 偏移量、是否遵守夏令时,以及如果遵守,夏令时的偏移量和日期范围。 这些规则可能会经常变化;追踪所有当前和过去的规则是一项艰巨的任务。 幸运的是,Windows 操作系统通过 Windows 更新将世界上任何时区的变化传递到您的计算机,从而使这些规则保持最新。 时区和时区的规则存储在 Windows 注册表中。 ArcGIS Network Analyst 扩展模块 会从 Windows 注册表中检索时区的 UTC 偏移和夏令时规则。
时区属性在交通流量属性页面的时区选项卡上的网络数据集属性对话框中配置:
可配置以下属性:
- 添加时区属性 - 选中此复选框可启用或禁用网络数据集的时区支持。
- 时区表 - 下拉列表中包含时区表,时区表位于网络数据集的工作空间内。
- 赋值器 - 网络中定义的每个属性都必须提供与参与网络的每个源和方向(沿边方向和与边相反方向)相对应的值。 赋值器为每个源和行驶方向的属性指定值,每个元素默认的赋值器用于没有为属性分配赋值器的源和方向。
配置时区属性
若要使用时区执行分析,必须在网络数据集上配置时区属性。 根据网络中的数据是包含在单个时区还是跨越多个时区,所需的配置有所不同。
配置跨时区网络的时区属性
当网络包含不同时区的街道时,每个边源中的字段可用于指示每个要素的时区。 时区属性应使用引用该字段的字段脚本赋值器进行配置。
下面的概念图表显示了配置的基本工作原理。 边源要素类上名为 TimeZoneID 的字段可指示要素所在的时区。 TimeZoneID 字段值是时区表的外键,时区表与网络数据集位于同一工作空间内,并存储了与网络相关的时区列表。 时区表中的 MSTimeZone 字段也是外键,但它是 Windows 注册表中的条目。 (将整数值视为标识符和外键更普遍;不过,注册表则使用文本来识别时区。)注册表可向 Network Analyst 提供有关夏令时的 UTC 偏移和日期范围的信息。
- 在网络数据集的工作空间中创建时区表。
表可以是任何名称,但它必须有一个名为 MSTimeZone 的文本字段。
通过右键单击地理数据库并选择新建 > 表或使用创建表地理处理工具来创建表。
- 为网络所需的每个时区在表中添加行,并将每行的 MSTimeZone 字段值设置为 Windows 注册表可识别的时区 ID。
要生成 Windows 注册表识别的时区 ID 列表,请在 Windows 命令提示符中输入 tzutil /l。 ID 是为每个时区返回的第二个值。
- 将编辑内容保存到表。
- 在网络使用的每个边源要素类中创建短整型字段,并使用时区表中表示要素正确时区的行的对象 ID 值填充该字段的值。
- 如有必要,将编辑内容保存到要素类。
- 网络数据集属性对话框上的访问网络属性。
- 单击时区选项卡。
- 选中添加时区属性复选框。
- 从时区表下拉列表中,选择要使用的时区表。
- 在赋值器部分中,设置类型列以对网络中边源的沿方向使用字段脚本赋值器。 将边源的相反方向设置为相同。
- 在上一步中设置为字段脚本的行的赋值器部分的值列中,将值设置为边源中指示要素时区的字段名称。 例如,如果源要素类使用名为 TimeZoneID 的字段引用时区表中的正确行,则可通过将值设置为 !TimeZoneID! 将赋值器配置为使用此字段。
- 单击确定。
时区属性配置随即完成并保存到网络数据集。
- 构建网络数据集。
网络现在即可使用。
为仅在一个时区的网络配置时区属性
当网络中的道路都在单个时区内时,可以使用常量赋值器来配置时区属性,该常量赋值器对所有网络边的时区进行硬编码。 由于所有要素都位于同一时区,因此不需要边源要素类中的字段来标识每个要素的时区。 时区表是必需的,但它只需要一个条目,并将 MSTimeZone 字段值设置为与网络相关的单个时区的名称。 Windows 注册表可向 Network Analyst 提供有关该时区夏令时的 UTC 偏移和日期范围的信息。
- 在网络数据集的工作空间中创建时区表。
表可以是任何名称,但它必须有一个名为 MSTimeZone 的文本字段。
可以通过右键单击地理数据库并选择新建 > 表或使用创建表地理处理工具来创建表。
- 在表中添加行,并将 MSTimeZone 字段值设置为 Windows 注册表可识别的正确时区 ID。
要生成 Windows 注册表识别的时区 ID 列表,请在 Windows 命令提示符中输入 tzutil /l。 ID 是为每个时区返回的第二个值。
- 将编辑内容保存到表。
- 网络数据集属性对话框上的访问网络属性。
- 单击时区选项卡。
- 选中添加时区属性复选框。
- 从时区表下拉列表中,选择要使用的时区表。
- 在赋值器部分中,确认源列中标注为 <Default> 的行在类型列中配置了常量赋值器,并且值列显示网络数据集所需时区的显示名称。 将网络中边源的沿方向设置为与默认值相同,并将边源的相反方向设置为相同。
由于时区表只有一行,网络数据集会自动选择这一行作为默认时区。
- 单击确定。
时区属性配置随即完成并保存到网络数据集。
- 构建网络数据集。
网络现在即可使用。