RouteTask执行最短路径计算时“无法完成 操作”问题分析解决

本文介绍使用ArcGIS Server API进行路径分析时遇到的问题及解决方案。重点在于正确配置网络数据集的方向指示选项,确保最短路径分析功能正常运行。

当我们使用ArcGISServer API,通过RouteTask来进行路径分析有时会遇到下面的错误

 

核心代码如下:

       //地图点击取点

       privatevoid myMap_MouseClick(object sender, Map.MouseEventArgs e)

       {

           try

           {

                if(!bAddPoint) return;

                SimpleMarkerSymbol pMarkerSym = newSimpleMarkerSymbol();

                SolidColorBrush ebrush = newSolidColorBrush(System.Windows.Media.Colors.Red);

                pMarkerSym.Color = ebrush;

                pMarkerSym.Size = 10;

                GraphicpGra = newGraphic();

                pGra.Geometry = e.MapPoint;

                pGra.Symbol = pMarkerSym;

                pGra.SetZIndex(1);

                GraphicsLayer graphicsLayer = myMap.Layers["MyGraphicsLayer"] asGraphicsLayer;

               graphicsLayer.Graphics.Add(pGra);

           }

           catch (Exception per)

           {

                MessageBox.Show(per.Message,提示, MessageBoxButton.OK);

           }

       }

privatevoid btn3_Click(objectsender, RoutedEventArgs e)

       {

           RouteTask routeTask = newRouteTask(routestr);

           routeTask.Token = “”;

           GraphicsLayer stopsGraphicsLayer = myMap.Layers["MyGraphicsLayer"] asGraphicsLayer;

           RouteParameters routeParameters = newRouteParameters()

           {

                Stops = stopsGraphicsLayer,

                ReturnDirections = true

           };

           routeTask.SolveCompleted += newEventHandler<RouteEventArgs>(routeTask_SolveCompleted);

           routeTask.Failed += newEventHandler<TaskFailedEventArgs>(routeTask_Failed);

           routeTask.SolveAsync(routeParameters);

       }

       void routeTask_Failed(objectsender, TaskFailedEventArgs e)

       {

           MessageBox.Show(e.Error.Message);

       }

       void routeTask_SolveCompleted(object sender, RouteEventArgs e)

       {

           try

           {

                // 获取路径并设置符号

                RouteResultrouteResult = e.RouteResults[0];

                GraphicsLayer graphicsLayer = myMap.Layers["MyGraphicsLayer"] asGraphicsLayer;

                SimpleLineSymbol pLineSym = newSimpleLineSymbol();

                SolidColorBrush ebrush = newSolidColorBrush(System.Windows.Media.Colors.Red);

                pLineSym.Color = ebrush;

                pLineSym.Style. = SimpleLineSymbol.LineStyle.DashDotDot;

                pLineSym.Width = 3;

                routeResult.Route.Symbol =pLineSym;

               graphicsLayer.Graphics.Add(routeResult.Route);

           }

           catch (Exception per)

           {

                MessageBox.Show(per.Message,提示, MessageBoxButton.OK);

           }

       }

从上面代码可以看出,也并没有考虑单行线等因素、功能执行过程也并不复杂,因此基本可以排除是程序的原因导致的上面问题出现;那么,很有可能是我们创建的道路网络数据集过程中的设置引起的。

下面我们来看看在生成网络数据集时的几个关键设置

当我们创建道路网络不需要考虑单行线、道路等级、转向、天桥底下通道等高级设置时,转弯和高程两项是否设置并不影响我们的最短路径分析功能执行。但是,方向指示选项必须设置。方向指示是有关如何穿过路径的流转说明,网络分析时为生成的任何路径创建指示;这是在执行最短路径分析功能时所必要的。

方向指示设置会自动关联上网络数据集要素源中的“NAME”字段,如没有也可以指定其它字段,下图所示。

 

叠加网络分析路径图层后,重新发布服务

 

重新发布服务后,在程序中再次测试,最短路径分析功能已能成功进行

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值