地理处理服务示例:街道网络中的最短路径
文件夹 |
ShortestRoute |
权限用途 |
显示在一天中给定时间段街道网络中的点之间的最快捷路径,然后在文本或 HTML 文件中生成行驶方向 |
服务 |
ShortestRouteService(地理处理服务) |
地理处理任务 |
计算最短路径 |
输入 |
|
输出 |
|
数据 |
使用 ToolData 文件夹中提供的旧金山地区的街道网络数据集 |
扩展模块 | |
注释 |
|
对应的文件夹
本教程的数据可从 ArcGIS.com 下载。提取数据至 C:\arcgis\ArcTutor。模型和一些对应的数据位于 C:\arcgis\ArcTutor\GP Service Examples\Network Analyst\ShortestRoute 下。此模型中网络分析图层引用的网络数据集存储在 SanFrancisco 地理数据库中,该数据库位于 C:\arcgis\ArcTutor\GP Service Examples\Network Analyst\ShortestRoute 下。
关于本示例
本示例中创建的 ShortestRouteService 可显示出如何发布用于计算街道网络中用户定义的点之间最短路径并生成含有行驶方向的文件的地理处理任务。
本示例中使用的旧金山网络数据集是用历史流量数据配置的,这可使查找一周中的某一天和某一天的特定时刻的最快捷行驶路径成为可能。这意味着您可查找从 A 点到 B 点在上午 8 点、10 点、下午 10 点 25 分等时间的最佳路径。路径形状可能不相同,预期路径持续时间也可能会改变,但无论如何都将计算给定开始时间的最快捷路径。
数据
本示例的网络数据集来自 C:\arcgis\ArcTutor\GP Service Examples\Network Analyst\SanFrancisco.gdb。地图文档、工具箱和其它补充性数据保存在 C:\arcgis\ArcTutor\GP Service Examples\Network Analyst\ShortestRoute。
网络数据集
Network Analyst 文件夹包含一个文件地理数据库 SanFrancisco.gdb。在 Transportation 要素数据集内是一个网络数据集 Streets_ND。该网络数据集为旧金山地区的街道网络建立模型。它提供了若干网络属性,其中包括 TravelTime 和 Meters,前者表示沿街段行驶所需时间(单位为分钟),后者表示各街段的长度。
工具箱和地图文档
地理处理服务的工具箱是 ShortestRouteService.tbx。
包括了地图文档 ShortestRouteService.mxd 以从这个工作流主题中删除次要步骤,例如增加图层、在研究区域周围调整地图范围等等。
ShortestRouteService 包含一个脚本工具和一个模型。脚本工具改变路径起始时间是模型计算最短路径的一部分。
模型
模型概览
模型计算最短路径如下图所示。
共有三个输入参数:开始时间是可选的,代表了离开第一个停靠点的时间;输入停靠点代表了要路由至的用户数字化的点;还有方向文件类型,它指明了是将方向输出为 HTML 还是文本格式。
模型使用一个脚本工具设置现有网络分析图层的路径开始时间,向路径分析图层增加停靠点,查找最佳路径,并输出路径形状和行驶方向。生成的路径按照停靠点数字化的顺序访问停靠点。
使用现有网络分析图层
网络分析图层不会在计算最短路径模型中创建,而是由模型假定图层已经存在。使用此设计,模型和从它发布的所有地理处理服务将重新使用网络分析图层,而非对每次求解创建一个新图层。这避免了很多不必要的处理。
模型引用的是一个脚本工具改变路径开始时间,此脚本工具使用 Python 和 Network Analyst模块 (arcpy.na) 访问现有路径网络分析图层并将其路径开始时间属性更改为用户输入的日期和时间。更具体地说,此脚本将网络分析图层传递到 arcpy.na.GetSolverProperties 中,它会返回一个 RouteSolverProperties 对象。网络分析图层的 timeOfDay 属性就通过这个对象设置。
尽管并不推荐,但也可以通过使用创建路径分析图层工具启动模型并将该工具的开始时间参数显示为模型参数来避免添加脚本工具。但是,当模型作为一项任务发布在服务器上时,对每个客户端请求都会创建一个新的网络分析图层。采用这种方法使您的服务器产生大量多余的处理。脚本工具和 Network Analyst 模块可让您编辑现有网络分析图层的属性,进而只有一个图层被服务创建和使用。
在 ArcGIS 10.1 之前,不存在 Network Analyst 模块。改变网络分析图层属性的唯一方法是使用几种图层制作地理处理工具(例如创建路径分析图层)之一在模型中创建新图层,并将工具的一个或多个分析参数显示为模型参数。
在计算最短路径模型中作为输入变量使用的 Route 图层的创建方法是,先将 Streets_ND 网络数据集添加到 ShortestRouteService.mxd,然后使用创建路径分析图层工具。在本例中,创建路径分析图层时设置了下列工具参数。此表中未提及的参数将使用默认值。
参数 |
值 |
输入分析网络 |
Streets_ND |
输出图层名称 |
路径 |
阻抗属性 |
TravelTime |
开始时间 | |
累加器 |
米;TravelTime |
U 形转弯策略 |
ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY |
建模流程
改变路径开始时间脚本工具通过对路径设置一个开始时间来让您利用网络数据集的动态行驶时间。如果您不设置时间和日期,求解程序会根据一个从通用行驶时间得到的网络成本属性得出最佳路径。除设置时间和日期之外,求解程序还使用一个基于历史行驶时间的成本属性,该属性易于得出更优的路径。
添加位置工具会将经过用户数字化的点作为停靠点添加到路径图层。该工具的 Input Locations 参数将通过模型参数 Input Stops 来指定。该参数的数据类型为要素集。要素集的方案和符号系统获取自 ToolData 文件夹中的 InputStops.lyr 文件。
Input Stops 要素集的方案中包含文本字段 Name。该字段可在生成行驶方向时提供停靠点的名称,具体方法是将名称属性映射到字段映射中的 name 字段,如下图所示。如果用户未指定 name 字段的值,则停靠点的名称将使用默认值 Location 1、Location 2,依此类推。
由于运行的每个模型都使用该路径图层,因此添加新停靠点之前需要移除所有现有停靠点。要删除现有停靠点,请取消选中追加到现有位置选项,如下图所示。
选中了排除网络的受限部分,这样当添加停靠点时,它们不会位于不能穿越的边上。这将防止求解时出现失败。
求解工具可根据 TravelTime 网络属性、开始时间设置以及路径图层中指定的其他选项来计算最短路径。计算得出的路径将写入输出路径图层中的 Routes 子图层。
对于 ArcGIS Server 客户端来说,网络分析图层(如 Route 图层)不是受支持的输出参数数据类型。因此,需要使用选择数据工具得到路径分析图层中的 Routes 子图层。
方向工具生成行驶方向并将其输出到文本、XML 或 HTML 文件中,具体取决于用户选择。但是,从 ArcGIS for Server 运行生成的任务时,会从列表中移除 XML 选项。发布服务时,通过取消选中方向文件类型下的服务编辑器 中的 XML 便可移除此选项。派生自求解工具的 SolveSucceeded 变量可用作方向工具的前提条件变量。这意味着仅当求解工具可以在输入点之间找到一条路径时才生成方向文件。
项目描述
通过记录地理处理模型的项目描述,您同时也记录了生成的服务及其参数,因为发布向导会将这些文本复制到服务的项目描述中。不论是描述或记录,这个服务都是必须的,同时也帮助用户了解如何成功与服务交互和查找最短路径。已经记录此示例的模型和脚本工具;如需查看文档,可以右键单击内容列表 窗口的地理处理模型并选择项目描述。
发布
地理处理服务按如下描述的方式发布。
- 打开 ShortestRouteService.mxd。教程数据的默认存储位置是 C:\arcgis\ArcTutor\GP Service Examples\Network Analyst\ShortestRoute。
- 运行“计算最短路径”地理处理模型。
- 在目录 窗口中,展开 ShortestRouteService.tbx 并双击计算最短路径模型。
- 在计算最短路径工具对话框中,单击 Stops 旁的标志并在地图上单击以添加停靠点。
- 单击确定以生成一条路径和行驶方向。
- 单击地理处理 > 结果以打开结果 窗口。
- 在结果 窗口中,展开当前会话。
- 右键单击 CalculateShortestRoute(随后是模型运行的时间和日期)并选择共享为 > 地理处理服务。
- 在共享为服务 对话框,单击下一步。
- 在下拉列表中选择带发布者功能的 ArcGIS Server 连接,或使用下拉列表右侧的按钮建立一个连接。
- 单击下一步。
- 选择将服务发布至根文件夹或指定其他文件夹,然后单击继续。
将弹出服务编辑器 对话框。对地理处理模型和脚本工具的项目描述的文本进行复制以描述服务。此文本显示在对话框的项目描述部分以及其紧靠上方的部分(行驶方向,开始时间等等)以供编辑。
- 因为此研究区域的路径分析是一个快速的过程,所以要单击参数选项卡并选中同步以使服务同步。如果您是为求解位置分配或 OD 成本矩阵问题而发布一项服务,请将此属性设置为异步并考虑增加客户端可使用服务的最长时间的值,该选项位于池化选项卡下。
- 请将消息级别更改为警告,这样运行任务时会出现错误或警告消息。
- 单击方向文件类型并取消选中 XML,就可移除行驶方向文件格式 XML 选项。
- 单击分析 可查看发布程序 窗口的所有警告或错误消息。
如果您未创建数据存储,就会收到数据将复制到服务器上的警告。
右键单击发布程序 窗口的任何其他错误消息以得到关于如何解决的帮助。
- 在服务编辑器 对话框上单击发布 。
会立即出现一个对话框,告知您 Streets_ND 将会复制到服务器中。如果是,请单击确定。服务成功发布后,会出现成功 对话框。
- 单击确定。
使用
- 打开一个空白地图文档并从教程数据 (C:/arcgis/ArcTutor/GP Service Examples/Network Analyst/SanFrancisco/Transportation/Streets) 中添加 Street 要素类。此外,您还可以从 ArcGIS Online 添加底图图层并移除 Street 要素图层。
- 通过目录 窗口创建与 ArcGIS Server 的用户连接(如果尚不存在此类连接)。
- 展开用户连接并展开 CalculateShortestRoute 服务。
- 双击打开 Calculate Shortest Route 任务。
- 至少添加两个点以创建停靠点位置。此外,您还可以对内容列表中出现的图层属性表的各个停靠点指定名称:CalculateShortestRoute::Stops。
- 指定路径离开首个停靠点的日期和时间。选择是以文本还是 HTML 格式输出行驶方向。单击确定以运行任务。
ArcGIS for Server 收到请求、求解分析,然后返回一个名为 Routes 的图层,并将行驶方向文件存储到您的临时目录中。您可以通过结果 窗口访问行驶方向。展开当前会话 > CalculateShortestRoute 并双击 Route Directions:RouteDirections。(您可以右键单击 Route Directions:RouteDirections 并选择复制位置以找出文件在您电脑上的保存位置。)