eCharts动态加载各省份的数据

假如从数据库读出以下数据,如何将数据展示在地图之上

1.部门的名称数据:

 List deptname=[联通事业部-上海联通项目组, 联通事业部-河南联通项目组, 联通事业部-贵州联通项目组, 联通事业部-黑龙江联通项目组, 联通事业部-总部项目中心, 联通事业部-河北联通项目组, 联通事业部-北京联通项目组, 联通事业部-西藏联通项目组, 联通事业部-湖北联通项目组, 联通事业部-江苏联通项目组, 联通事业部-宝马业务拓展部, 联通事业部-浙江联通项目组, 联通事业部-重庆联通项目组, 联通事业部-内蒙联通项目组, 联通事业部-四川联通项目组, 联通事业部-海南联通项目组, 联通事业部-研究院项目部, 联通事业部-宁夏联通项目组, 联通事业部-云南联通项目组, 联通事业部-吉林联通项目组, 联通事业部-甘肃联通项目组]

2.对应的销售额数据:

List cash:=[5953755, 3822674.83, 2561747.31, 2144649.95, 1674165.5, 1477500, 1456919.64, 1199760, 1126992, 1043040, 1007000, 959140, 950000, 915840, 584532.4, 350000, 282000, 263990.88, 251500, 240786, 128260]

问题:

如何将一一对应的数据展示在地图上?

deptname的数据一一对应cash的数据

3.java代码处理对应关系

3.1定义常量省份

private static final String[] province = { "江苏", "青海", "四川", "海南", "陕西", "甘肃", "云南", "湖南", "湖北", "黑龙江", "贵州", "山东",
            "江西", "河南", "河北", "山西", "安徽", "福建", "浙江", "广东", "吉林", "辽宁", "台湾", "新疆", "广西", "宁夏", "内蒙古", "西藏", "北京", "天津",
            "上海", "重庆", "香港", "澳门","南海诸岛"};

4.通过以下代码实现转换,并存入2个List中,方便echarts调用

 1 private void switchParams(List<String> deptname, List cash) throws IOException {
 2         // 正则表达式
 3         List provic = new ArrayList();
 4         List toCash = new ArrayList();
 5         for (int i = 0; i < province.length; i++) {
 6             String regex = province[i];
 7             Boolean flag = false;
 8             for (int j = 0; j < deptname.size() && j < cash.size(); j++) {
 9                 String str = deptname.get(j);
10                 if (str.contains(regex)) {
11                     provic.add(regex);
12                     toCash.add(cash.get(j));
13                     flag = true;
14                 }
15                 if (flag) {
16                     break;
17                 } else {
18                 }
19             }
20             if(!flag){
21                 provic.add(regex);
22                 toCash.add(0);
23             }
24         }
25         setParams(provic,toCash);
26     }
27
28     private void setParams(List provic, List toCash) throws IOException {
29         Map params = new HashMap();
30         params.put("provic", provic);
31         params.put("toCash", toCash);
32         doEchart(params);
33     }
34         private void doEchart(Map map) throws IOException {
35         HttpServletResponse response =      ServletActionContext.getResponse();
36         response.setContentType("text/json; charset=utf-8");
37         JSONObject json = new JSONObject();
38         json.putAll(map);
39         response.getWriter().println(json.toString());
40     }

5.在前端通过ajax来获取数据,进行数据的展示,代码如下:

  1 /**
  2  * 该插件为显示地图的插件,动态加载
  3  */
  4 function setMapUnion(deptId) {
  5     /**
  6      * ajax获取联通事业部的所有项目组的销售额
  7      */
  8     var o1 = $("#acctmonth").val();
  9     var o2 = $("#maxMonth").val();
 10     var parData = {
 11         acctmonth : o1,
 12         maxMonth : o2,
 13         deptId : deptId
 14     };
 15     var par = JSON.stringify(parData);
 16     /**
 17      * @author Administrator
 18      * @params:参数设置:为地图各省份提供数据.
 19      */
 20     var provic;
 21     var toCash;
 22     $.ajax({
 23         url : "CompanyFeeBusinessNew!setMapUnion.action",
 24         data : {
 25             par : par
 26         },
 27         cache : true,
 28         async : false,
 29         type : "post",
 30         success : function(result) {
 31             provic = result.provic;
 32             toCash = result.toCash;
 33         }
 34     });
 35     // ----------参数的转换
 36     var text = null;
 37     if (deptId == ‘5271‘) {
 38         text = ‘联通事业部分分省份项目组销售额‘;
 39     } else if (deptId == ‘7658‘) {
 40         text = ‘电信事业部分分省份项目组销售额‘;
 41     } else {
 42         text = ‘移动事业部分分省份项目组销售额‘;
 43     }
 44     $("#map").css(‘width‘, $("#map").width());
 45     require.config({
 46         paths : {
 47             echarts : ‘/pure/resources/echarts‘
 48         }
 49     });
 50     require([ ‘echarts‘, ‘echarts/chart/map‘ ], function DrawEchart(ec) {
 51         var myChart = ec.init(document.getElementById("map"));
 52         mapParams = {
 53             title : {
 54                 text : text,
 55                 // subtext: ‘纯属虚构‘,
 56                 left : ‘center‘
 57             },
 58             tooltip : {
 59                 trigger : ‘item‘
 60             },
 61             legend : {
 62                 orient : ‘vertical‘,
 63                 left : ‘left‘,
 64                 data : [ ‘销售额‘ ]
 65             },
 66             toolbox : {
 67                 show : true,
 68                 orient : ‘vertical‘,
 69                 left : ‘right‘,
 70                 top : ‘center‘,
 71                 feature : {
 72                     dataView : {
 73                         readOnly : false
 74                     },
 75                     restore : {},
 76                     saveAsImage : {}
 77                 }
 78             },
 79             visualMap : {
 80                 min : 0,
 81                 max : 5000000,
 82                 text : [ ‘High‘, ‘Low‘ ],
 83                 realtime : false,
 84                 calculable : true,
 85                 inRange : {
 86                     color : [ ‘lightskyblue‘, ‘yellow‘, ‘orangered‘ ]
 87                 }
 88             },
 89             dataRange : {
 90                 min : 0,
 91                 max : 2500000,
 92                 x : ‘left‘,
 93                 selectedMode : false,
 94                 y : ‘bottom‘,
 95                 text : [ ‘High‘, ‘Low‘ ], // 文本,默认为数值文本
 96                 calculable : true,
 97                 color : [ ‘#EE6363‘, ‘#CCCCCC‘ ]
 98             },
 99             series : [ {
100                 name : ‘销售额‘,
101                 type : ‘map‘,
102                 mapType : ‘china‘,
103                 roam : false,
104                 label : {
105                     normal : {
106                         show : true
107                     },
108                     emphasis : {
109                         show : true
110                     }
111                 },
112                 data : (function() {
113                     var res = [];
114                     var len = provic.length;
115                     while (len--) {
116                         res.push({
117                             name : provic[len],
118                             value : toCash[len]
119                         });
120                     }
121                     return res;
122                 })(),
123                 itemStyle : {
124                     normal : {
125                         color : ‘#BF3EFF‘,
126                         borderWidth : 0.5,
127                         borderColor : ‘black‘,
128                         /* color: ‘orange‘, */
129                         label : {
130                             show : false
131                         }
132                     }
133                 }
134             } ]
135         };
136         myChart.setOption(mapParams);
137     });
138 }

6.最后,展示效果:(可以根据deptId来动态切换显示图例):

图1:联通事业部
  

图2:电信事业部:

图3:移动事业部
 

时间: 2025-01-07 09:10:28

eCharts动态加载各省份的数据的相关文章

Echarts动态加载后台数据

注意:1.用Ajax请求获取后台数据 2.Echarts只能处理Json数据 后台Controller:根据业务需求不同而返回不同数据,我前台要循环遍历Echarts的series进行数据添加,所以后台返了个二维数组过去. 前端JSP页面:为Echarts准备一个具有高宽的dom容器 前端JS:初始化时即加载Echarts,将不需要进行加载的配置项(例如title.tooltip等)不作改动,将需要动态加载数据的配置放入ajax的success:function(){}中进行处理. 定义一个为s

ECharts动态加载堆叠柱状图的实例

一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div style="width: 100%; height: 400px;" id="main"> </div> 三.js代码(获取数据以及对数据的处理方法): function loadData(callback){ $.ajax({ url: 'test.json', dataType: 'js

MVC4中AJAX Html页面打开调用后台方法实现动态加载数据库中的数据

之前一直用window.onload方法来调用js方法来实现,今天纠结能不能换个方法实现. 很明显是可以的. 在html前台页面引用js代码如下 @Scripts.Render("~/Scripts/User/AddUser.js") 这就算引用了,看adduser.js代码如果调用后台方法 $(document).ready( function (){ $.ajax({ type: 'POST', url: "/EditUserPassWord/UserGroupQuery

Echarts ajax动态加载json数据

后台php写的,给前台准备好json格式数据 public function actionGetOffline(){ $userid = Yii::$app->user->identity->user_id; $connection = Yii::$app->db; $command = $connection->createCommand("SELECT proc_phase_id from tb_pro where user_id like '%$userid%

EasyUi -- 如何根据动态加载panel和Datagrid

在做项目的过程中,前台的面板和表格一般都不是固定的,它是根据后台传来的数据进行变化的.举个例子: 实现: 看一下我们的效果图: 这个上面的最左边的Panel要根据系别动态加载,有多少个系别就要加载都少个Panel,Panel里面的是一个table,这个里面也是动态加载出来. 右边是一个datagrid,datagrid里面的工作效率.业务能力等等也都是数据库动态加载出来的,包括后面的ABCD也是动态的. 这样就算数据库中的数据怎么变,这里都会动态地加载出来.那么怎么实现这些功能呢? 一.动态加载

【EasyUi DataGrid】动态加载列

动态加载列可以说是一个从无到有的过程,如果只是网页上的DataGrid实现那就太无味了,有趣的在这里,这个页面上连带着一大堆的数据库表的查询修改,尤其是做着做着发现数据表设计有缺陷,需要的数据竟然只有出口没有入口,想想也是醉了,对业务不熟悉真心的杀不起啊.这个其实蛮好玩的,就像玩捉迷藏藏得那个人叫做nothing,再后来我又遇到了Multiple-births(多胞胎),一个页面上涉及到了六七张数据库表,里边的字段名虽然不一样,可它就是达到了百分之七八十的相似度,多亏咱是上过学的,欺负不了我读书

echarts在.Net中使用实例(二) 使用ajax动态加载数据

前一篇文章链接:echarts在.Net中使用实例(一) 简单的Demo 通过上一篇文章可以知道和echarts参考手册可知,series字段就是用来存储我们显示的数据,所以我们只需要用ajax来获取series的值就可以. option 名称 描述 {color}backgroundColor 全图默认背景,(详见backgroundColor),支持rgba,默认为无,透明 {Array} color 数值系列的颜色列表,(详见color),可配数组,eg:['#87cefa', 'rgba

Echarts使用及动态加载图表数据

Echarts使用及动态加载图表数据 官网:http://echarts.baidu.com/ 1.文档 2.实例 名词: 1.统计维度(说明数据) 维度就是统计致力于建立一个基于多方位统计(时间.地域.访问者).全方位分析网站流量的统计标准,形成原始数据,数据视觉化,数据行为化,数据深入挖掘的数据分析的模式 2.指标(衡量数据) 指标是指可以按总数或比值衡量的具体维度元素.例如,维度"城市"可以关联指标"人口",其值为具体城市的居民总数  

ext combobox动态加载数据库数据

前台: var provinceStore = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: basePath + "/stationManage/station_getProvinceJSON.action" }), reader: new Ext.data.JsonReader( { root: "" }, ["PROVINCEID", "PROVINCENAME