需要 Network Analyst 许可。
当车辆穿越一个时区时,它的当前时间(包括当前日期)会发生改变。如果未在横跨多个时区的网络数据集上配置时区属性,则分析中的当前时间值可能会发生混乱。而且,如果忽略了时区,启用流量的网络数据集可能会返回错误的行驶时间,而实时流量的网络数据集可能会渲染该错误时间的流量状况。为避免出现这些问题,可向网络数据集添加属性来控制时区。
本主题将解释在网络数据集上配置时区的重要性,并将介绍使用描述符网络属性来配置时区的方法。
时区与网络分析相关的原因
为了更好地理解在一个横跨多时区且启用了流量的网络数据集上设置时区属性的重要性,我们假定在上午 8:13 时,路径分析遍历了两条相邻边,即从东部时区的一条边开始,然后沿中部时区的另一条边继续。如果未配置时区属性,则网络数据集将忽略时差,并且只基于一个时区得到边的行驶时间。这意味着将不能得到中部时区上午 7:13 时边的行驶时间,相反,则可能得到上午 8:13 或当天其他时间的行驶时间,这取决于默认的时区。
但是,如果正确配置了时区,则东部时区中边的成本会按当地时间上午 8:13 进行计算,而中部时区中边的成本会按当地时间上午 7:13 正确计算。这样,就会保持启用流量的网络数据集中行驶时间的准确性。此外,方向可以呈现时区变化。
无论跨时区的网络数据集是否已启用流量,配置时区属性后,对当前时间属性(例如时间窗和到达或离开时间)的输入和解释都会变得更加容易,因为它们的时间值始终参考的是当地时间。例如,假定您添加了两个停靠点(一个位于东部时区,另一个位于中部时区),并且希望将它们的时间窗都设置为当地时间 8:00 a.m. 至 9:00 a.m.。如果未配置时区,则必须手动将一个或两个时间窗的值转换为默认时区。反之,如果在网络数据集上配置了时区属性,输入的时间会自动设置为基础边的当地时间,而且 Network Analyst 会自动控制时间的转换。
网络数据集控制时区的方式
时区相对于协调世界时间 (UTC) 会有一个时态偏移。当地规则指定了 UTC 偏移量;是否遵守夏令时;如果遵守,夏令时的偏移和日期范围。这些规则可能会经常变化;记住所有当前和过去的规则相当困难。幸运的是,Windows 操作系统的后续版本通过 Windows 更新可以为您的计算机提供世界上任意时区的变化,这样就解决了这个问题。时区和时区的规则存储在 Windows 注册表中。
ArcGIS Network Analyst extension 会从 Windows 注册表中检索时区的 UTC 偏移和夏令时规则。下面的概念图表显示了它的基本工作原理。
边源要素上的 TimeZoneID 字段可指示要素所在的时区。TimeZoneID 值是时区表的外键,时区表与网络数据集位于同一工作空间内,并存储了一个时区列表。时区表中的 MSTimeZone 字段也是一个外键,但它是 Windows 注册表中注册表项的外键。(将整数值视为标识符和外键更普遍;不过,注册表则使用文本来识别时区。) 注册表可向 Network Analyst 提供有关夏令时的 UTC 偏移和任意日期范围的信息。
如图所示,边源要素类上需要有时区表和 TimeZoneID 字段,才能在网络数据集中配置时区。完成这些设置后,即可创建时区网络属性。
创建时区表
可按照以下步骤手动创建时区表。对于以下这一序列步骤以及后续内容,假定您对 ArcGIS 中的表的创建和编辑都非常熟悉。
- 在网络数据集所在的工作空间中创建表文件,然后为其命名,例如 TimeZones。
如果此工作空间是一个地理数据库,则即使网络数据集需要位于更深的级别(即要素数据集)中,也需要在地理数据库级别创建表文件。
- 向表文件中添加一个文本属性,并将其命名为 MSTimeZone。
属性的长度需要与您添加到表中的最长时区的名称相符。到 2010 年 3 月,Windows 注册表中的最长时区名称包含 61 个字符。
- 根据需要,可再添加一个文本字段来描述时区。
有关添加此类描述性字段的好处的详细信息,请参阅下一步骤。
- 表文件创建后,您需要用时区名称填充 MSTimeZone 字段。
按照以下步骤在 Windows 注册表中手动查找这些值。
- 打开注册表编辑器。
在 Windows 7 或 Vista 中,单击开始,在开始搜索文本框中输入 regedit,然后按 Enter 键。
在 Windows XP 中,单击开始 > 运行打开运行对话框。在打开文本框中输入 regedit,然后按 Enter 键。
- 注册表中的项与文件夹很相似。展开以下项:HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > WindowsNT > CurrentVersion > Time Zones。
一长列子项会出现在 Time Zones 项中。列表中的每个项表示一个时区。在新时区表的 MSTimeZone 属性下输入的值必须与这些项名称的拼写完全匹配,求解时 Network Analyst 才可以在注册表中查找到它们。
要复制名称,可单击某时区项,然后按 F2 进入编辑模式。按 Ctrl+C 可将名称复制到剪贴板。按 Esc 可退出编辑模式。(如果想要以后粘贴名称,请按 Ctrl+V。)
在注册表编辑器中选择某项后,它的值会出现在注册表编辑器窗口的其他窗格中。这些值组合在一起可描述时区,而且 Network Analyst 可使用这些值确定合适的时间。虽然 Network Analyst 不使用 Display 值,但也可以使用该信息来查看该时区与 UTC 的时态偏移,以及有关时区使用地点的一些地理信息。
- 在时区表中为每个要在网络数据集中使用的时区创建一条记录。对于每条记录的 MSTimeZone 字段,输入或粘贴注册表编辑器中对应的时区名称。
例如,如果您的网络数据集包含连续的美国本土区域,则您的表中将包含五个 MSTimeZone 值,如下所示。(Display 字段可选。)
ObjectID MSTimeZone 显示 1
东部标准时间
(UTC-05:00)东部时间(美国和加拿大)
2
中部标准时间
(UTC-06:00)中部时间(美国和加拿大)
3
山区标准时间
(UTC-07:00)山地时间(美国和加拿大)
4
美国山区标准时间
(UTC-07:00) 亚利桑那
5
太平洋标准时间
(UTC-08:00)太平洋时间(美国和加拿大)
- 打开注册表编辑器。
此时,您的表中就会包含一个名称为 MSTimeZone 的字段。下一步是在每个边源要素与表中的正确时区之间建立关联性。
向边源添加 TimeZoneID 字段
每个边源要素需要与一个时区精确关联。
- 将名为 TimeZoneID 的整型字段添加到每个边源要素类中。虽然可以向此字段分配任意的名称,但仍建议使用 TimeZoneID。
- 计算边源要素的值。
TimeZoneID 值是外键,它可在要素与您刚刚创建的时区表中的记录之间建立关联性。因此,在上例中,ObjectID 5 表示太平洋标准时间,该时区中的所有边源要素的 TimeZoneID 值都应为 5。如果太平洋标准时间恰巧具有不同的 ObjectID 值,则需要用该值填充 TimeZoneID。
向网络数据集添加时区属性
以下步骤说明了在网络数据集上创建时区网络属性的方法。该属性可在边源要素类和时区表二者的 TimeZoneID 字段之间建立关系。
只要您在街道要素类上设有 TimeZoneID 字段并已正确配置时区表,新建网络数据集向导就将自动为您创建此属性。
- 在网络数据集属性对话框或新建网络数据集向导的属性选项卡上,单击添加。
打开添加新属性对话框。
- 输入属性的名称,例如 TimeZone。
- 从使用类型列表中选择描述符。
- 从数据类型列表中选择整型。
- 单击确定。
属性将添加到属性列表。
- 在工作空间中,右键单击新属性,单击关联时区表,然后单击时区表的名称。
中心有 T 字样的绿色圆出现在属性名称的左侧,表明它是时区属性。
- 双击时区属性名称可打开赋值器对话框。
- 对于每个边源,设置字段赋值器以从源要素类中读取 TimeZoneID 值。
在下例中,从“街道”源要素类的 TimeZoneID 字段中读取值的字段赋值器将被分配“自-至”和“至-自”两个方向。
- 单击确定。
赋值器对话框关闭。完成新建网络数据集向导或关闭网络数据集属性对话框之后,您可以构建网络数据集以添加新的时区字段。
跨越多个时区执行网络分析
如果网络位置有时间窗,您所输入的时间值为指定的本地时区,即网络位置的基础边要素的时区。