<mx:Script>
<![CDATA[
[Bindable]private var stops:FeatureSet = new FeatureSet([]);
[Bindable]private var barriers:FeatureSet = new FeatureSet([]);
[Bindable] private var lastRoute:Graphic;
private function mapClickHandler(event:MapMouseEvent):void
{
if (selectedBtn == addStopsBtn)
{
var stop:Graphic = new Graphic(event.mapPoint, stopSymbol);
inputsLayer.add(stop);
stops.features.push(stop);
}
else
{
var barrier:Graphic = new Graphic(event.mapPoint, barrierSymbol);
inputsLayer.add(barrier);
barriers.features.push(barrier);
}
if (stops.features.length > 1)
{
routeTask.solve(routeParams);
}
}
private function solveCompleteHandler(event:RouteEvent):void
{
var routeResult:RouteResult = event.routeSolveResult.routeResults[0];
lastRoute = routeResult.route;
}
]]>
</mx:Script>
<esri:RouteTask id="routeTask"
concurrency="last" requestTimeout="30" showBusyCursor="true"
solveComplete="solveCompleteHandler(event)" url="http://tasks.arcgisonline.com/ArcGIS/rest/services/NetworkAnalysis/ESRI_Route_NA/NAServer/Route"/>
<esri:RouteParameters id="routeParams" stops="{stops}" barriers="{barriers}"/>
<esri:Map mapClick="mapClickHandler(event)">
<esri:GraphicsLayer graphicProvider="{lastRoute}" symbol="{routeSymbol}"/>
<esri:GraphicsLayer id="inputsLayer"/>
</esri:Map>
在这个例子中,每次在地图上点击会添加一个停靠点或路障点,每次点击后都会调用RouteTask进行计算,计算的条件就是前面在地图上点击添加的停靠点及路障点;当然,由于设置了concurrency属性,因此只有最后一次调用可以返回结果。在这里顺便说一下concurrency属性,其实前面的那些功能类也都有这个属性,它是BaseTask基类的一个属性,它指示的是该功能是否允许多次调用,你可以选择多次调用、单次调用或者取消前面的调用仅执行最后一次调用。
下面让我们看一下路径分析的结果:
图 20 RouteTask的使用