使用 OD 成本矩阵计算起点与目的地之间的行驶时间

需要 Network Analyst 许可。

起点-目的地 (OD) 成本矩阵求解程序用于在网络中查找和测量从多个起始点到多个目的地的最小成本路径。 在街道网络上,系统会计算每对起点和目的地之间的最佳路径,并将行驶时间和距离作为属性存储在输出线中。 本教程中,您将使用该工具创建一个 OD 成本矩阵,展示患者到医院的行驶时间,并根据结果识别难以获得医院服务的患者。

注:
可以使用指定的教程网络数据集 ArcGIS Online 或使用涵盖分析输入数据地理的网络数据集发布的 ArcGIS Enterprise 路由服务作为网络数据源来完成本教程。 如果您使用 ArcGIS Online,则会消耗配额了解有关使用服务进行网络分析的更多信息

获取数据

本教程的数据可供下载。

  1. 请转至数据下载页面
  2. 单击下载按钮将文件保存到本地。
  3. 解压下载的文件。

创建地图

完成以下步骤以创建地图:

  1. 启动 ArcGIS Pro
  2. 通过单击地图模板创建一个新工程。 可以选择性地更改工程的名称和位置。

    随即出现具有地图的新工程。

将教程数据添加到工程中

网络数据集用于模拟道路系统。 其不仅包含道路的位置和属性,而且还包含有关道路如何彼此关联(例如,哪些道路相连、相连的道路之间允许或禁止哪些转弯)的信息及其他影响可能的行驶路线和行驶时间的信息。 OD 成本矩阵求解器会引用网络数据集来计算从起点到目的地的行驶时间或距离。

注:
如果您使用 ArcGIS Online 执行分析,则求解程序将参考存储在 ArcGIS Online 云中的高质量的世界级网络数据集并使用 ArcGIS Online 配额。 您还可以使用存储在本地计算机上的网络数据集或使用自己的网络数据集通过 ArcGIS Enterprise 发布路径服务,并通过企业门户配置服务以在 ArcGIS Pro 中使用。

在这组步骤中,将网络数据集添加到地图中。

  1. 目录窗格(默认情况下,位于应用程序的右侧)上,右键单击文件夹,然后选择添加文件夹连接 添加文件夹连接

    随即出现添加文件夹连接对话框。

  2. 浏览到您放置了教程数据的文件夹,双击 Network Analyst,然后单击教程以选择该文件夹。
  3. 单击确定

    随即创建一个与教程文件夹之间的连接。

  4. 接下来,将该文件夹中包含的一个网络数据集添加到地图中。

    注:

    如果您打算使用 ArcGIS OnlineArcGIS Enterprise 路由服务作为网络数据源,则无需将网络数据集添加到地图中。

  5. 目录窗格中,展开文件夹 > 教程 > SanFrancisco.gdb > Transportation
  6. 将带有网络数据集图标的 Streets_ND 拖动到地图上。

    该网络数据集将被添加到内容窗格以及地图中。

  7. 目录窗格中,浏览至 Tutorial > SanFrancisco.gdb > Analysis
  8. 右键单击 Patients 图层,选择添加到当前地图添加数据

    Warehouses 图层将被添加到内容窗格以及地图中。

  9. 右键单击 Hospitals 图层并选择添加至当前地图添加数据

    Hospitals 图层将被添加到内容窗格以及地图中。

创建患者与医院之间的 OD 成本矩阵

在此部分,您将进行 OD 成本矩阵分析,计算每个患者到每个医院的行驶时间。 您将创建 OD 成本矩阵图层,将患者作为起点、医院作为目的地,执行分析并查看结果。

创建 OD 成本矩阵图层

OD 成本矩阵分析图层将存储 OD 成本矩阵分析的所有输入、参数和结果。

  1. 分析选项卡的工作流组中,单击网络分析 > 起点-目的地成本矩阵 OD 成本矩阵

    OD 成本矩阵图层将被添加到内容窗格中。 它包括多个含有分析输入和输出的子图层。

    该 OD 成本矩阵图层使用旧金山网络数据集,因为在创建图层时,该数据集被设置为地图的网络数据源。

    注:
    要查看或更改将用于创建网络分析图层的网络数据源,可单击分析选项卡工作流组中的网络分析下拉箭头,然后在网络数据源下进行查看。 更改此设置不会影响已有的网络分析图层;只有在更新网络数据源后创建的新图层才会受影响。
  2. 内容窗格中,单击OD 成本矩阵以选择图层组。

    OD 成本矩阵图层选项卡随即出现。

  3. 单击 OD 成本矩阵图层选项卡以查看选项卡的控件。
    “OD 成本矩阵图层”选项卡

    您可以使用这些控件配置 OD 成本矩阵的相关设置。

    提示:

    只有当您在内容窗格中选择了 OD 成本矩阵图层或其子图层时,OD 成本矩阵图层选项卡才会显示。 另外,如果您有多个 OD 成本矩阵图层,则可以单独更改这些图层的设置,或选择多个图层来编辑所有选定图层(如果它们共享相同的网络数据源)的设置。

  4. OD 成本矩阵图层选项卡的出行设置组中,确保针对模式选择行驶时间

    该 OD 成本矩阵将计算起点和目的地之间的行驶时间。

    了解有关出行模式的详细信息

添加起始点

因为目标是计算患者到医院的行驶时间,您需要将 Patients 要素类用作 OD 成本矩阵图层的起点。 为此,您需要将 Patients 要素类的数据加载到 OD 成本矩阵图层的 Origins 子图层中。

  1. OD 成本矩阵图层选项卡的输入数据组中,单击导入起点 导入起点

    随即显示添加位置窗口。

  2. 请确保将输入网络分析图层设置为 OD 成本矩阵,并将子图层设置为起始点
  3. 单击输入位置下拉菜单并选择 Patients
  4. 字段映射中,选择名称属性,并将字段名称设置为 PatientID

    使用字段映射,可以将输入数据的字段值传输到网络分析图层的字段结构中。 通过将 PatientID 字段映射到 Origins 子图层的名称属性,后续可以使用 Name 字段的值将 OD 成本矩阵结果与原始数据进行关联。

    提示:

    Patients 要素类中的 PatientID 字段为文本类型,与 Origins 子图层中的 Name 字段类型一致。 因此,如果 Name 此字段中填入 PatientID 值,即可将 Origins 表的值关联回 Patients 要素类。 不过,如果数据中有不同数据类型的唯一标识符,由于数据类型不匹配,Origins Name 字段的关联将无法生效。

    您可以将输入要素类中的任意字段传输到网络分析图层的子图层,这在后续数据关联中通常很有用:

    1. 使用向分析图层添加字段工具,将字段添加到网络分析图层的子图层。
    2. 使用添加位置工具加载输入数据时,利用字段映射将输入数据中的字段映射到前一步添加的字段。
    3. 分析完成后,可以使用这些添加的字段进行数据关联或进一步分析。

  5. 保留其余参数的默认设置,然后单击确定按钮。

    10 位患者作为起点加载。

添加目的地

因为目标是计算患者到医院的行驶时间,您需要将 Hospitals 要素类用作 OD 成本矩阵图层的目的地。 为此,您需要将 Hospitals 要素类的数据加载到 OD 成本矩阵图层的 Destinations 子图层中。

  1. OD 成本矩阵图层选项卡的输入数据组中,单击导入目的地 导入目的地

    随即显示添加位置窗口。

  2. 请确保将输入网络分析图层设置为 OD 成本矩阵,并将子图层设置为目的地
  3. 单击输入位置下方的下拉菜单并选择 Hospitals
  4. 字段映射中,选择名称属性,并确认输入 Hospitals 要素类 NAME 字段已自动映射。

    使用字段映射,可以将输入数据的字段值传输到网络分析图层的字段结构中。

  5. 保留其余参数的默认设置,然后单击确定按钮。

    22 家医院作为目的地加载。

运行分析以创建 OD 成本矩阵

完成以下步骤以运行分析:

  1. OD 成本矩阵图层选项卡上,单击运行 运行

    求解过程完成后,地图中会显示起点-目的地线。 在每个起点和目的地之间将出现一条直线。 尽管这些线是直线,但接下来查看的行驶时间是根据实际道路网络计算得出的。

  2. 内容窗格中展开 OD 成本矩阵图层组(如尚未展开)。
  3. 右键单击 OD Cost Matrix:Lines 子图层,然后单击属性表

    Lines 子图层的属性表表示从每个患者到每家医院的起点 - 目的地成本矩阵。 表中的每一行代表一个起点和目的地对。 Total_TravelTime 字段显示了从每个起点到每个目的地的行驶时间(以分钟为单位),这是因为行驶时间出行模式使用了分钟为单位的 TravelTime 成本属性。 其他以 Total_ 开头的字段则是分析中未使用的其他网络数据集成本属性。

    了解关于 OD 成本矩阵图层方案的详细信息

  4. 关闭属性表。

确定哪些患者难以获得医院服务

OD 成本矩阵常用于研究到达目的地的可达性。 在本教程的下一部分,您将确定哪些患者无法在 10 分钟行驶时间内到达医院,并在 Patients 要素类中更新这些信息。 您将使用更新的设置重新求解 OD 成本矩阵图层,并通过关联将结果传输回 Patients 要素类。

更新分析设置并重新求解

之前的 OD 成本矩阵包含了每个患者到每家医院的行驶时间。 在本次分析中,您将更新 OD 成本矩阵图层的设置,使其仅限于找到每个患者在 10 分钟行驶时间内最近的医院。

  1. OD 成本矩阵图层选项卡的出行设置组中,将终点文本框设置为 1

    此设置可限制每个起点查找的终点数量。 OD 成本矩阵的结果将仅包含每位患者到最近医院的行驶时间,而不是到所有医院的行驶时间。

  2. OD 成本矩阵图层选项卡的出行设置组中,将中断文本框设置为 10

    此设置会过滤结果,仅保留患者到医院行驶时间小于或等于指定时间限制的记录。

    行驶时间出行模式使用 TravelTime 成本属性,其单位为分钟。 因此,中断值将视为以分钟为单位。

    了解有关成本属性的详细信息

  3. OD 成本矩阵图层选项卡上,单击运行 运行 重新执行分析。

    分析完成后,由于施加了时间限制,地图中的连线数量会减少。 同时,求解工具将显示警告消息,提示由于未找到两个起点的目的地,因此生成了部分解决方案。 这意味着,求解器在指定的 10 分钟行驶时间内未能找到这些患者可达的医院。

  4. 右键单击 OD Cost Matrix:Lines 子图层,然后单击属性表

    每个起点在表格中最多只会出现一条记录。 对于警告消息中提到的两个起点,由于未找到任何匹配的目的地,因此表格中没有对应的记录。

  5. 关闭属性表。

将 OD 成本矩阵结果关联回原始数据

分析的目标是确定哪些患者难以获得医院服务。 在此部分中,您将把 OD 成本矩阵分析的结果关联到 Patients 要素类,并计算一个字段,用于标记在 10 分钟内无法到达医院的患者。

    首先,将 Lines 子图层的数据关联到 Origins 子图层,将计算的行驶时间与每个起点关联起来。
  1. 右键单击 OD Cost Matrix:Origins 子图层,单击关联和关系 > 添加关联

    随即显示添加连接工具。

  2. 确保输入表参数设置为 Origins
  3. 输入字段参数设置为 ObjectID
  4. 关联表参数设置为 OD Cost Matrix\Lines
  5. 关联字段参数设置为 OriginID

    Lines 子图层中的 OriginID 字段与 Origins 子图层中的 ObjectID 字段匹配。 因此,它可以用于关联操作。

    添加关联工具对话框

  6. 保留其余参数的默认设置,然后单击确定按钮。

    Lines 子图层的数据已关联到 Origins 子图层。

  7. 右键单击 OD Cost Matrix:Origins 子图层,然后单击属性表

    Origins 子图层的属性表中,可以查看来自 Lines 子图层的关联数据。

  8. 找到 Total_TravelTime 字段并检查其值。

    对于两个起点,由于在 Lines 子图层中没有匹配的记录,因此这些字段的值为空。 这些患者就是在 10 分钟行驶时间内无法到达医院的对象。

  9. 关闭属性表。
  10. 接下来,将 Origins 子图层的数据关联到最初用于 OD 成本矩阵分析的 Patients 图层。 这样可以传输计算出的行驶时间,并识别无法在规定行驶时间内到达医院的患者。
  11. 右键单击 Patients 图层,单击关联和关系 > 添加关联

    随即显示添加连接工具。

  12. 确保输入表参数设置为 Patients
  13. 输入字段参数设置为 PatientID
  14. 关联表参数设置为 OD Cost Matrix\Origins
  15. 关联字段参数设置为 Name

    警告:
    关联的 Origins 表中会有两个 Name 字段。 一个来自 Origins 子图层,另一个来自 Lines 子图层。 选择来自 Origins 子图层的 Name 字段进行使用。 关联字段参数中的字段列表可能会在字段名称旁显示一些附加文本,用于指示字段的来源表。 这些文本是自动生成的 Origins 子图层的要素类名称,通常为 Origins 后面附加一些随机字符。

    由于之前已将 PatientID 字段映射到 Origins 子图层中的 Name 字段,因此这些值可用于关联操作。

    添加关联工具对话框

  16. 保留其余参数的默认设置,然后单击确定按钮。

    OD 成本矩阵的数据已关联到 Patients 图层。

  17. 最后,检查关联后的 Patients 图层,找出在 10 分钟行驶时间内无法到达医院的患者。
  18. 右键单击 Patients 图层,然后单击属性表

    Patients 属性表中,包含来自 OD 成本矩阵的 LinesOrigins 子图层的数据。

  19. 找到 Total_TravelTime 字段并检查其值。

    与之前将 Lines 子图层关联到 Origins 子图层后的情况一样,Patients 表中有两行的 Total_TravelTime 字段值为空,因为这些患者在 10 分钟内无法到达任何医院。 这些患者被标记为需要进一步关注的对象。

  20. 地图选项卡的选择组中,单击按属性选择按钮 按属性选择

    随即打开按属性选择图层工具。

  21. 输入行参数设置为 Patients(如有必要)。
  22. 配置表达式参数,选择 Total_TravelTime 字段为空的患者。

    按属性表达式选择控件

  23. 保留其余参数的默认设置,然后单击确定按钮。

    选择在 10 分钟内无法到达医院的患者。

  24. Patients 属性表中找到 PoorAccess 字段。
  25. 右键单击 PoorAccess 字段标题并单击计算字段

    计算字段工具随即打开。

  26. 确保输入表参数设置为 Patients,并将字段名称参数设置为 PoorAccess
  27. 表达式参数设置为计算 PoorAccess 字段值为 1,具体操作是在标记为 Patients.PoorAccess = 的文本框中输入 1

    “计算字段”对话框

  28. 保留其余参数的默认设置,然后单击确定按钮。

    所选行的 PoorAccess 字段值被设置为 1。

  29. 右键单击 Patients 图层,单击关联和关系 > 移除所有关联

    随即从 Patients 图层中移除关联数据。

  30. 至此,您已成功识别并标记出一部分难以获得医院服务的患者,并可基于这些信息进行进一步的分析和决策。