加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:09:46 所属栏目:百科 来源:网络整理
导读:转自:http://virgoooos.iteye.com/blog/794991 ? 最近遇到很多人问这类的问题,在ArcGIS10的rest接口已经提供给我们动态读取图层样式的接口了。 其实当我们在访问ArcGIS Server10的时候,会发现每一个服务界面提供给我们比以前更多的信息了,这些信息只要你

转自:http://virgoooos.iteye.com/blog/794991

?

最近遇到很多人问这类的问题,在ArcGIS10的rest接口已经提供给我们动态读取图层样式的接口了。
其实当我们在访问ArcGIS Server10的时候,会发现每一个服务界面提供给我们比以前更多的信息了,这些信息只要你可以看到,我们是都有接口读取到的。

以ESRI官网的服务为例:

Java代码

?

  1. http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/BloomfieldHillsMichigan/Parcels/MapServer??


界面如下图:



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

再看一下对每个图层的信息描述,如下图:


这里会很明显的发现drawinfo这个属性,记录着图层的图层样式,动态获取图层样式就要靠drawinfo这个属性了。
代码如下:

Java代码

?

  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <s:Application?xmlns:fx="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. ????<fx:Script>??
  9. ????????<![CDATA[??
  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<map.layerIds.length;?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. ????</fx:Script>??
  59. ????<fx:Declarations>??
  60. ????????<!--?Place?non-visual?elements?(e.g.,?services,?value?objects)?here?-->??
  61. ????</fx:Declarations>??
  62. ????<!--?用于显示图层的样式的?-->??
  63. ????<mx:Image?id="image"?/>??
  64. ????<esri:Map?id="map">??
  65. ????????<esri:ArcGISDynamicMapServiceLayer?url="http://localhost:8399/arcgis/rest/services/resource/MapServer"/>??
  66. ????</esri:Map>??
  67. ??????
  68. </s:Application>??

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读