RouteTask执行最短路径计算时“无法完成 操作”问题分析解决
2013-12-31 16:25
579 查看
当我们使用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”字段,如没有也可以指定其它字段,下图所示。
叠加网络分析路径图层后,重新发布服务
重新发布服务后,在程序中再次测试,最短路径分析功能已能成功进行
核心代码如下:
//地图点击取点
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”字段,如没有也可以指定其它字段,下图所示。
叠加网络分析路径图层后,重新发布服务
重新发布服务后,在程序中再次测试,最短路径分析功能已能成功进行
相关文章推荐
- 网盟
- seed-dvs6467 encodedecode实例 采集的图像质量很差,只有隔行显示,而且每帧图像不断的往下移动?
- oracle 自动建表
- Redis介绍以及安装(Linux)
- delphi中in的使用
- ios官方文档( dom数据解析用到方法)
- Json解析工具Jackson(使用注解) .
- Kernel中rfcomm层的初始化
- PHP基础语法
- 华为终端内部总结:盈利超额 将发放特别奖金
- logrotate简单实现各种日志自动轮转
- 红黑树(Red Black Tree)
- Oracle comment on的用法
- 前端网页性能最佳实践
- Activity com.hotel.ui.LoginActivity has leaked window com.android.internal.policy.impl.PhoneWindow
- SCVMM2012R2系统要求:虚拟主机
- js判断字符长度以及中英文数字等
- java参数传递中的对象传递
- 你知道怎么实现MBR和GPT之间的转换么?
- 堆栈窗口 QStackedWidget 测试