企业网站定制开发vue中使用echarts实现中国地图

企业网站定制开发第一种效果:企业网站定制开发不同省份颜色不同

代码:
注意:
①企业网站定制开发要实现这种效果,企业网站定制开发地图数据的name企业网站定制开发一定要是省份的名字,企业网站定制开发要不然颜色出不来;
②一定要有visualMap配置,并且它的seriesIndex属性 对应的是series企业网站定制开发的数组下标;

<template>    <div class="echartsMapAllDemo">        <!-- style企业网站定制开发的宽高一定要写,企业网站定制开发不写也不会展示echarts图 -->        <div id="myEcharts" ref="myEcharts" style="width:100vw;height:100vh;border:3px solid gold"></div>    </div></template><script>import chinaJson from "../../assets/china.json";export default {  data() {    return {};  },  mounted() {    this.chinaEcharts();  },  methods: {    chinaEcharts() {      //1.企业网站定制开发注册一个地图      this.$echarts.registerMap("china", chinaJson);      //2.初始化echarts      let myChart = this.$echarts.init(this.$refs.myEcharts);          // 3.准备数据      var data = [        { name: "北京", value: 177 },        { name: "天津", value: 42 },        { name: "河北", value: 102 },        { name: "山西", value: 81 },        { name: "内蒙古", value: 47 },        { name: "辽宁", value: 67 },        { name: "吉林", value: 82 },        { name: "黑龙江", value: 66 },        { name: "上海", value: 24 },        { name: "江苏", value: 92 },        { name: "浙江", value: 114 },        { name: "安徽", value: 109 },        { name: "福建", value: 116 },        { name: "江西", value: 91 },        { name: "山东", value: 119 },        { name: "河南", value: 137 },        { name: "湖北", value: 116 },        { name: "湖南", value: 114 },        { name: "重庆", value: 91 },        { name: "四川", value: 125 },        { name: "贵州", value: 62 },        { name: "云南", value: 83 },        { name: "西藏", value: 9 },        { name: "陕西", value: 80 },        { name: "甘肃", value: 56 },        { name: "青海", value: 10 },        { name: "宁夏", value: 18 },        { name: "新疆", value: 67 },        { name: "广东", value: 123 },        { name: "广西", value: 59 },        { name: "海南", value: 14 }      ];      var geoCoordMap = {          上海:  [121.472644, 31.231706],          云南:  [102.712251, 25.040609],          内蒙古:  [111.670801, 40.818311],          北京:  [116.405285, 39.904989],          台湾:  [121.509062, 25.044332],          吉林:  [125.3245, 43.886841],          四川:  [104.065735, 30.659462],          天津:  [117.190182, 39.125596],          宁夏:  [106.278179, 38.46637],          安徽:  [117.283042, 31.86119],          山东:  [117.000923, 36.675807],          山西:  [112.549248, 37.857014],          广东:  [113.280637, 23.125178],          广西:  [108.320004, 22.82402],          新疆:  [87.617733, 43.792818],          江苏:  [118.767413, 32.041544],          江西:  [115.892151, 28.676493],          河北:  [114.502461, 38.045474],          河南:  [113.665412, 34.757975],          浙江:  [120.153576, 30.287459],          海南:  [110.33119, 20.031971],          湖北:  [114.298572, 30.584355],          湖南:  [112.982279, 28.19409],          澳门:  [113.54909, 22.198951],          甘肃:  [103.823557, 36.058039],          福建:  [119.306239, 26.075302],          西藏:  [91.132212, 29.660361],          贵州:  [106.713478, 26.578343],          辽宁:  [123.429096, 41.796767],          重庆:  [106.504962, 29.533155],          陕西:  [108.948024, 34.263161],          青海:  [101.778916, 36.623178],          香港:  [114.173355, 22.320048],          黑龙江:  [126.642464, 45.756967],      };      //4.企业网站定制开发把数据变成[{{ name: "北京", value: [121.472644, 31.231706,177] },...}]格式      var convertData = function(data) {        var res = [];        for (var i = 0; i < data.length; i++) {          var geoCoord = geoCoordMap[data[i].name];          if (geoCoord) {            res.push({              name: data[i].name,              value: geoCoord.concat(data[i].value)            });          }        }        console.log(res)        return res;      };     //5.echarts配置      let option = {        backgroundColor: "transparent",        title: {          text: "企业网站定制开发全国主要城市空气质量",          subtext: "data from PM25.in",          sublink: "http://www.pm25.in",          left: "center",          textStyle: {            color: "#fff"          }        },        tooltip: {          trigger: "item",          formatter: "{b}<br/>{c} "        },        1)加上这个就可以实现多种颜色的功能        visualMap: {          min: 0,          max: 100,          text: ['High', 'Low'],          calculable: true,          seriesIndex: [0],//这个对应的是series的数组下标          inRange: {            color: ["#00467F", "#A5CC82"]          }        },        //series就是地图上的数据(去掉就没有数据了)        series: [          {            type: "map",            map: 'china',            geoIndex: 0,            aspectScale: 0.75, //长宽比            showLegendSymbol: false, // 存在legend时显示            label: {              normal: {                show: true              },              emphasis: {                show: false,                textStyle: {                  color: "#fff"                }              }            },            roam: true,            animation: false,            data: data          },        ]      };      myChart.setOption(option);      window.addEventListener("resize", function() {        myChart.resize();      });    }  }};</script><style lang="less">.echartsMapAllDemo {}</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175

第二种效果:地图+光圈散点


注意:
①一定要有geo这个配置,要不然光圈出不来。
并且series中的 type: “effectScatter”,的属性中一定要加上 coordinateSystem: “geo”,
② 然后对应的series中 这几个样式一定要加,加上才有那种光圈的效果

showEffectOn: "render",rippleEffect: {   brushType: "stroke"}, hoverAnimation: true,
  • 1
  • 2
  • 3
  • 4
  • 5
<template>    <div class="echartsMapAllDemo">        <!-- style的宽高一定要写,不写也不会展示echarts图 -->        <div id="myEcharts" ref="myEcharts" style="width:100vw;height:100vh;border:3px solid gold"></div>    </div></template><script>import chinaJson from "../../assets/china.json";export default {  data() {    return {};  },  mounted() {    this.chinaEcharts();  },  methods: {    chinaEcharts() {      this.$echarts.registerMap("china", chinaJson);      let myChart = this.$echarts.init(this.$refs.myEcharts);      var data = [        { name: "北京", value: 177 },        { name: "天津", value: 42 },        { name: "河北", value: 102 },        { name: "山西", value: 81 },        { name: "内蒙古", value: 47 },        { name: "辽宁", value: 67 },        { name: "吉林", value: 82 },        { name: "黑龙江", value: 66 },        { name: "上海", value: 24 },        { name: "江苏", value: 92 },        { name: "浙江", value: 114 },        { name: "安徽", value: 109 },        { name: "福建", value: 116 },        { name: "江西", value: 91 },        { name: "山东", value: 119 },        { name: "河南", value: 137 },        { name: "湖北", value: 116 },        { name: "湖南", value: 114 },        { name: "重庆", value: 91 },        { name: "四川", value: 125 },        { name: "贵州", value: 62 },        { name: "云南", value: 83 },        { name: "西藏", value: 9 },        { name: "陕西", value: 80 },        { name: "甘肃", value: 56 },        { name: "青海", value: 10 },        { name: "宁夏", value: 18 },        { name: "新疆", value: 67 },        { name: "广东", value: 123 },        { name: "广西", value: 59 },        { name: "海南", value: 14 }      ];      var geoCoordMap = {        上海: [121.472644, 31.231706],        云南: [102.712251, 25.040609],        内蒙古: [111.670801, 40.818311],        北京: [116.405285, 39.904989],        台湾: [121.509062, 25.044332],        吉林: [125.3245, 43.886841],        四川: [104.065735, 30.659462],        天津: [117.190182, 39.125596],        宁夏: [106.278179, 38.46637],        安徽: [117.283042, 31.86119],        山东: [117.000923, 36.675807],        山西: [112.549248, 37.857014],        广东: [113.280637, 23.125178],        广西: [108.320004, 22.82402],        新疆: [87.617733, 43.792818],        江苏: [118.767413, 32.041544],        江西: [115.892151, 28.676493],        河北: [114.502461, 38.045474],        河南: [113.665412, 34.757975],        浙江: [120.153576, 30.287459],        海南: [110.33119, 20.031971],        湖北: [114.298572, 30.584355],        湖南: [112.982279, 28.19409],        澳门: [113.54909, 22.198951],        甘肃: [103.823557, 36.058039],        福建: [119.306239, 26.075302],        西藏: [91.132212, 29.660361],        贵州: [106.713478, 26.578343],        辽宁: [123.429096, 41.796767],        重庆: [106.504962, 29.533155],        陕西: [108.948024, 34.263161],        青海: [101.778916, 36.623178],        香港: [114.173355, 22.320048],        黑龙江: [126.642464, 45.756967]      };      var convertData = function(data) {        var res = [];        for (var i = 0; i < data.length; i++) {          var geoCoord = geoCoordMap[data[i].name];          if (geoCoord) {            res.push({              name: data[i].name,              value: geoCoord.concat(data[i].value)            });          }        }        // console.log(res)        return res;      };      let option = {        backgroundColor: "transparent",        title: {          text: "全国主要城市空气质量",          subtext: "data from PM25.in",          sublink: "http://www.pm25.in",          left: "center",          textStyle: {            color: "#fff"          }        },        tooltip: {          trigger: "item"        },        //这个属性配置一定要有,要不然无法实现光圈效果        geo: {          show: true,          map: "china",          label: {            normal: {              show: true            },            emphasis: {              show: false            }          },          roam: true,          itemStyle: {            normal: {              areaColor: "#031525",              borderColor: "#3B5077"            },            emphasis: {              areaColor: "#2B91B7"            }          }        },        //series就是地图上的数据(去掉就没有数据了)        series: [          //所有的市          {            name: "pm2.5",            type: "effectScatter",            coordinateSystem: "geo",            data: convertData(data),            symbolSize: function(val) {              return val[2] / 10;            },            //这几个样式一定要加,加上才有那种光圈的效果            showEffectOn: "render",            rippleEffect: {              brushType: "stroke"            },            hoverAnimation: true,                        label: {              formatter: "{b}",              position: "right",              show: true            },            //圆点的样式            itemStyle: {              color: "#ddb926"            },            emphasis: {              label: {                show: true              }            }          }        ]      };      myChart.setOption(option);      window.addEventListener("resize", function() {        myChart.resize();      });    }  }};</script><style lang="less">.echartsMapAllDemo {}</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190

第三种效果:多彩省份+光圈散点+气泡


这个差不多就是上面两个的结合
但这种方法比较有趣的一点就是不需要写中国全省和各市的地理坐标,也就是说不需要我们手动提取出来他们的坐标,而是通过方法自动获取到,这一点就很有意思。

 <template>   <div>      <div id="map" style="width:100vw;height:100vh;" ref="map"></div>   </div> </template> <script>import chinaJson from "../../assets/china.json";export default {  data() {    return {};  },  mounted() {    this.$echarts.registerMap("china", chinaJson);    let myChart = this.$echarts.init(this.$refs.map);    this.$nextTick(() => {      var mapName = "china";      var data = [        { name: "北京", value: 177 },        { name: "天津", value: 42 },        { name: "河北", value: 102 },        { name: "山西", value: 81 },        { name: "内蒙古", value: 47 },        { name: "辽宁", value: 67 },        { name: "吉林", value: 82 },        { name: "黑龙江", value: 66 },        { name: "上海", value: 24 },        { name: "江苏", value: 92 },        { name: "浙江", value: 114 },        { name: "安徽", value: 109 },        { name: "福建", value: 116 },        { name: "江西", value: 91 },        { name: "山东", value: 119 },        { name: "河南", value: 137 },        { name: "湖北", value: 116 },        { name: "湖南", value: 114 },        { name: "重庆", value: 91 },        { name: "四川", value: 125 },        { name: "贵州", value: 62 },        { name: "云南", value: 83 },        { name: "西藏", value: 9 },        { name: "陕西", value: 80 },        { name: "甘肃", value: 56 },        { name: "青海", value: 10 },        { name: "宁夏", value: 18 },        { name: "新疆", value: 67 },        { name: "广东", value: 123 },        { name: "广西", value: 59 },        { name: "海南", value: 14 }      ];      var geoCoordMap = {};      var toolTipData = [        {          name: "北京",          value: [{ name: "文科", value: 95 }, { name: "理科", value: 82 }]        },        {          name: "天津",          value: [{ name: "文科", value: 22 }, { name: "理科", value: 20 }]        },        {          name: "河北",          value: [{ name: "文科", value: 60 }, { name: "理科", value: 42 }]        },        {          name: "山西",          value: [{ name: "文科", value: 40 }, { name: "理科", value: 41 }]        },        {          name: "内蒙古",          value: [{ name: "文科", value: 23 }, { name: "理科", value: 24 }]        },        {          name: "辽宁",          value: [{ name: "文科", value: 39 }, { name: "理科", value: 28 }]        },        {          name: "吉林",          value: [{ name: "文科", value: 41 }, { name: "理科", value: 41 }]        },        {          name: "黑龙江",          value: [{ name: "文科", value: 35 }, { name: "理科", value: 31 }]        },        {          name: "上海",          value: [{ name: "文科", value: 12 }, { name: "理科", value: 12 }]        },        {          name: "江苏",          value: [{ name: "文科", value: 47 }, { name: "理科", value: 45 }]        },        {          name: "浙江",          value: [{ name: "文科", value: 57 }, { name: "理科", value: 57 }]        },        {          name: "安徽",          value: [{ name: "文科", value: 57 }, { name: "理科", value: 52 }]        },        {          name: "福建",          value: [{ name: "文科", value: 59 }, { name: "理科", value: 57 }]        },        {          name: "江西",          value: [{ name: "文科", value: 49 }, { name: "理科", value: 42 }]        },        {          name: "山东",          value: [{ name: "文科", value: 67 }, { name: "理科", value: 52 }]        },        {          name: "河南",          value: [{ name: "文科", value: 69 }, { name: "理科", value: 68 }]        },        {          name: "湖北",          value: [{ name: "文科", value: 60 }, { name: "理科", value: 56 }]        },        {          name: "湖南",          value: [{ name: "文科", value: 62 }, { name: "理科", value: 52 }]        },        {          name: "重庆",          value: [{ name: "文科", value: 47 }, { name: "理科", value: 44 }]        },        {          name: "四川",          value: [{ name: "文科", value: 65 }, { name: "理科", value: 60 }]        },        {          name: "贵州",          value: [{ name: "文科", value: 32 }, { name: "理科", value: 30 }]        },        {          name: "云南",          value: [{ name: "文科", value: 42 }, { name: "理科", value: 41 }]        },        {          name: "西藏",          value: [{ name: "文科", value: 5 }, { name: "理科", value: 4 }]        },        {          name: "陕西",          value: [{ name: "文科", value: 38 }, { name: "理科", value: 42 }]        },        {          name: "甘肃",          value: [{ name: "文科", value: 28 }, { name: "理科", value: 28 }]        },        {          name: "青海",          value: [{ name: "文科", value: 5 }, { name: "理科", value: 5 }]        },        {          name: "宁夏",          value: [{ name: "文科", value: 10 }, { name: "理科", value: 8 }]        },        {          name: "新疆",          value: [{ name: "文科", value: 36 }, { name: "理科", value: 31 }]        },        {          name: "广东",          value: [{ name: "文科", value: 63 }, { name: "理科", value: 60 }]        },        {          name: "广西",          value: [{ name: "文科", value: 29 }, { name: "理科", value: 30 }]        },        {          name: "海南",          value: [{ name: "文科", value: 8 }, { name: "理科", value: 6 }]        }      ];      /*获取地图数据*/      let myChart = this.$echarts.init(document.getElementById("map"));      // myChart.showLoading();      var mapFeatures = this.$echarts.getMap(mapName).geoJson.features;      // myChart.hideLoading();      mapFeatures.forEach(function(v) {        // 地区名称        var name = v.properties.name;        // 地区经纬度        geoCoordMap[name] = v.properties.cp;      });      // console.log(data);      // console.log(toolTipData);      var max = 480,min = 9; // todo      var maxSize4Pin = 100,minSize4Pin = 20;      var convertData = function(data) {        var res = [];        for (var i = 0; i < data.length; i++) {          var geoCoord = geoCoordMap[data[i].name];          if (geoCoord) {            res.push({              name: data[i].name,              value: geoCoord.concat(data[i].value)            });          }        }        return res;      };      var option = {        tooltip: {          trigger: "item",          formatter: function(params) {            if (typeof params.value[2] == "undefined") {              var toolTiphtml = "";              for (var i = 0; i < toolTipData.length; i++) {                if (params.name == toolTipData[i].name) {                  toolTiphtml += toolTipData[i].name + ":<br>";                  for (var j = 0; j < toolTipData[i].value.length; j++) {                    toolTiphtml +=                      toolTipData[i].value[j].name +                      ":" +                      toolTipData[i].value[j].value +                      "<br>";                  }                }              }              // console.log(toolTiphtml);              console.log(convertData(data))              return toolTiphtml;            } else {              var toolTiphtml = "";              for (var i = 0; i < toolTipData.length; i++) {                if (params.name == toolTipData[i].name) {                  toolTiphtml += toolTipData[i].name + ":<br>";                  for (var j = 0; j < toolTipData[i].value.length; j++) {                    toolTiphtml +=                      toolTipData[i].value[j].name +                      ":" +                      toolTipData[i].value[j].value +                      "<br>";                  }                }              }              console.log(toolTiphtml);              // console.log(convertData(data))              return toolTiphtml;            }          }        },        //这个属性控制地图的多彩板块        visualMap: {          show: true,          min: 0,          max: 200,          left: 400,          bottom: 200,          text: ["高", "低"], // 文本,默认为数值文本          calculable: true,          seriesIndex: [1],          inRange: {            // color: ['#3B5077', '#031525'] // 蓝黑            // color: ['#ffc0cb', '#800080'] // 红紫            // color: ['#3C3B3F', '#605C3C'] // 黑绿            // color: ['#0f0c29', '#302b63', '#24243e'] // 黑紫黑            // color: ['#23074d', '#cc5333'] // 紫红            color: ["#00467F", "#A5CC82"] // 蓝绿            // color: ['#1488CC', '#2B32B2'] // 浅蓝            // color: ['#00467F', '#A5CC82'] // 蓝绿            // color: ['#00467F', '#A5CC82'] // 蓝绿            // color: ['#00467F', '#A5CC82'] // 蓝绿            // color: ['#00467F', '#A5CC82'] // 蓝绿          }        },        geo: {          show: true,          map: mapName,          label: {            normal: {              show: false            },            emphasis: {              show: false            }          },          roam: true,          itemStyle: {            normal: {              areaColor: "#031525",              borderColor: "#3B5077"            },            emphasis: {              areaColor: "#2B91B7"            }          }        },        series: [        //1)全省的散点          {            name: "散点",            type: "scatter",            coordinateSystem: "geo",            data: convertData(data),            symbolSize: function(val) {              return val[2] / 10;            },            label: {              normal: {                formatter: "{b}",                position: "right",                show: true              },              emphasis: {                show: true              }            },            itemStyle: {              normal: {                color: "#05C3F9"              }            }          },          // 2)为了与visualMap配对,必须要加上          {            type: "map",            map: mapName,            geoIndex: 0,            aspectScale: 0.75, //长宽比            showLegendSymbol: false, // 存在legend时显示            label: {              normal: {                show: true              },              emphasis: {                show: false,                textStyle: {                  color: "#fff"                }              }            },            roam: true,            itemStyle: {              normal: {                areaColor: "#031525",                borderColor: "#3B5077"              },              emphasis: {                areaColor: "#2B91B7"              }            },            animation: false,            data: data          },          //3)气泡          {            name: "点",            type: "scatter",            coordinateSystem: "geo",            symbol: "pin", //气泡            symbolSize: function(val) {              var a = (maxSize4Pin - minSize4Pin) / (max - min);              var b = minSize4Pin - a * min;              b = maxSize4Pin - a * max;              return a * val[2] + b;            },            label: {              normal: {                show: true,                textStyle: {                  color: "#fff",                  fontSize: 9                }              }            },            itemStyle: {              normal: {                color: "#F62157" //标志颜色              }            },            zlevel: 6,            data: convertData(data)          },          //4.前五个有效果的光圈          {            name: "Top 5",            type: "effectScatter",            coordinateSystem: "geo",            data: convertData(              data                .sort(function(a, b) {                  return b.value - a.value;                })                .slice(0, 5)            ),            symbolSize: function(val) {              return val[2] / 10;            },            showEffectOn: "render",            rippleEffect: {              brushType: "stroke"            },            hoverAnimation: true,            label: {              normal: {                formatter: "{b}",                position: "right",                show: true              }            },            itemStyle: {              normal: {                color: "yellow",                shadowBlur: 10,                shadowColor: "yellow"              }            },            zlevel: 1          }        ]      };      myChart.setOption(option);    });  }};</script> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425

第四种效果:下钻


下钻后:

遇到的比较难解决的问题:
从全国地图下钻到安徽省的地图,安徽省的地图会小很多,修改了数据和json包发现都不行,但别人的echarts安徽省的图可以,就是很奇怪,找不到原因。解决的办法就是不同的地图设置不用的中心点和缩放比例。

<template>    <div class="echartsMapAllDemo">        <!-- style的宽高一定要写,不写也不会展示echarts图 -->        <div id="myEcharts" ref="myEcharts" style="width:1000px;height:800px;border:3px solid gold"></div>    </div></template><script>import chinaJson from "../../assets/china.json";import anhui from '../../assets/province/anhui.json'import AQ from '../../assets/province/AQ.json'export default {  data() {    return {      //全国的数据和地理坐标      chinaData:[        { name: "北京", value: 177 },        { name: "天津", value: 42 },        { name: "河北", value: 102 },        { name: "山西", value: 81 },        { name: "内蒙古", value: 47 },        { name: "辽宁", value: 67 },        { name: "吉林", value: 82 },        { name: "黑龙江", value: 66 },        { name: "上海", value: 24 },        { name: "江苏", value: 92 },        { name: "浙江", value: 114 },        { name: "安徽", value: 109 },        { name: "福建", value: 116 },        { name: "江西", value: 91 },        { name: "山东", value: 119 },        { name: "河南", value: 137 },        { name: "湖北", value: 116 },        { name: "湖南", value: 114 },        { name: "重庆", value: 91 },        { name: "四川", value: 125 },        { name: "贵州", value: 62 },        { name: "云南", value: 83 },        { name: "西藏", value: 9 },        { name: "陕西", value: 80 },        { name: "甘肃", value: 56 },        { name: "青海", value: 10 },        { name: "宁夏", value: 18 },        { name: "新疆", value: 67 },        { name: "广东", value: 123 },        { name: "广西", value: 59 },        { name: "海南", value: 14 }      ],      chinaGeoCoordMap:{        上海: [121.472644, 31.231706],        云南: [102.712251, 25.040609],        内蒙古: [111.670801, 40.818311],        北京: [116.405285, 39.904989],        台湾: [121.509062, 25.044332],        吉林: [125.3245, 43.886841],        四川: [104.065735, 30.659462],        天津: [117.190182, 39.125596],        宁夏: [106.278179, 38.46637],        安徽: [117.283042, 31.86119],        山东: [117.000923, 36.675807],        山西: [112.549248, 37.857014],        广东: [113.280637, 23.125178],        广西: [108.320004, 22.82402],        新疆: [87.617733, 43.792818],        江苏: [118.767413, 32.041544],        江西: [115.892151, 28.676493],        河北: [114.502461, 38.045474],        河南: [113.665412, 34.757975],        浙江: [120.153576, 30.287459],        海南: [110.33119, 20.031971],        湖北: [114.298572, 30.584355],        湖南: [112.982279, 28.19409],        澳门: [113.54909, 22.198951],        甘肃: [103.823557, 36.058039],        福建: [119.306239, 26.075302],        西藏: [91.132212, 29.660361],        贵州: [106.713478, 26.578343],        辽宁: [123.429096, 41.796767],        重庆: [106.504962, 29.533155],        陕西: [108.948024, 34.263161],        青海: [101.778916, 36.623178],        香港: [114.173355, 22.320048],        黑龙江: [126.642464, 45.756967]      },      //安徽的数据和地理坐标      anhuiData:[        { name: '合肥市', value: 19 },        { name: '淮南市', value: 14 },        { name: '芜湖市', value: 19 },        { name: '蚌埠市', value: 12 },        { name: '马鞍山市', value: 19 },        { name: '淮北市', value: 15 },        { name: '铜陵市', value: 19 },        { name: '安庆市', value: 14 },        { name: '黄山市', value: 19 },        { name: '滁州市', value: 12 },        { name: '阜阳市', value: 19 },        { name: '宿州市', value: 15 },        { name: '六安市', value: 19 },        { name: '亳州市', value: 14 },        { name: '宣城市', value: 19 },      ],      anhuiGeoCoordMap:{        合肥市: [117.283042, 31.86119],        淮南市: [117.018329, 32.647574],        芜湖市: [118.376451, 31.326319],        蚌埠市: [117.363228, 32.939667],        马鞍山市: [118.507906, 31.689362],        淮北市: [116.794664, 33.971707],        铜陵市: [117.816576, 30.929935],        安庆市: [117.043551, 30.50883],        黄山市: [118.317325, 29.709239],        滁州市: [118.316264, 32.303627],        阜阳市: [115.819729, 32.896969],        宿州市: [116.984084, 33.633891],        六安市: [116.507676, 31.752889],        亳州市: [115.782939, 33.869338],        宣城市: [118.757995, 30.945667],      }    }  },  mounted() {    let center = ''    let zoom = 1.2    this.chinaEcharts(chinaJson,this.chinaData,this.chinaGeoCoordMap,center,zoom);  },  methods: {    chinaEcharts(json,data,geoCoordMap,center,zoom) {      this.$echarts.registerMap("china", json);      let myChart = this.$echarts.init(this.$refs.myEcharts);      var convertData = (data)=> {        var res = [];        for (var i = 0; i < data.length; i++) {          var geoCoord = geoCoordMap[data[i].name];          if (geoCoord) {            res.push({              name: data[i].name,              value: geoCoord.concat(data[i].value)            });          }        }        // console.log(res)        return res;      };      let option = {        backgroundColor: "transparent",        title: {          text: "全国主要城市空气质量",          subtext: "data from PM25.in",          sublink: "http://www.pm25.in",          left: "center",          textStyle: {            color: "#fff"          }        },        tooltip: {          trigger: "item"        },        geo: {          show: true,          map: "china",          center: center,          label: {            normal: {              show: true            },            emphasis: {              show: false            }          },          itemStyle: {            normal: {              areaColor: "#031525",              borderColor: "#3B5077"            },            emphasis: {              areaColor: "#2B91B7"            }          },          roam: true,//平移和鼠标缩放          zoom: zoom,//倍数放大          // 去掉南海诸岛          regions: [            {              name: "南海诸岛",              itemStyle: {                // 隐藏地图                normal: {                  opacity: 0, // 为 0 时不绘制该图形                }              },              label: {                show: false // 隐藏文字              }            }          ]        },        //series就是地图上的数据(去掉就没有数据了)        series: [          //所有的市          {            name: "pm2.5",            type: "effectScatter",            coordinateSystem: "geo",            data: convertData(data),            symbolSize: function(val) {              return val[2] / 10;            },            //这几个样式一定要加,加上才有那种光圈的效果            showEffectOn: "render",            rippleEffect: {              brushType: "stroke"            },            hoverAnimation: true,                        label: {              formatter: "{b}",              position: "right",              show: true            },            //圆点的样式            itemStyle: {              color: "#ddb926"            },            emphasis: {              label: {                show: true              }            }          }        ]      };      myChart.setOption(option,true);      myChart.on("click", (parms)=> {        if(parms.name == "安徽"){          let center = [117.283042, 31.86119]          let zoom = 3          this.chinaEcharts(anhui,this.anhuiData,this.anhuiGeoCoordMap,center,zoom)        }else if (parms.name == "蚌埠市") {          chinaEcharts(BB, BBData);        } else if (parms.name == "宿州市") {          chinaEcharts(SZ, SZData);        } else if (parms.name == "淮北市") {          chinaEcharts(HB, HBData);        } else if (parms.name == "亳州市") {          chinaEcharts(HZ, HZData);        } else if (parms.name == "淮南市") {          chinaEcharts(HN, HNData);        } else if (parms.name == "阜阳市") {          chinaEcharts(FY, FYData);        } else if (parms.name == "六安市") {          chinaEcharts(LA, LAData);        } else if (parms.name == "合肥市") {          chinaEcharts(HF, HFData);        } else if (parms.name == "滁州市") {          chinaEcharts(CZS, CZSData);        } else if (parms.name == "安庆市") {          chinaEcharts(AQ, AQData);        } else if (parms.name == "池州市") {          chinaEcharts(CZ, CZData);        } else if (parms.name == "铜陵市") {          chinaEcharts(TL, TLData);        } else if (parms.name == "芜湖市") {          chinaEcharts(WF, WFData);        } else if (parms.name == "马鞍山市") {          chinaEcharts(MAS, MASData);        } else if (parms.name == "黄山市") {          chinaEcharts(HS, HSData);        } else if (parms.name == "宣城市") {          chinaEcharts(XC, XCData);        } else {          chinaEcharts(AHS, AHSData);        }      });      window.addEventListener("resize", function() {        myChart.resize();      });    }  }};</script><style lang="less">.echartsMapAllDemo {}</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288

第五中效果:通过安装 province-city-china/data 动态获取全国全省,各市,各区的编号


页面效果其实很普通,不是说多惊艳,炫酷,只是这个引入全国,全省,全市json的方法很好,值得收藏。

安装 province-city-china 依赖。
npm i province-city-china -S
const { province, city } = require(‘province-city-china/data’);

同时在assets中引入文件,这样就可以动态的引入,自动区别哪个json的内容

 <template>   <div>       <div id="tool">        <span @click="goBackChina">{{firstTitle}}</span>        <span @click="goBackProvince">{{currentProvince.name}}</span>        <span @click="goBackCity">{{currentCity.name}}</span>      </div>      <div id="chinaMap"></div>   </div> </template> <script> import * as echarts from 'echarts';//  安装 province-city-china 依赖。 //  npm i province-city-china -Sconst { province, city } = require('province-city-china/data'); export default {  name: 'ChinaMain',  data() {    return {      firstTitle: '中国',      myChart: '',      currentClick: '',      currentProvince: {},      currentCity: {},      cityState: false,      provinceState: false    }  },  mounted() {    this.initEcharts("china", "中国");  },  methods: {    goBackChina() {      this.initEcharts("china", "中国");      this.currentProvince.name = '';      this.currentCity.name = '';    },    goBackProvince() {      this.initEcharts(this.currentProvince.province, this.currentProvince.name, "1");      this.currentCity.name = '';    },    goBackCity() {      this.initEcharts(this.currentCity.code, this.currentCity.name);    },    initEcharts(pName, Chinese_, state = "0") {      this.myChart = echarts.init(document.getElementById('chinaMap'));      let tmpSeriesData = [];      if (pName === "china") {        let geoJson = require('../../assets/mapdata/china.json');        echarts.registerMap(pName, geoJson);      } else {        if (this.currentClick === 'province' || state === "1") {          let geoJson = require(`../../assets/mapdata/geometryProvince/${pName}.json`);          echarts.registerMap(pName, geoJson);        } else {          let geoJson = require(`../../assets/mapdata/geometryCouties/${pName}.json`);          echarts.registerMap(pName, geoJson);        }      }      let option = {        series: [          {            name: Chinese_ || pName,            type: 'map',            mapType: pName,            roam: false,//是否开启鼠标缩放和平移漫游            itemStyle: {//地图区域的多边形 图形样式              normal: {//是图形在默认状态下的样式                label: {                  show: true,//是否显示标签                  textStyle: {                    color: "#303133",                    fontSize: '10px'                  }                }              },              emphasis: {//是图形在高亮状态下的样式,比如在鼠标悬浮或者图例联动高亮时                label: {                  show: true,                  textStyle: {                    fontSize: '14px'                  }                }              }            },            data: tmpSeriesData,//后端数据            top: "10%"//组件距离容器的距离          }        ]      };      this.myChart.setOption(option, true);      this.myChart.off("click");      if (pName === "china") { // 全国时,添加click 进入省级        this.currentClick = 'province'        this.myChart.on('click', this.mapClick);      } else {        this.currentClick = 'city'        this.myChart.on('click', this.mapClick);      }    },    //地图点击事件    mapClick(param) {      this.provinceState = false;      this.cityState = false;      if (this.currentClick === 'province') {        //遍历取到provincesText 中的下标  去拿到对应的省js        for (var i = 0; i < province.length; i++) {          if (param.name === province[i].name) {            this.provinceState = true;            this.currentProvince = { ...province[i] };            this.currentProvince.name = ` -->${this.currentProvince.name} `;            //显示对应省份的方法            this.showProvince(province[i].province, province[i].name);            break;          }        }        !this.provinceState ? alert('暂不支持该区域地图展示!') : '';      } else {        for (var l = 0; l < city.length; l++) {          if (param.name === city[l].name) {            this.cityState = true;            this.currentCity = { ...city[l] };            this.currentCity.name = ` -->${this.currentCity.name} `;            //显示对应城市的方法            this.showProvince(city[l].code, city[l].name);            break;          }        }        !this.cityState ? alert('暂不支持该区域地图展示!') : '';      }    },    showProvince(pName, Chinese_) {      this.initEcharts(pName, Chinese_);    }  }}</script><style lang="less">#tool {  height: 30px;  line-height: 30px;  color: deepskyblue;  cursor: pointer;  // position: absolute;  top: 10px;  left: 10px;  z-index: 10000;  font-size: 18px;  text-align: left;}#chinaMap {  width: 1000px;  height: 750px;}</style> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发