目的:
1.ArcGIS API for Flex用GeoprocessingServices实现网络分析中的最短路径分析,本例子根据在地图上指定Stops点和Barriers点然后进行最短路径的分析并且把路径分析结果显示在地图中同时在右边的DataGrid中现在最短路径的行车方法
准备工作:
1.本来例子采用的数据是SanFrancisco数据(ArcTutor\GP Service Examples\DriveTimePolygons),在ArcGIS.Server.9.3发布一个叫SanFranciscoBasemap的Map Service(SanFranciscoBasemap.mxd)
2.在ArcGIS.Server.9.3发布一个叫GPRouteA的Geoprocessing Service,关于Geoprocessing模型的制作以及Geoprocessing Service的发布设置请参考http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#geoprocessing/guide_-1963186772.htm页面中的Example了,讲述的很详细了。
完成后的效果图:

ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
开始:
1.关于Geoprocessing Service的介绍见http://www.cnblogs.com/hll2008/archive/2008/11/07/1329177.html
2.启动Flex Builder3新建工程以及引入1.0正式版ArcGIS API for Flex library的开发包
3.新建GPRoute.mxml页面,添加Map、ArcGISTiledMapServiceLayer、GraphicsLayer等并且设置相应的属性。具体代码如下:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)<mx:Canvas width="495" height="396" borderStyle="solid" borderThickness="3" left="10" verticalCenter="14">
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
<esri:Map id="myMap" logoVisible="false">
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
<esri:ArcGISTiledMapServiceLayer url="http://jh-53a435fbc0e8/ArcGIS/rest/services/SanFranciscoBasemap/MapServer" />
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<esri:GraphicsLayer id="ruteGraphicsLayer"  symbol="{sls}" />
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<esri:GraphicsLayer id="myGraphicsLayer"  graphicAdd="graphicAddHandler(event)"  />
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
</esri:Map>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
</mx:Canvas>
4.上面的代码包含了一个 ArcGISTiledMapServiceLayer和二个GraphicsLayer,ruteGraphicsLayer用来显示分析后的路径,myGraphicsLayer用来显示 stops、Barriers点。
5.接着在Map控件的上方添加ToggleButtonBar和Button控件,ToggleButtonBar控件用来实现地图漫游、添加stops、添加Barriers的功能切换,Button为进行最短路径分析的按钮。在Map控件的右边添加一个DataGrid用来显示行车走法,代码:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)<mx:ToggleButtonBar verticalCenter="-215" itemClick="itemClickHandler(event)" left="10">
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<mx:dataProvider>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<mx:Array>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<mx:Object icon="{Pan}" />
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<mx:Object icon="{point}" />
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<mx:Object icon="{Bbrri}" />
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
</mx:Array>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
</mx:dataProvider>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
</mx:ToggleButtonBar>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
<mx:Button label="最短路径分析" left="138" verticalCenter="-216" fontSize="12" click="doShortestRoute()"/>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
<mx:DataGrid id="Directions" height="396" width="100%" left="513" verticalCenter="14">
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<mx:columns>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)            
<mx:DataGridColumn headerText="Directions" dataField="text"/>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
</mx:columns>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
</mx:DataGrid>
6.接下来添加Draw控件以及点、线的样式设定:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)<esri:InfoSymbol id="ifs">
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
<esri:infoRenderer>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)            
<mx:Component>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                
<mx:VBox width="100%" height="100%" backgroundColor="0xEEEEEE" >
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                
<mx:Style>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                        .ns
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                        {
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                            color: #ff0000;
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                            fontSize: 12;
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                            fontWeight: bold;
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                        }
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                    
</mx:Style>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                    
<mx:HBox id="titleBar" width="100%" height="100%" >
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                    
<mx:Label text="{data}"  styleName="ns">
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                    
</mx:Label>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                    
</mx:HBox>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)                
</mx:VBox>            
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)            
</mx:Component>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)        
</esri:infoRenderer>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
</esri:InfoSymbol>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
<esri:SimpleMarkerSymbol id="sms" style="x"  color="0xFF0000" size="20" alpha="0.9"/>
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
<esri:SimpleLineSymbol id="sls" style="solid" color="0x0000FF" width="5" alpha="1"/>
7.对于上面中比较复杂的是InfoSymbol的样式设置,这个在前面的文章中也有用到了具体参考:GPRouteA的Geoprocessing Service
的rest地址:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)<esri:Geoprocessor id="gp" url="http://jh-53a435fbc0e8/ArcGIS/rest/services/GPRouteA/GPServer/CalcShortestRoute" />
9.最后还需要添加一个HTTPService的控件,这个是用来获取路径分析后生成的DIRECTIONS的xml文件的,关于HTTPService的控件可以搜索网络上了非常重要的一个控件。代码:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)<mx:HTTPService id="feedRequest" url="" useProxy="false" result="resultHandler(event)" >
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)    
</mx:HTTPService>
10.完成界面的代码后接下来开始介绍具体的功能代码,按照事件的执行顺序首先是ToggleButtonBar的itemClick的事件方法itemClickHandler(event),代码很简单了不作解释了:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)private function itemClickHandler(event:ItemClickEvent):void
11.接下来是Draw控件的drawStart事件的drawStartHandler(event)方法,在方法是对前面一次的分析结果显示进行清除操作:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)private function drawStartHandler(event):void
            }
12.接下来是myGraphicsLayer的graphicAdd事件的graphicAddHandler(event)方法,这个方法是保存stops点和Barrier点 :
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)private function graphicAddHandler(event:GraphicEvent):void
            }
13.接下来是Button控件的click事件的doShortestRoute()方法,这个方法就是进行路径分析:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)//进行路径分析
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
            private function doShortestRoute():void
            }
14.对于上面的这段代码主要就是设置Geoprocessor的输入参数了,这个根据具体的model进行设置了,本例的最短路径的model有2个输入参数分别是用来输入stops点和Barrier点:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Parameter: Input_locations
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Data Type: GPFeatureRecordSetLayer
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Display Name: Input locations
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Direction: esriGPParameterDirectionInput
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Default Value: Geometry Type: esriGeometryPoint
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Parameter: InputBarriers
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Data Type: GPFeatureRecordSetLayer
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Display Name: InputBarriers
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Direction: esriGPParameterDirectionInput
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Default Value:Geometry Type: esriGeometryPoint
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
15.在执行完成doShortestRoute()方法后成功调用onResult方法,失败调用onFault方法:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)//成功后结果显示包括路径显示以及用HTTPService去获取分析生成的DIRECTIONS的xml用来显示行车走法
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
            private function onResult(gpResult:ExecuteResult,token:Object = null):void
          
16.在上面的onResult方法中获取分析结果,本例子model有2个输出参数分别为最多路径的图形以及DIRECTIONS的xml文件:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Parameter: Routes
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Data Type: GPFeatureRecordSetLayer
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Display Name: Routes
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Direction: esriGPParameterDirectionOutput
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Default Value: Geometry Type: esriGeometryPolyline

ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Parameter: Text_Directions
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Data Type: GPDataFile
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Display Name: Text Directions
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)Direction: esriGPParameterDirectionOutput
17.onResult方法最后会调用HTTPService控件获取DIRECTIONS的xml文件把内容显示在右边的DataGrid中:
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)//获取DIRECTIONS的xml文件内容后显示在
ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和最短路径分析(十三)
            private function resultHandler(event: ResultEvent ):void
            }
18.这样就完成了最短路径分析的例子。

相关文章: