ArcGIS Runtime API for .NET——路径和方向
使用route服务,利用自己的route服务或存储在设备上的路线数据集,可以查找路径,方向,并在街道网络上执行高级分析。 可以解决网络问题,例如找到最近的紧急车辆或设施,确定位置周围的服务区域或为一组车辆提供服务。
ArcGIS Runtime路径应用程序可以执行以下操作:
(1)计算点对点和多站路径
(2)优化结果以找到最短或最快的路径
(3)找到两站之间的最佳顺序
(4)根据出行方式(驾车,骑自行车,步行等)创建路径
(5)避开禁区和机动车辆
(6)指定每个停靠站的到达和离开的时间窗口
(7)生成多种语言的行车路径
一.什么是routing?
routing路由是在街道网络中找到两个或多个站点之间的最佳路径的过程。 一个常见的用例是在两个站点之间找到一条从起点到目的地的路径。 路径规划考虑了街道网络中的许多不同属性,例如速度限制,车道数量和一天中的时间。 路线选择还可以合并实时数据,例如路况,事故,街道封闭以及其他出行限制。
除了上述路径规划外,ArcGIS Runtime还提供了用于通过街道网络进行分析的其他功能。 这包括执行诸如创建服务区域(例如,在特定行驶时间内找到客户)或定位最近的设施(例如,离事故最近的医院)之类的功能。
1.方向
如果需要,将在结果中返回每个路径的方向。 方向提供了行进路径的具体说明。 这些通常被称为“行进方向”,但根据出行方式的不同,可以描述步行或骑车前往目的地的路径。 根据服务配置,可以使用多种语言返回路径。 服务元数据中提供了支持的服务语言。
方向由策略组成。 每个策略都包含诸如方向文本之类的属性,该属性包含描述路径某段行驶的说明。 方向策略进一步细分为策略 消息,这些消息提供有关特定策略的详细信息。
如果服务支持,方向策略可以包括从等级到等级值,用来定义建筑物内部的楼层等内容。 例如,用户可能希望仅看到跨越多层的步行路径的一个楼层。
2.导航
导航API允许使用当前设备位置跟踪进度并在用户行进路径时提供导航说明(操作),从而进一步增强路径线规划体验。 可以将行车路线与设备的文本语音转换功能集成在一起,并在用户离开当前路线时自动重新计算一条新路径。
路线跟踪器对象利用当前设备位置和适当的路径规划结果提供以下功能:
(1)有关下一站,下一策略或整个路径的进度信息
(2)必要时的导航指南(例如,在进行机动时)
(3)如果设备位置偏离路径,则自动重新计算路径
二.路线规划如何工作
在线和本地路径规划都依赖于运输网络来模拟旅行。 这些网络是根据要素(线和点)创建的,这些要素代表道路,桥梁,隧道,自行车道,火车轨道和网络中的其他实体。 特征的几何相交有助于定义它们所代表的网络实体之间的连通性。 分析运输网络的连通性以及行驶阻力(例如,速度限制)和其他网络属性,以解决路径问题。
Network Analyst服务托管在ArcGIS Online中,或者可以在自己的ArcGIS服务器上发布。 这些服务为诸如移动和Web应用程序之类的客户端提供了REST API。 有关使用ArcGIS Enterprise发布服务的更多信息,请参见教程:发布网络分析服务。
可以使用ArcGIS Pro创建运输网络,并使用移动地图包文件(.mmpk),移动场景包文件(.mspk)或移动地理数据库文件将其部署到设备中。 用于本地运输网络的代码(直接存储在设备上)与使用routing服务的代码相同。
如果希望针对自己感兴趣的区域使用随时可用且定期更新的网络数据集(和定位器),则可以许可StreetMap Premium数据(用移动地图包格式)。 有关详细信息,请参阅添加StreetMap Premium数据。
1.路径任务
路径任务是异步执行的网络分析任务。 它返回结果,并提供有关路径的详细信息,该路径访问了运输网络中的两个或多个停靠点(位置)。 有时将此操作称为求解路线。
RouteTask引用本地交通网络数据集或在线服务。 如果使用已配置的RouteParameters求解路由并报告RouteResult。
var routeTask = await RouteTask.CreateAsync(new Uri("https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World"))
2.路径参数
路径任务参数指定应如何找到路径。 有许多参数可自定义确定路径的方式。 参数包括停靠点和障碍点。 其他参数包括行驶模式,是否对停车地图进行重新排序以找到最佳路线,在转弯方向上使用的单位(例如,英里或公里)等等。
要最初创建RouteParameters,请调用RouteTask.CreateDefaultParametersAsync()以检索为服务定义的默认路径参数。 然后,可以在执行RouteTask之前根据需要更改各个路径参数。 服务的默认参数通常支持该服务预期的最常见用例。 不同的服务可以具有不同的默认值。
var routeParameters = await routeTask.CreateDefaultParametersAsync();
var stops = new[] { originGraphic.Geometry, stopGraphic.Geometry, destinationGraphic.Geometry }.Select(g => new Stop((MapPoint)g));
routeParameters.SetStops(stops);
// Return driving directions in Spanish
routeParameters.ReturnDirections = true;
routeParameters.DirectionsLanguage = "es";
3.路径结果
查找路径返回的结果包含路径的集合。 每条路径均由折线几何图形表示,并具有诸如总长度和行驶时间之类的信息。 根据您配置路径参数的方式,结果可能还会包含障碍,停靠点和行车路径。 通常,路径,站点和路障在地图中显示为图形。 路线可以显示在应用程序的列表或其他UI元素中。
注意:
如果将RouteResult与RouteTracker一起使用,则它必须包括停靠点和路径。 要在导航时启用路径重新计算,还必须提供用于生成路径的RouteTask和RouteParameters。
var routeResult = await routeTask.SolveRouteAsync(routeParameters);
if (routeResult?.Routes?.FirstOrDefault() is Route route)
{
routeGraphic.Geometry = route.RouteGeometry;
Console.WriteLine(string.Join("\n", route.DirectionManeuvers.Select(maneuver => maneuver.DirectionText)));
}