参考:https://www.cnblogs.com/mazey/p/7965698.html

重点:如何引入中国地图js文件,china.js

require('echarts/map/js/china')

  1. # 安装vue-cli
  2. npm install vue-cli -g
  3. # 初始化项目
  4. vue init webpack china-map
  5. # 切到目录下
  6. cd china-map
  7. # 安装项目依赖
  8. npm install
  9. # 安装 vuex
  10. npm install vuex --save
  11. # 安装 axios
  12. npm install axios --save
  13. # 安装 ECharts
  14. npm install echarts --save

二. 项目结构

  1. ├── index.html
  2. ├── main.js
  3. ├── components
  4. └── index.vue
  5. └── store
  6. ├── index.js # 组装模块及导出store的文件
  7. └── modules
  8. └── ChinaMap.js # 中国地图Vuex模块

三. 引入中国地图并绘制基本的图表

1.按需求引入与中国地图相关的Echarts图表和组。

  1. // 主模块
  2. let echarts = require('echarts/lib/echarts')
  3. // 散点图
  4. require('echarts/lib/chart/scatter')
  5. // 散点图放大
  6. require('echarts/lib/chart/effectScatter')
  7. // 地图
  8. require('echarts/lib/chart/map')
  9. // 图例
  10. require('echarts/lib/component/legend')
  11. // 提示框
  12. require('echarts/lib/component/tooltip')
  13. // 地图geo
  14. require('echarts/lib/component/geo')

2.引入中国地图JS文件,会自动注册地图;也可以通过axios方式引入json文件,需要手动注册echarts.registerMap('china', chinaJson.data)

  1. // 中国地图JS文件
  2. require('echarts/map/js/china')

3.准备一个有固定宽高的DOM容器并在mounted里面初始化一个echarts实例。

DOM容器

  1. <template>
  2. <div id="china-map"></div>
  3. </template>

初始化echarts实例

  1. let chinaMap = echarts.init(document.getElementById('china-map'))

4.设置初始化的空白地图,这里需要设置很多echarts参数,参考ECharts配置项手册

  1. chinaMap.setOption({
  2. backgroundColor: '#272D3A',
  3. // 标题
  4. title: {
  5. text: '中国地图闪闪发光',
  6. left: 'center',
  7. textStyle: {
  8. color: '#fff'
  9. }
  10. },
  11. // 地图上圆点的提示
  12. tooltip: {
  13. trigger: 'item',
  14. formatter: function (params) {
  15. return params.name + ' : ' + params.value[2]
  16. }
  17. },
  18. // 图例按钮 点击可选择哪些不显示
  19. legend: {
  20. orient: 'vertical',
  21. left: 'left',
  22. top: 'bottom',
  23. data: ['地区热度', 'top5'],
  24. textStyle: {
  25. color: '#fff'
  26. }
  27. },
  28. // 地理坐标系组件
  29. geo: {
  30. map: 'china',
  31. label: {
  32. // true会显示城市名
  33. emphasis: {
  34. show: false
  35. }
  36. },
  37. itemStyle: {
  38. // 地图背景色
  39. normal: {
  40. areaColor: '#465471',
  41. borderColor: '#282F3C'
  42. },
  43. // 悬浮时
  44. emphasis: {
  45. areaColor: '#8796B4'
  46. }
  47. }
  48. },
  49. // 系列列表
  50. series: [
  51. {
  52. name: '地区热度',
  53. // 表的类型 这里是散点
  54. type: 'scatter',
  55. // 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件
  56. coordinateSystem: 'geo',
  57. data: [],
  58. // 标记的大小
  59. symbolSize: 12,
  60. // 鼠标悬浮的时候在圆点上显示数值
  61. label: {
  62. normal: {
  63. show: false
  64. },
  65. emphasis: {
  66. show: false
  67. }
  68. },
  69. itemStyle: {
  70. normal: {
  71. color: '#ddb926'
  72. },
  73. // 鼠标悬浮的时候圆点样式变化
  74. emphasis: {
  75. borderColor: '#fff',
  76. borderWidth: 1
  77. }
  78. }
  79. },
  80. {
  81. name: 'top5',
  82. // 表的类型 这里是散点
  83. type: 'effectScatter',
  84. // 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件
  85. coordinateSystem: 'geo',
  86. data: [],
  87. // 标记的大小
  88. symbolSize: 12,
  89. showEffectOn: 'render',
  90. rippleEffect: {
  91. brushType: 'stroke'
  92. },
  93. hoverAnimation: true,
  94. label: {
  95. normal: {
  96. show: false
  97. }
  98. },
  99. itemStyle: {
  100. normal: {
  101. color: '#f4e925',
  102. shadowBlur: 10,
  103. shadowColor: '#333'
  104. }
  105. },
  106. zlevel: 1
  107. }
  108. ]
  109. })

四. 配置Vuex管理和分发数据

1.在ChinaMap.js中引入vuex和axios。

  1. import axios from 'axios'

2.设置必要的变量。

  1. const state = {
  2. geoCoordMap: {'香港特别行政区': [114.08, 22.2], '澳门特别行政区': [113.33, 22.13], '台北': [121.5, 25.03]/*等等*/},
  3. // 发光的城市
  4. showCityNumber: 5,
  5. showCount: 0,
  6. // 是否需要loading
  7. isLoading: true
  8. }

3.在actions中抓取后台数据并更新地图。

  1. const actions = {
  2. fetchHeatChinaRealData ({state, commit}, chartsObj) {
  3. axios.get('static/data/heatChinaRealData.json')
  4. .then(
  5. (res) => {
  6. let data = res.data
  7. let paleData = ((state, data) => {
  8. let arr = []
  9. let len = data.length
  10. while (len--) {
  11. let geoCoord = state.geoCoordMap[data[len].name]
  12. if (geoCoord) {
  13. arr.push({
  14. name: data[len].name,
  15. value: geoCoord.concat(data[len].value)
  16. })
  17. }
  18. }
  19. return arr
  20. })(state, data)
  21. let lightData = paleData.sort((a, b) => {
  22. return b.value - a.value
  23. }).slice(0, state.showCityNumber)
  24. chartsObj.setOption({
  25. series: [
  26. {
  27. name: '地区热度',
  28. data: paleData
  29. },
  30. {
  31. name: 'top5',
  32. data: lightData
  33. }
  34. ]
  35. })
  36. }
  37. )
  38. }
  39. }

此时npm run dev已经可以看到中国地图上闪闪的黄色小点点。 若想改变她使动态展示,可以在index.vue中mounted下面加上:

  1. chinaMap.showLoading(showLoadingDefault)
  2. this.$store.commit('openLoading')
  3. this.$store.dispatch('fetchHeatChinaRealData', chinaMap)
  4. setInterval(() => {
  5. this.$store.dispatch('fetchHeatChinaRealData', chinaMap)
  6. }, 1000)

在ChinaMap.js中actions的mutations中fetchHeatChinaRealData修改:

  1. let lightData = paleData.sort((a, b) => {
  2. return b.value - a.value
  3. }).slice(0 + state.showCount, state.showCityNumber + state.showCount)
  4. if (state.isLoading) {
  5. chartsObj.hideLoading()
  6. commit('closeLoading')
  7. }

五. 其它

1.别忘了在main.js里面引入Vuex。

  1. import Vue from 'vue'
  2. import Index from './components/index.vue'
  3. import store from './store/index'
  4. let ChinaMap = new Vue({
  5. el: '#app',
  6. store,
  7. template: '<Index/>',
  8. components: {Index}
  9. })
  10. Vue.use(ChinaMap)
  11.  
  12. 代码地址:https://github.com/zhaobao1830/vue-china-map

Vue 实现一个中国地图的更多相关文章

  1. vue + echart 实现中国地图 和 省市地图(可切换省份)

    一.中国地图 1.先导入echarts,然后再main.js里引入echarts // 引入echartsimport echarts from 'echarts'Vue.prototype.$ech ...

  2. vue使用echart中国地图

    /* 引入 ECharts (按需加载) 文档:http://echarts.baidu.com/tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD ...

  3. vue + echarts 实现中国地图 展示城市

    Demo 安装依赖 vue中安装echarts npm install echarts -S 在main.js中引用 import echarts from 'echarts'Vue.prototyp ...

  4. 一个中国地图的SVG,可以带参数

    <script src="http://files.cnblogs.com/files/LoveOrHate/jquery.min.js"></script> ...

  5. Vue3 + Echarts 5 绘制带有立体感流线中国地图,建议收藏

    本文绘制的地图效果图如下: 一.Echarts 使用五部曲 1.下载并引入 echarts Echarts 已更新到了 5.0 版本,安装完记得检查下自己的版本是否是 5.0 . npm instal ...

  6. echarts画中国地图并上色

    任务是画一个中国地图,并在指定区域上颜色,学姐说用arcgis画,乖乖,4个g的安装文件,算了, 还是echarts大法好..如果想熟悉这个牛X的工具,请移步https://www.w3cschool ...

  7. [前端随笔][JavaScript][自制数据可视化] “中国地图”

    说在前面 想自己实现一个可视化的中国地图(可以实现如用户来源省份数据统计功能),网上搜了一下,翻了几页几乎都是第三方库(如echarts.js)实现的,简直不能忍. 不是第三方库不好,只是要花时间去适 ...

  8. vue+vuex+axios+echarts画一个动态更新的中国地图

    一. 生成项目及安装插件 # 安装vue-cli npm install vue-cli -g # 初始化项目 vue init webpack china-map # 切到目录下 cd china- ...

  9. vue+echarts+datav大屏数据展示及实现中国地图省市县下钻

    随着前端技术的飞速发展,大数据时代的来临,我们在开发项目时越来越多的客户会要求我们做一个数据展示的大屏,可以直观的展示用户想要的数据,同时炫酷的界面也会深受客户的喜欢. 大屏展示其实就是一堆的图表能够 ...

随机推荐

  1. redis集群的测试

    原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html 1.测试存取值 客户端连接集群redis-cli需要带上 -c ,redis-cli - ...

  2. codeforces71A

    Way Too Long Words CodeForces - 71A XUPT_ACM的杨队是一个强迫症晚期的大神,他特别反感长单词,就像 "localization" 和&qu ...

  3. poj2082 Terrible Sets(单调栈)

    Description Let N be the set of all natural numbers {0 , 1 , 2 , . . . }, and R be the set of all re ...

  4. MySQL索引类型,优化,使用数据结构

    工欲善其事必先利其器 半藏说道:“若你在路途中遇到上帝,上帝也会被割伤.” 一.mysql 索引分类(默认使用B树结构)在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 My ...

  5. CodeForces - 707C

    C. Pythagorean Triples time limit per test 1 second memory limit per test 256 megabytes input standa ...

  6. MT【173】齐次消元单变量

    已知$x\ge0,x^2+(y-2)^2=1,W=\dfrac{3x^2+2\sqrt{3}xy+5y^2}{x^2+y^2}$,求$W$的最值. 提示:$x\ne0$时,设$t=\dfrac{y}{ ...

  7. mysql8.0+修改用户密码

    查看初始安装密码登陆: [root@VM_133_71_centos yum.repos.d]# cat /var/log/mysqld.log|grep 'A temporary password' ...

  8. Linux上case用法

    Linux上case用法示例: #!/bin/bash # This is a script for test case ASK_COUNT=$ #从参数获取该变量的值 # if [ -z " ...

  9. python自带的IDLE如何清屏

    作者:知乎用户 链接:https://www.zhihu.com/question/20917976/answer/32876441 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  10. Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...