GP 服务示例:街道网络中的最短路径

复杂性:中级 数据要求:ArcGIS 教程数据安装程序 数据路径: C:\ArcGIS\ArcTutor\GP Service Examples\ShortestRoute 目标: 创作、发布和使用查找街道网络中最短路径然后生成行驶方向的地理处理服务。

文件夹

ShortestRoute

目的

在街道网络中的给定点之间创建最短路径,然后在文本或 HTML 文件中生成行驶方向。

服务

  • SanFranciscoBaseMap(地图服务)
  • ShortestRouteService(地理处理服务)

地理处理任务

  • Calculate Shortest Route and Text Directions
  • Calculate Shortest Route and HTML Directions

输入

两个或两个以上经过用户数字化的点。

输出

  • 用户指定的点之间的最短路径(基于行驶时间)。
  • 包含行驶方向的 HTML 文件或文本文件(取决于使用哪种任务)。

数据

使用 ToolData 文件夹中提供的旧金山地区的街道网络数据集。

扩展模块

Network Analyst

注释

  • 演示如何在每次执行任务时重复使用现有 Route 网络分析图层。
  • Calculate Shortest Route and HTML Directions 任务 - 如何使用脚本工具中的外部 Python 库将行驶方向从 XML 格式转换为 HTML 格式。

关于本示例

对应的文件夹

C:\arcgis\ArcTutor\GP Service Examples\ShortestRoute 包含已完成的模型、脚本工具和数据。

关于本示例

本示例中创建的 ShortestRouteService 可显示出如何发布用于计算街道网络中用户定义的点之间最短路径的地理处理任务,以及如何生成含有行驶方向的文件。Calculate Shortest Route and Text Directions 任务可以在文本文件中生成行驶方向,而 Calculate Shortest Route and HTML Directions 任务可以在 HTML 文件中生成行驶方向。这两个任务均可将最短路径输出为要素集。

Calculate Shortest Route and Text Directions 任务的输出示例
Calculate Shortest Route and Text Directions 任务的输出示例

数据

本示例的数据来自 C:\arcgis\ArcTutor\GP Service Examples\ShortestRoute

ShortestRoute 文件夹的内容
ShortestRoute 文件夹的内容

网络数据集

ToolData 文件夹中包含一个文件地理数据库 SanFrancisco.gdb。该地理数据库的 Transportation 要素数据集中包含网络数据集 Streets_ND。该网络数据集为旧金山地区的街道网络建立模型。它提供了一个网络属性 TravelTime,该属性指示穿过每条街段所需的行驶时间(以分钟为单位)。

底图

SanFranciscoBaseMap.mxd 中的底图图层有一个图层 Streets,如下图所示。该图层显示网络数据集的范围。这意味着,该任务只能在这一范围内确定最短路径。

显示网络数据集范围的旧金山底图
显示网络数据集范围的旧金山底图

SanFranciscoBaseMap.mxd 将作为地图服务发布。

工具箱和地图文档

该地理处理服务的工具箱和源地图文档分别为 ShortestRouteServiceShortestRouteService.mxdShortestRouteService 包含两个模型和一个脚本工具(Convert directions to HTML)。该脚本工具将在 Calculate Shortest Route and HTML Directions 模型中使用。ShortestRouteService.mxd 包含两个源数据图层 Streets_ND(网络数据集)和 Route(网络分析图层)。

模型

模型概览

Calculate Shortest Route and Text Directions 模型如下图所示。一个输入参数 Input Stops 是点。各停靠点将按照数字化后的顺序显示在最短路径中。在该模型中,经过用户数字化的各点将作为停靠点添加到现有 Route 网络分析图层中,并通过执行求解来确定最短路径,最后生成行驶方向并将其写入文本文件。

Calculate Shortest Route and Text Directions 模型

使用现有网络分析图层

DriveTimePolygonsService 示例中创建了网络分析图层,而在本模型中却并未创建。相反,使用的是现有路径图层 Route。(该图层已通过创建路径分析图层工具创建。)由于路径图层的分析属性(如阻抗属性)均未显示为模型参数,因此可使用现有图层。而在 DriveTimePolygonsService 示例中,默认中断值(服务区图层的分析属性)被显示为模型参数,因此要求创建服务区图层工具作为建模流程的一部分。

请注意,如果要将任一路径分析属性(如阻抗属性)显示为模型参数,则创建路径分析图层工具必须用作模型中处理过程的第一步。

创建作为模型中输入变量的 Route 图层的方法是,先将 Streets_ND 网络数据集添加到 ShortestRouteService.mxd,然后使用创建路径分析图层工具。在本例中,创建路径分析图层工具使用了下列参数。此表中未提及的参数将使用默认值。

参数

输入分析网络

Streets_ND

输出图层名称

Route

阻抗属性

TravelTime

累加器

TravelTime、Meters

U 形转弯策略

ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY

创建路径分析图层工具结合使用的参数值
创建路径图层
创建路径图层

建模流程

添加位置工具会将经过用户数字化的点作为停靠点添加到路径图层。该工具的 Input Locations 参数将通过模型参数 Input Stops 来指定。该参数的数据类型为要素集。要素集的方案和符号系统派生自 ToolData 文件夹中的 InputStops.lyr 文件。

Input Stops 要素集的方案中包含文本字段 Name。该字段可在生成行驶方向时提供停靠点的名称,具体方法是将名称属性映射到字段映射中的 name 字段,如下图所示。如果用户未指定 name 字段的值,则停靠点的名称将使用默认值 Location 1、Location 2,依此类推。

由于运行的每个模型都使用该路径图层,因此添加新停靠点之前需要移除所有现有停靠点。要删除现有停靠点,请取消选中追加到现有位置选项,如下图所示。

添加停靠点
添加停靠点

求解工具可根据 TravelTime 网络属性以及 Route 图层中指定的其他选项来计算最短路径。计算得出的路径将写入输出路径图层中的 Routes 子图层。

对于 ArcGIS Server 客户端来说,网络分析图层(如 Route 图层)不是受支持的输出参数数据类型。因此,需要使用选择数据工具得到 Route 图层中的 Routes 子图层。

方向工具用于生成行驶方向并将其输出到文本文件。包含行驶方向的输出文本文件将通过 %scratchworkspace% 行内变量在服务器上的作业目录中创建。派生自求解工具的 SolveSucceeded 变量可用作方向工具的前提条件变量。这意味着仅当求解工具可以在输入点之间找到一条路径时才生成方向文件。

生成行驶方向
生成行驶方向

工具图层

Calculate Shortest Route and Text Directions 模型拖动到 ArcMap 内容列表中即可创建 Calculate Shortest Route and Text Directions 工具图层。由于模型会更新现有 Route 图层,因此工具图层的输出便可从内容列表中 Route 图层的 Routes 子图层中获取符号系统。

工具图层的符号系统
工具图层的符号系统

发布

SanFranciscoBaseMap.mxd 将作为地图服务发布。ShortestRouteService.mxd 将作为不含任何结果地图服务的地理处理服务发布,具体操作如下所述:

  1. 目录 窗口中,右键单击 SanFranciscoBaseMap.mxd,然后单击发布到 ArcGIS Server
  2. 接受所有默认设置。
  3. 目录 窗口中,导航到 GIS 服务器节点下的服务器管理连接,右键单击,然后选择添加新服务。将服务命名为 ShortestRouteService,然后选择地理处理服务作为服务类型。
  4. 单击下一步
  5. 在下一个面板中,选择同步作为执行类型。对于地理处理服务所显示的工具存储于选项,选中地图,然后将地图文档指定为 ShortestRouteService.mxd。由于要测试服务,因此请选中显示消息
    发布 ShortestRouteService
    发布 ShortestRouteService
  6. 单击下一步。此后,便可接受向导提供的默认值并创建服务。

使用

  1. 以空白文档启动 ArcMap。
  2. 通过目录 窗口创建与 ArcGIS Server 的用户连接(如果不存在此类连接)。
  3. SanFranciscoBaseMap 地图服务添加到 ArcMap 内容列表。
  4. 目录 窗口中的 GIS 服务器用户连接节点下,展开 ShortestRouteService 工具箱,然后打开 Calculate Shortest Route and Text Directions 工具。下图显示了执行以上步骤后的结果:
    ArcMap 会话中的 Shortest Route and Text Directions 任务
  5. 添加两个或更多的点以创建停靠点。指定每个停靠点的名称(可选),然后单击确定运行任务。

    完成任务后,内容列表中将包含 Shortest Route 输出图层,如下图所示。输入停靠点并没有从任务中输出,而是会添加到结果 窗口内容列表中的输入节点下。

    任务结果
    任务结果
  6. 包含方向的文本文件将从服务器上的作业目录中复制到当前 ArcMap 会话的临时工作空间。在结果 窗口中双击含有方向的文本文件便可查看该文件。
    查看方向文件
    查看方向文件

生成 HTML 方向

Calculate Shortest Route and Text Directions 模型中使用的方向工具可生成文本格式或 XML 格式的方向。通过 Python 脚本应用样式表可以将 XML 格式的方向转换为格式良好的 HTML 文件。ShortestRoute 文件夹内的 Scripts 文件夹中的脚本 ApplyStyleSheet.py 可用于将方向文件的格式从 XML 转换为 HTML。scripts 文件夹还含有样式表文件 Dir2WebDocumentNoMaps.xsl,用于指定 HTML 文件的格式。

Scripts 文件夹的内容
Scripts 文件夹的内容

安装外部 Python 库

ApplyStyleSheet.py 脚本需要使用外部 Python 库 libxml2。ArcGIS 不附带该库,并且 ESRI 也不支持该库。它属于外部的第三方软件。您需要下载并在 ArcGIS Server SOC 计算机上安装此库。导航至 http://xmlsoft.org/sources/win32/python/,下载 Python 2.6 的最新 libxml2 安装程序(例如,libxml2-python-2.7.4.win32-py2.6.exe - 更早的版本可能不适用)。下载完成后,双击可执行文件安装此库。

创建脚本工具

要在模型中使用 ApplyStyleSheet.py 脚本,需要将该脚本作为名为 Convert Directions to HTML 的脚本工具添加到 ShortestRouteService 工具箱中。该脚本工具将样式表文件和 XML 文件作为输入从而生成 HTML 输出文件。

添加脚本工具
添加脚本工具

将脚本工具添加到模型

Calculate Shortest Route and Text Directions 模型可重命名并另保存为 Calculate Shortest Route and HTML Directions 以便添加 Convert Directions to HTML 脚本工具。在该模型中,方向工具的输出文件类型参数将更改为 XML。该 XML 文件和 Dir2WebDocumentNoMaps.xsl 文件将用作脚本工具的输入变量。输出 HTML 文件将通过 %scratchworkspace% 行内变量写入服务器上的作业目录。

Calculate Shortest Route and HTML Directions 模型

发布和使用

Calculate Shortest Route and HTML Directions 模型可发布为之前创建的 ShortestRouteService 地理处理服务内的新任务,如下所示:

  1. Calculate Shortest Route and HTML Directions 模型从目录 窗口拖动到 ArcMap 内容列表中,便可在 ShortestRouteService.mxd 中创建 Calculate Shortest Route and HTML Directions 工具图层。
  2. 保存 ShortestRouteService.mxd。
  3. 目录 窗口中,停止和启动 ShortestRouteService 地理处理服务。

ShortestRouteService 服务将立即拥有第二项任务,名为 Calculate Shortest Route and HTML Directions。此任务与 Calculate Shortest Route and Text Directions 任务类似,但生成的是 HTML 格式的方向。

HTML 格式的方向
HTML 格式的方向

相关主题


3/7/2012