1. 程式人生 > >RouteTask執行最短路徑計算時“無法完成 操作”問題分析解決

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,

提示, 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”欄位,如沒有也可以指定其它欄位,下圖所示。

疊加網路分析路徑圖層後,重新發布服務

重新發布服務後,在程式中再次測試,最短路徑分析功能已能成功進行