最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了。

经过一段时间的摸索,参照一些网上资源,目前大概弄出来了,里面还有待完善的地方的。

效果图如下:

(1)Chart.mxml,主要的展示地图专题图效果的页面

  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:mx="library://ns.adobe.com/flex/mx"
  5. xmlns:esri="http://www.esri.com/2008/ags"
  6. pageTitle="Charts in infowindow" xmlns:symbols="com.esri.ags.symbols.*">
  7.  
  8. <fx:Style>
  9. .chartStyle
  10. {
  11. borderThickness: 0;
  12. infoPlacement: center;
  13. backgroundAlpha: 0;
  14. infoOffsetX: 0;
  15. infoOffsetY: 0;
  16. paddingLeft: 0;
  17. paddingRight: 0;
  18. paddingTop: 0;
  19. paddingBottom: 0;
  20. }
  21. </fx:Style>
  22.  
  23. <fx:Script>
  24. <![CDATA[
  25. import com.esri.ags.geometry.MapPoint;
  26. import com.esri.ags.FeatureSet;
  27. import com.esri.ags.Graphic;
  28. import com.esri.ags.events.MapEvent;
  29. import com.esri.ags.tasks.QueryTask;
  30. import com.esri.ags.tasks.supportClasses.Query;
  31.  
  32. import mx.collections.ArrayCollection;
  33. import mx.controls.Alert;
  34. import mx.events.FlexEvent;
  35. import mx.rpc.AsyncResponder;
  36.  
  37. protected function myMap_initializeHandler(event:MapEvent):void
  38. {
  39. var pie:MapPoint = new MapPoint(113.55185,22.82289);
  40. var column:MapPoint = new MapPoint(113.59637985600011,22.758225999000047);
  41. var bar:MapPoint = new MapPoint(113.52757794,22.84012158);
  42. var gpie:Graphic = new Graphic(pie);
  43. var gcolumn:Graphic = new Graphic(column);
  44. var gbar:Graphic = new Graphic(bar);
  45. //g.attributes = new Object();
  46. var thematic:ArrayCollection = new ArrayCollection(
  47. [
  48. { Name: "危化品1", Rate: 25 },
  49. { Name: "危化品2", Rate: 15 },
  50. { Name: "危化品3", Rate: 23 }
  51. ]);
  52.  
  53. //g.attributes.thematic = thematic;
  54. gpie.attributes = thematic;
  55. gcolumn.attributes = thematic;
  56. gbar.attributes = thematic;
  57.  
  58. this.myGraphicsLayerpie.add(gpie);
  59. this.myGraphicsLayercolumn.add(gcolumn);
  60. this.myGraphicsLayerbar.add(gbar);
  61. }
  62. ]]>
  63. </fx:Script>
  64.  
  65. <fx:Declarations>
  66. <esri:InfoSymbol id="infoSymbolpie" infoRenderer="InfoRendererPieChart" containerStyleName="chartStyle">
  67. </esri:InfoSymbol>
  68. <esri:InfoSymbol id="infoSymbolcolumn" infoRenderer="InfoRendererColumnChart" containerStyleName="chartStyle">
  69. </esri:InfoSymbol>
  70. <esri:InfoSymbol id="infoSymbolbar" infoRenderer="InfoRendererBarChart" containerStyleName="chartStylee">
  71. </esri:InfoSymbol>
  72. </fx:Declarations>
  73.  
  74. <esri:Map id="myMap" load="myMap_initializeHandler(event)">
  75. <esri:extent>
  76. <esri:Extent xmin="113.284171273203" ymin="22.6348519473499" xmax="113.774816132605" ymax="22.9103935318251">
  77. <esri:spatialReference>
  78. <esri:SpatialReference wkid="4326"/>
  79. </esri:spatialReference>
  80. </esri:Extent>
  81. </esri:extent>
  82. <esri:ArcGISTiledMapServiceLayer url="http://localhost:6080/ArcGIS/rest/services/ns_new/MapServer"/>
  83. <esri:GraphicsLayer id="myGraphicsLayercolumn" symbol="{infoSymbolcolumn}">
  84. </esri:GraphicsLayer>
  85. <esri:GraphicsLayer id="myGraphicsLayerpie" symbol="{infoSymbolpie}">
  86. </esri:GraphicsLayer>
  87. <esri:GraphicsLayer id="myGraphicsLayerbar" symbol="{infoSymbolbar}">
  88. </esri:GraphicsLayer>
  89. </esri:Map>
  90.  
  91. </s:Application>

(2)InfoRendererBarChart.mxml、InfoRendererColumnChart.mxml、InfoRendererPieChart.mxml,分别是柱状图以及饼状图实现的页面

1.InfoRendererBarChart.mxml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
  3. xmlns:s="library://ns.adobe.com/flex/spark"
  4. xmlns:mx="library://ns.adobe.com/flex/mx"
  5. clipAndEnableScrolling="true"
  6. creationComplete="creationCompleteHandler()"
  7. implements="mx.core.IDataRenderer" width="100" height="100">
  8. <!--
  9. This is used by the QueryResultsWithChart sample.
  10. -->
  11.  
  12. <fx:Script>
  13. <![CDATA[
  14. private var _data:Object;
  15.  
  16. [Bindable]
  17. // implement IDataRenderer
  18. public function get data():Object
  19. {
  20. return _data;
  21. }
  22.  
  23. public function set data(value:Object):void
  24. {
  25. _data = value;
  26. }
  27.  
  28. private function creationCompleteHandler():void
  29. {
  30.  
  31. }
  32.  
  33. ]]>
  34. </fx:Script>
  35. <mx:BarChart id="columnChart" width="100%" height="100%"
  36. dataProvider="{data}"
  37. showDataTips="true">
  38. <mx:series>
  39. <mx:BarSeries id="barSeries" xField="Rate"/>
  40. </mx:series>
  41. <mx:verticalAxis>
  42. <mx:CategoryAxis id="barAxis" categoryField="Name"/>
  43. </mx:verticalAxis>
  44. <mx:verticalAxisRenderers>
  45. <mx:AxisRenderer axis="{barAxis}" showLabels="false"/>
  46. </mx:verticalAxisRenderers>
  47. </mx:BarChart>
  48.  
  49. </s:VGroup>

2.InfoRendererColumnChart.mxml 

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
  3. xmlns:s="library://ns.adobe.com/flex/spark"
  4. xmlns:mx="library://ns.adobe.com/flex/mx"
  5. clipAndEnableScrolling="true"
  6. creationComplete="creationCompleteHandler()"
  7. implements="mx.core.IDataRenderer" width="100" height="100">
  8. <!--
  9. This is used by the QueryResultsWithChart sample.
  10. -->
  11.  
  12. <fx:Script>
  13. <![CDATA[
  14. private var _data:Object;
  15.  
  16. [Bindable]
  17. // implement IDataRenderer
  18. public function get data():Object
  19. {
  20. return _data;
  21. }
  22.  
  23. public function set data(value:Object):void
  24. {
  25. _data = value;
  26. }
  27.  
  28. private function creationCompleteHandler():void
  29. {
  30.  
  31. }
  32. ]]>
  33. </fx:Script>
  34. <mx:ColumnChart id="columnChart" width="100%" height="100%"
  35. dataProvider="{data}"
  36. showDataTips="true">
  37. <mx:series>
  38. <mx:ColumnSeries id="columnSeries" yField="Rate"/>
  39. </mx:series>
  40. <mx:horizontalAxis>
  41. <mx:CategoryAxis id="columnAxis" categoryField="Name"/>
  42. </mx:horizontalAxis>
  43. <mx:horizontalAxisRenderers>
  44. <mx:AxisRenderer axis="{columnAxis}" showLabels="false"/>
  45. </mx:horizontalAxisRenderers>
  46. </mx:ColumnChart>
  47.  
  48. </s:VGroup>

3.InfoRendererPieChart.mxml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
  3. xmlns:s="library://ns.adobe.com/flex/spark"
  4. xmlns:mx="library://ns.adobe.com/flex/mx"
  5. clipAndEnableScrolling="true"
  6. creationComplete="creationCompleteHandler()"
  7. implements="mx.core.IDataRenderer" width="100" height="100">
  8. <!--
  9. This is used by the QueryResultsWithChart sample.
  10. -->
  11.  
  12. <fx:Script>
  13. <![CDATA[
  14. private var _data:Object;
  15.  
  16. [Bindable]
  17. // implement IDataRenderer
  18. public function get data():Object
  19. {
  20. return _data;
  21. }
  22.  
  23. public function set data(value:Object):void
  24. {
  25. _data = value;
  26. }
  27.  
  28. private function creationCompleteHandler():void
  29. {
  30.  
  31. }
  32.  
  33. ]]>
  34. </fx:Script>
  35.  
  36. <mx:PieChart id="pieChart"
  37. width="100%" height="100%"
  38. dataProvider="{data}"
  39. showDataTips="true" >
  40. <mx:series>
  41. <mx:PieSeries field="Rate"
  42. labelPosition="callout"
  43. nameField="Name">
  44. </mx:PieSeries>
  45. </mx:series>
  46. </mx:PieChart>
  47.  
  48. </s:VGroup>

上述的总体实现思路是这样的:核心是InfoSymbol,InfoSymbol自定义infoRenderer绑定专题图的模版,比如InfoRendererBarChart.mxml、InfoRendererColumnChart.mxml、InfoRendererPieChart.mxml;程序初始化的时候生成了一些带有统计信息的Graphic添加到地图上,这些Graphic对象的attributes属性集合来保存各个统计的对象,每个统计的对象包含两个字段:Name表示危化品名称,Rate表示占有比重,下面我们会在InfoSymbol的定义中再次看到这两个字段。当定义好这些Graphic对象以后,我们就可以把它们添加到设置了InfoSymbol符号的GraphicLayer上了。在InfoSymbol的定义中,我们可以看到,在这个InfoSymbol中添加了一个饼图组件PieChart,这个饼图的dataProvider属性绑定的是{data},它代表的其实就是Graphic对象的attributes属性。你可以简单地这样认为:InfoSymbol中的data代表的就是其对应的Graphic对象的attributes属性。其他的柱状图也是同理的。

既然在InfoSymbol中可以获得Graphic的属性信息,那么根据Graphic的属性信息来绘制不同的专题图就是水到渠成的事情了。

样式代码解析:

  1. .chartStyle
  2. {
  3. borderThickness: 0; /*显示专题图的边框宽度*/
  4. infoPlacement: center;/*显示专题图的位置,这里是中心*/
  5. backgroundAlpha: 0;/*显示专题图的背景透明度,这里设置为0,是为了隐藏背景*/
  6. infoOffsetX: 0;/*显示专题图的X偏移,设置0,不然会偏离原始点位置*/
  7. infoOffsetY: 0;/*显示专题图的Y偏移,设置0,不然会偏离原始点位置*/
  8. paddingLeft: 0;/*显示专题图的位置偏移,设置0,不然会偏离原始点位置*/
  9. paddingRight: 0;/*显示专题图的位置偏移,设置0,不然会偏离原始点位置*/
  10. paddingTop: 0;/*显示专题图的位置偏移,设置0,不然会偏离原始点位置*/
  11. paddingBottom: 0;/*显示专题图的位置偏移,设置0,不然会偏离原始点位置*/
  12. }

需要完善优化之处:目前GraphicsLayer定义了三个(pie,bar,column),然后各自绑定不同的infoSymbol(pie,bar,column)。这样显的有点冗余了,其实只要定义一个GraphicsLayer,然后动态的判断绑定的是哪个infoSymbol。

备注:

GIS技术交流QQ群:432512093

 

arcgis api for flex之专题图制作(饼状图,柱状图等)的更多相关文章

  1. ArcGIS Engine要素渲染和专题图制作(转)

    摘要:Feature的常用的绘制方法包括:1.简单绘制:2.唯一值绘制/多字段唯一值绘制:3.点密度/多字段点密度绘制:4.数据分级绘制:5.质量图(饼图/直方图): 6.按比例尺渲染:7.比例符号渲 ...

  2. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  3. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块

    config.xml文件的配置如下: <widget label="态势标绘" icon="assets/images/impact_area_over.png&q ...

  4. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(一)GIS一张图的系统开发环境以及flexviewer框架

    系统的GIS功能实现是基于arcgis api for flex,首先附上系统的主界面图,接下来的是对主界面的模块功能详细讲解: 一.GIS环境软件安装 (1)arcgis desktop的安装,要是 ...

  5. Clustering with the ArcGIS API for Flex

    Clustering is an excellent technique for visualizing lotss of point data. We've all seen application ...

  6. ArcGIS API for Flex实现GraphicsLayer上画点、线、面。

    目的: ArcGIS API for Flex实现GraphicsLayer上画点.线.面. 准备工作: 1.这次地图数据就用Esri提供的http://server.arcgisonline.com ...

  7. arcgis api for flex 开发入门(一)环境搭建

    http://www.cnblogs.com/wenjl520/archive/2009/06/02/1494514.html arcgis api for flex 开发入门(一)环境搭建arcgi ...

  8. arcgis api for js实现克里金插值渲染图--不依赖GP服务

    本篇的亮点是利用kriging.js结合arcgis api for js,实现克里金插值渲染图,截图如下: 具体实现的思路如下: 1.kriging.js开源js,可以实现针对容器canvas克里金 ...

  9. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块

    config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...

随机推荐

  1. Yii2-多表关联的用法示例

    本篇博客是基于<活动记录(Active Record)>中对于AR表关联用法的介绍. 我会构造一个业务场景,主要是测试我比较存疑的各种表关联写法,而非再次介绍基础用法. 构造场景 订单ar ...

  2. SQL Server 链接服务器的安全

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 安全设置(Security Settings) 实现效果:用户A能看见能使用,B用户不能看见这 ...

  3. 解密jQuery事件核心 - 委托设计(二)

    第一篇 http://www.cnblogs.com/aaronjs/p/3444874.html 从上章就能得出几个信息: 事件信息都存储在数据缓存中 对于没有特殊事件特有监听方法和普通事件都用ad ...

  4. SpringMVC那点事

    一.SpringMVC返回json数据的三种方式 1.第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew. 如:<bean id=" ...

  5. UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)

    最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...

  6. [OpenCV] Convolutional Neural Network

    Ref: 从LeNet-5看卷积神经网络CNNs 关于这篇论文的一些博文的QAC: 1. 基本原理 MLP(Multilayer Perceptron,多层感知器)是一种前向神经网络(如下图所示),相 ...

  7. 让你的JS更优雅的小技巧

    首先,看一个非常不优雅的例子: 看到这段代码,虽然代码很短,但是一眼看上去就不想再看了,也就是没什么可读性.这段代码,没有封装,随意定义一个变量都是全局变量,这样在多人开发或者是大型开发中,极其容易造 ...

  8. Oracle Tuning 基础概述01 - Oracle 常见等待事件

    对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...

  9. (十五)WebGIS中平移功能的设计和实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一章我们将详细讲解WebGIS工具栏中另一个基础工具——平 ...

  10. Android开发中的menu菜单

    复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...