RouteTask執行最短路徑計算時“無法完成 操作”問題分析解決
當我們使用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,
}
}
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”欄位,如沒有也可以指定其它欄位,下圖所示。
疊加網路分析路徑圖層後,重新發布服務
重新發布服務後,在程式中再次測試,最短路徑分析功能已能成功進行