当前位置:   article > 正文

Echarts动态加载地图数据(Dynamic load Echarts map data)_echart map data

echart map data

本篇就是Echarts制作地图终篇啦,前面我们已经制作好自定义区域的地图,如何结合‘数据’让地图根据我们的业务逻辑变得有“活力”,这才是最重要的。Echarts官网中给的demo大多都是静态的、写死的地图数据。本篇文章将说明如何动态加载echarts中的地图数据。本篇基于前面SpringBoot + JSP的项目进行演示, 只有部分代码有所增加。

本篇文章的开发工具:

1. Spring Boot 1.5.3.RELEASE

2.Maven 3

3.Java 8

4.Jquery 1.9.1

5.json-simple


1.项目的目录结构

2.项目依赖 pom.xml

与之前的依赖没有变化,只是增加了json-simple的依赖

  1. <!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
  2. <dependency>
  3. <groupId>com.googlecode.json-simple</groupId>
  4. <artifactId>json-simple</artifactId>
  5. </dependency>
3.Controller类

增加了getMapDataForEcharts方法,正常的开发应该分为controller-service-dao层,各种数据也是根据咱们自己的业务进行查询,本文仅以controller返回数据进行说明。

WelcomeController.java

  1. package org.thinkingingis;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.Random;
  5. import org.json.simple.JSONArray;
  6. import org.json.simple.JSONObject;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. @Controller
  12. public class WelcomeController {
  13.     
  14.     @Value("${welcome.message:test}")
  15.     private String message = "Hello ThinkingInGIS";
  16.     
  17.     @RequestMapping("/")
  18.     public String welcome(Map<String, Object> model){
  19.         model.put("message", this.message);
  20.         return "welcome";
  21.     }
  22.     
  23.     @RequestMapping(value = "getMapData.do", produces="text/html; charset=UTF-8")
  24.     public @ResponseBody String getMapDataForEcharts(){
  25.         Map<String, Integer> map = new HashMap<String, Integer>();
  26.         
  27.         //在controller中进行数据的组织
  28.         
  29.         Random rand = new Random();
  30.         
  31.         map.put("漷县镇", rand.nextInt(2000));
  32.         map.put("永乐店镇", rand.nextInt(2000));
  33.         map.put("于家务回族乡", rand.nextInt(2000));
  34.         map.put("梨园地区", rand.nextInt(2000));
  35.         map.put("潞城镇", rand.nextInt(2000));
  36.         map.put("马驹桥镇", rand.nextInt(2000));
  37.         map.put("宋庄镇", rand.nextInt(2000));
  38.         map.put("台湖镇", rand.nextInt(2000));
  39.         map.put("西集镇", rand.nextInt(2000));
  40.         map.put("永顺地区", rand.nextInt(2000));
  41.         map.put("张家湾镇", rand.nextInt(2000));
  42.         
  43.         JSONArray data = new JSONArray();
  44.         
  45.         for(String name : map.keySet()){
  46.             JSONObject jo = new JSONObject();
  47.             jo.put("name", name); //name 应与shp转geojson时的name字段对应
  48.             jo.put("value", map.get(name)); //value表示各个镇的值
  49.             data.add(jo);
  50.         }
  51.         
  52.         JSONObject res = new JSONObject(); //定义一个json对象
  53.         res.put("data", data); //data属性
  54.         res.put("maxRange", 2000); //maxrange属性,最大值
  55.         
  56.         System.out.println(res);
  57.         
  58.         return res.toString();
  59.     }
  60. }
4.加载map的data

由于Echarts中的data是js数组,当我们通过ajax获取数据后,可以通过mapChart.setOption()方法再次重新设置mapChart中的相关属性,它会覆盖前面定义的属性。

javascript代码如下:

  1. <script type="text/javascript">
  2. $(function(){
  3.      var mapChart;  
  4.      var option;  
  5.      $.get('./Beijing_TZQ_TOWN.json', function (beijingJson) {  
  6.            echarts.registerMap('北京', beijingJson);   
  7.            mapChart = echarts.init(document.getElementById('map-wrap'));   
  8.            option = {  
  9.                title:{  
  10.                    text: '北京市通州区各镇xxx统计图',  
  11.                    left: 'center'  
  12.                },  
  13.                tooltip: {  
  14.                    trigger: 'item',  
  15.                    formatter: '{b}<br/>{c} (个)'  
  16.                },  
  17.                toolbox: {  
  18.                   show: true,  
  19.                   orient: 'vertical',  
  20.                   left: 'right',  
  21.                   top: 'center',  
  22.                   feature: {  
  23.                       dataView: {readOnly: false},  
  24.                       restore: {},  
  25.                       saveAsImage: {}  
  26.                   }  
  27.                },  
  28.                visualMap: {  
  29.                        min: 0,  
  30.                        max: 0,  
  31.                        text:['高','低'],  
  32.                        realtime: false,  
  33.                        calculable: true,  
  34.                        inRange: {  
  35.                            color: ['lightskyblue','yellow', 'orangered']  
  36.                        }  
  37.                },  
  38.                series:[  
  39.                    {  
  40.                        name: '通州区各镇xxx统计图',  
  41.                        type: 'map',  
  42.                        map: '北京', // 自定义扩展图表类型  
  43.                        aspectScale: 1.0, //地图长宽比. default: 0.75  
  44.                        zoom: 1.1, //控制地图的zoom,动手自己更改下 看看什么效果吧  
  45.                        roam: true,  
  46.                        itemStyle:{  
  47.                            normal:{label:{show:true}},  
  48.                            emphasis:{label:{show:true}}  
  49.                        },
  50.                        data: []
  51.                    }  
  52.                ]  
  53.            }  
  54.            mapChart.setOption(option);      
  55.      });
  56.      
  57.      $.ajax({
  58.          method: 'POST',
  59.          data: {},
  60.          url: 'http://localhost:8080/getMapData.do',
  61.          success: function(result){
  62.                 console.info(result);
  63.                 if(result){
  64.                     //get max and series data
  65.                     var jsonObj = $.parseJSON(result);
  66.                     mapChart.setOption({
  67.                         
  68.                          visualMap: {
  69.                                min: 0,
  70.                                max: jsonObj.maxRange,
  71.                                text:['高','低'],
  72.                                realtime: false,
  73.                                calculable: true,
  74.                                inRange: {
  75.                                color: ['lightskyblue','yellow', 'orangered']
  76.                                }
  77.                          },
  78.                         series:[{
  79.                                      name: '通州区各镇xxx统计图',
  80.                                      type: 'map',
  81.                                      map: '北京', // 自定义扩展图表类型
  82.                                      aspectScale: 1.0, //长宽比 default: 0.75
  83.                                      zoom: 1.1,
  84.                                      roam: true,
  85.                                        itemStyle:{
  86.                                            normal:{label:{show:true}},
  87.                                            emphasis:{label:{show:true}}
  88.                                    },
  89.                                   data: jsonObj.data //json对象中的data, data为JSONArray
  90.                              }
  91.                          ]
  92.                      });
  93.                   }
  94.          }
  95.      })
  96. })
  97. </script>
ajax方法请求成功后的mapChart.setOption()是重点。我们向前端传递的Json对象,拥有data和maxRange 两个属性。

5.启动项目http://localhost:8080/


至此,一个完整的利用Echarts制作地图展示的示例已经完成了。

源码下载

如果你觉得本文对你有帮助,是可以赞赏一下的:)


如遇到问题,欢迎通过公众号留言给作者,以便共同探讨。

邮箱:thinkingingis@qq.com

微信公众号:




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/110052?site
推荐阅读
相关标签
  

闽ICP备14008679号