vue+echarts+geoJson+MakeAPie实现地图下钻和数据显示

Posted 尔嵘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue+echarts+geoJson+MakeAPie实现地图下钻和数据显示相关的知识,希望对你有一定的参考价值。

一、参考示例:Make A Pie

 说明:上面这个是JQuery实现的地区分布图 

二、实现过程:

1、下载json:

地址: https://hxkj.vip/demo/echartsMap/

或者:EasyMap 

下载的有的并非是严格的json文件,选用用  json.cn 进行转换

2、vue文件中引入json,直接使用

import jsonData from "../assets/json/411300.json"; //引入josn文件

3、将参考实例中的参考代码语法改成vue能直接用的

4、绘制地图

三、完整代码如下:

components新建组件jmap.vue,代码如下:

<template>
  <div id="container"></div>
</template>
<script>
import jsonData from "../assets/json/411300.json"; //引入josn文件

export default {
  props: {},
  data() {
    return {
        jsonData: [],
        geoCoordMap: {
            内乡县: [111.843801, 33.046358],
            南召县: [112.435583, 33.488617],
            卧龙区: [112.528789, 32.989877],
            唐河县: [112.838492, 32.687892],
            宛城区: [112.544591, 32.994857],
            新野县: [112.365624, 32.524006],
            方城县: [113.010933, 33.255138],
            桐柏县: [113.406059, 32.367153],
            淅川县: [111.489026, 33.136106],
            社旗县: [112.938279, 33.056126],
            西峡县: [111.485772, 33.302981],
            邓州市: [112.092716, 32.681642],
            镇平县: [112.232722, 33.036651]
        },
        jData: [
          { name: "唐河县", value: 12 },
          { name: "西峡县", value: 6 },
          { name: "宛城区", value: 16 },
          { name: "社旗县", value: 2000 },
          { name: "新野县", value: 10 },
          { name: "南召县", value: 11 }
        ],

    };
  },
  mounted() {
    this.init();
  },
  created() {
    this.jsonData = jsonData;
  },

  methods: {
    convertData(data) {
        var res = [];
        for (var i = 0; i < data.length; i++) {
            var geoCoord = this.geoCoordMap[data[i].name];
            if (geoCoord) {
                res.push({
                    name: data[i].name,
                    value: geoCoord.concat(data[i].value).concat(data[i].img)
                });
            }
        }
        return res;
    },

    //初始化数据
    init() {
        var chartDom = document.getElementById('container');
        var myChart = this.$echarts.init(chartDom);
        var option;
        myChart.showLoading();
        this.$echarts.registerMap("nanyang", jsonData);//注册地图
        myChart.hideLoading();

        option = {
          title: {
            top: 20,
            text: "VIP分布",
            subtext: "VIP分布",
            textStyle: {
              color: "#000"
            }
          },
          tooltip: {
            formatter: function(params) {
              var html = "";
              html =
                "<div>" +
                "<div >" +
                params.name +
                "</div>" +
                "<div>" +
                '<span style="font-size:14px;font-weight:bold;">' +
                "IVP数:" +
                params.data.value[2] +
                " " +
                "</span>" +
                "</div>" +
                "</div>";
              return html;
            }
          },
          geo: {
            map: "nanyang",
            type: "map",
            zoom: 1,
            showLegendSymbol: true,
            label: {
              normal: {
                show: true,
                color: "#fff"
              },
              emphasis: {
                show: true,
                color: "red"
              }
            },
            itemStyle: {
              normal: {
                areaColor: "#3a7fd5",
                borderColor: "#0a53e9", //线
                shadowColor: "#092f8f", //外发光
                shadowBlur: 20
              },
              emphasis: {
                areaColor: "#0a2dae" //悬浮区背景
              }
            }
          },
          series: [
            {
              name: "666",
              type: "scatter",
              coordinateSystem: "geo",
              symbol: "pin",
              symbolSize: [50, 50],
              label: {
                normal: {
                  show: true,
                  textStyle: {
                    color: "#fff",
                    fontSize: 10
                  },
                  formatter(value) {
                    return value.data.value[2];
                  }
                }
              },
              itemStyle: {
                normal: {
                  color: function(val) {
                    if (val.dataIndex == "0") {
                      return "blue";
                    } else if (val.dataIndex == "1") {
                      return "green";
                    } else if (val.dataIndex == "2") {
                      return "#ff9900";
                    } else {
                      return "red";
                    }
                  }
                }
              },
              data: this.convertData(
                this.jData.sort(function(a, b) {
                  return b.value - a.value;
                })
              ),
              showEffectOn: "render",
              rippleEffect: {
                brushType: "stroke"
              },
              hoverAnimation: true,
              zlevel: 1
            }
          ]
        };
        myChart.setOption(option);
    }
  }
};
</script>

父组件中使用上述组件

先引入:import jMap from "@/components/jmap"; 

再注册:components: {jMap}

使用:

<div class="home">
 <div class="mapp">
     <jMap style="width: 100%;height: 100%"></jMap>
 </div>
</div>

class为home的记得要给个具体的宽高

参考:

【1】https://www.makeapie.com/editor.html?c=xYSCeb6QAd

【2】Examples - Apache ECharts

以上是关于vue+echarts+geoJson+MakeAPie实现地图下钻和数据显示的主要内容,如果未能解决你的问题,请参考以下文章

vue 里怎么使用 echarts 实现地图自动轮播功能自定义 tooltip 悬浮位置提示自定义 label 标签位置样式?

eCharts添加自定义geojson数据实现地图展示

shp数据转为geojson格式作为ECharts地图扩展文件

echarts geojson 扩展的地图怎么填充数据

获取街道镇级的地图geoJson数据方法,使用echarts绘制出街道镇级的地图区域画面(中山市为例)

怎么获取echarts需要的geoJson数据去渲染地图:以广州市白云区24镇街为例(内附资源)