ArcGIS Server动态读取图层样式(Flex版)

原址:http://virgoooos.iteye.com/blog/794991

在ArcGIS10的rest接口已经提供给我们动态读取图层样式的接口了。 

其实当我们在访问ArcGIS Server10的时候,会发现每一个服务界面提供给我们比以前更多的信息了,这些信息只要你可以看到,我们是都有接口读取到的。 

以ESRI官网的服务为例: 
Java代码   收藏代码
  1. http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/BloomfieldHillsMichigan/Parcels/MapServer  

界面如下图: 
ArcGIS Server动态读取图层样式(Flex版)_第1张图片

如果细心对比的话,会发现比前几个版本的信息量多了很多,例如:Tables 

再看一下对每个图层的信息描述,如下图: 
ArcGIS Server动态读取图层样式(Flex版)_第2张图片  
这里会很明显的发现drawinfo这个属性,记录着图层的图层样式,动态获取图层样式就要靠drawinfo这个属性了。 
代码如下: 
Java代码   收藏代码
  1. "1.0" encoding="utf-8"?>  
  2. "http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                xmlns:esri="http://www.esri.com/2008/ags"  
  5.                xmlns:mx="library://ns.adobe.com/flex/mx"   
  6.                creationComplete="application1_creationCompleteHandler(event)"  
  7.                minWidth="955" minHeight="600">  
  8.       
  9.         
  10.             import com.esri.ags.events.DetailsEvent;  
  11.             import com.esri.ags.layers.supportClasses.LayerDetails;  
  12.             import com.esri.ags.renderers.SimpleRenderer;  
  13.             import com.esri.ags.symbols.PictureMarkerSymbol;  
  14.               
  15.             import mx.core.INavigatorContent;  
  16.             import mx.events.FlexEvent;  
  17.             import mx.rpc.events.FaultEvent;  
  18.               
  19.             /** 
  20.              * 动态读取图层图标  
  21.              * 创建完成以后,加载 
  22.              */   
  23.             protected function application1_creationCompleteHandler(event:FlexEvent):void  
  24.             {  
  25.                 for(var i:int = 0 ; i
  26.                 {  
  27.                     if(map.layers[i] is ArcGISDynamicMapServiceLayer)  
  28.                     {  
  29.                           
  30.                         var pServiceLayer:ArcGISDynamicMapServiceLayer = map.layers[i];  
  31.                         //调用allgetails方式,就相当于再rest方式下的All Layers and Tables   
  32.                         pServiceLayer.getAllDetails();  
  33.                         pServiceLayer.addEventListener(DetailsEvent.GET_ALL_DETAILS_COMPLETE , onAllDetailsComplete);  
  34.                         pServiceLayer.addEventListener(FaultEvent.FAULT, onFault);  
  35.                           
  36.                     }  
  37.                 }  
  38.             }  
  39.               
  40.             private function onAllDetailsComplete(event:DetailsEvent):void  
  41.             {  
  42.                 //这里只做了一个图层,不同的点,线,面,需要判断  
  43.                 var p:LayerDetails = event.allDetails.layersDetails[0];  
  44.                 var pSimpleRender:SimpleRenderer = (SimpleRenderer)(p.drawingInfo.renderer);  
  45.                 var pSymbol:PictureMarkerSymbol = (PictureMarkerSymbol)(pSimpleRender.symbol);  
  46.                 image.source = pSymbol.source;  
  47.             }  
  48.               
  49.             //  
  50.             private function onFault(event:FaultEvent):void  
  51.             {  
  52.                 trace("not ok");  
  53.             }  
  54.               
  55.               
  56.               
  57.         ]]>  
  58.       
  59.       
  60.           
  61.       
  62.       
  63.     "image" />  
  64.     "map">  
  65.         "http://localhost:8399/arcgis/rest/services/resource/MapServer"/>  
  66.       
  67.       
  68.   

这个例子写得比较简单,只是动态获取出图层样式,然后用图片的形式显示出来了,呵呵,明白原理是最重要的。主要是用到了DetailTask方式实现,这个是Flex API2.0新增加的类,调用方式和之前的Task方式一样,写法就像你用QueryTask一样,主要作用就是获取服务的详细信息。 

你可能感兴趣的:(Symbol,Flex)