vue+vuex+axios+echarts画一个动态更新的中国地图
一. 生成项目及安装插件
# 安装vue-cli
npm install vue-cli -g
# 初始化项目
vue init webpack china-map
# 切到目录下
cd china-map
# 安装项目依赖
npm install
# 安装 vuex
npm install vuex --save
# 安装 axios
npm install axios --save
# 安装 ECharts
npm install echarts --save
二. 项目结构
├── index.html
├── main.js
├── components
│ └── index.vue
└── store
├── index.js # 组装模块及导出store的文件
└── modules
└── ChinaMap.js # 中国地图Vuex模块
三. 引入中国地图并绘制基本的图表
1.按需求引入与中国地图相关的Echarts图表和组。
// 主模块
let echarts = require('echarts/lib/echarts')
// 散点图
require('echarts/lib/chart/scatter')
// 散点图放大
require('echarts/lib/chart/effectScatter')
// 地图
require('echarts/lib/chart/map')
// 图例
require('echarts/lib/component/legend')
// 提示框
require('echarts/lib/component/tooltip')
// 地图geo
require('echarts/lib/component/geo')
2.引入中国地图JS文件,会自动注册地图;也可以通过axios方式引入json文件,需要手动注册echarts.registerMap('china', chinaJson.data)。
// 中国地图JS文件
require('echarts/map/js/china')
3.准备一个有固定宽高的DOM容器并在mounted里面初始化一个echarts实例。
DOM容器
<template>
<div id="china-map"></div>
</template>
初始化echarts实例
let chinaMap = echarts.init(document.getElementById('china-map'))
4.设置初始化的空白地图,这里需要设置很多echarts参数,参考ECharts配置项手册。
chinaMap.setOption({
backgroundColor: '#272D3A',
// 标题
title: {
text: '中国地图闪闪发光',
left: 'center',
textStyle: {
color: '#fff'
}
},
// 地图上圆点的提示
tooltip: {
trigger: 'item',
formatter: function (params) {
return params.name + ' : ' + params.value[2]
}
},
// 图例按钮 点击可选择哪些不显示
legend: {
orient: 'vertical',
left: 'left',
top: 'bottom',
data: ['地区热度', 'top5'],
textStyle: {
color: '#fff'
}
},
// 地理坐标系组件
geo: {
map: 'china',
label: {
// true会显示城市名
emphasis: {
show: false
}
},
itemStyle: {
// 地图背景色
normal: {
areaColor: '#465471',
borderColor: '#282F3C'
},
// 悬浮时
emphasis: {
areaColor: '#8796B4'
}
}
},
// 系列列表
series: [
{
name: '地区热度',
// 表的类型 这里是散点
type: 'scatter',
// 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件
coordinateSystem: 'geo',
data: [],
// 标记的大小
symbolSize: 12,
// 鼠标悬浮的时候在圆点上显示数值
label: {
normal: {
show: false
},
emphasis: {
show: false
}
},
itemStyle: {
normal: {
color: '#ddb926'
},
// 鼠标悬浮的时候圆点样式变化
emphasis: {
borderColor: '#fff',
borderWidth: 1
}
}
},
{
name: 'top5',
// 表的类型 这里是散点
type: 'effectScatter',
// 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件
coordinateSystem: 'geo',
data: [],
// 标记的大小
symbolSize: 12,
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
label: {
normal: {
show: false
}
},
itemStyle: {
normal: {
color: '#f4e925',
shadowBlur: 10,
shadowColor: '#333'
}
},
zlevel: 1
}
]
})
四. 配置Vuex管理和分发数据
1.在ChinaMap.js中引入vuex和axios。
import axios from 'axios'
2.设置必要的变量。
const state = {
geoCoordMap: {'香港特别行政区': [114.08, 22.2], '澳门特别行政区': [113.33, 22.13], '台北': [121.5, 25.03]/*等等*/},
// 发光的城市
showCityNumber: 5,
showCount: 0,
// 是否需要loading
isLoading: true
}
3.在actions中抓取后台数据并更新地图。
const actions = {
fetchHeatChinaRealData ({state, commit}, chartsObj) {
axios.get('static/data/heatChinaRealData.json')
.then(
(res) => {
let data = res.data
let paleData = ((state, data) => {
let arr = []
let len = data.length
while (len--) {
let geoCoord = state.geoCoordMap[data[len].name]
if (geoCoord) {
arr.push({
name: data[len].name,
value: geoCoord.concat(data[len].value)
})
}
}
return arr
})(state, data)
let lightData = paleData.sort((a, b) => {
return b.value - a.value
}).slice(0, state.showCityNumber)
chartsObj.setOption({
series: [
{
name: '地区热度',
data: paleData
},
{
name: 'top5',
data: lightData
}
]
})
}
)
}
}
此时npm run dev已经可以看到中国地图上闪闪的黄色小点点。 若想改变她使动态展示,可以在index.vue中mounted下面加上:
chinaMap.showLoading(showLoadingDefault)
this.$store.commit('openLoading')
this.$store.dispatch('fetchHeatChinaRealData', chinaMap)
setInterval(() => {
this.$store.dispatch('fetchHeatChinaRealData', chinaMap)
}, 1000)
在ChinaMap.js中actions的mutations中fetchHeatChinaRealData修改:
let lightData = paleData.sort((a, b) => {
return b.value - a.value
}).slice(0 + state.showCount, state.showCityNumber + state.showCount)
if (state.isLoading) {
chartsObj.hideLoading()
commit('closeLoading')
}
五. 其它
1.别忘了在main.js里面引入Vuex。
import Vue from 'vue'
import Index from './components/index.vue'
import store from './store/index'
let ChinaMap = new Vue({
el: '#app',
store,
template: '<Index/>',
components: {Index}
})
Vue.use(ChinaMap)
2.案例代码
vue+vuex+axios+echarts画一个动态更新的中国地图
vue+vuex+axios+echarts画一个动态更新的中国地图的更多相关文章
- Vue中使用ECharts画散点图加均值线与阴影区域
[本文出自天外归云的博客园] 需求 1. Vue中使用ECharts画散点图 2. 在图中加入加均值线 3. 在图中标注出阴影区域 实现 实现这个需求,要明确两点: 1. 知道如何在vue中使用ech ...
- 使用echarts画一个类似组织结构图的图表
昨天,写了一篇关于圆环进度条的博客(请移步:Vue/React圆环进度条),已经烦不胜烦,今天又遇到了需要展示类似公司的组织结构图的功能需求,要冒了!!! 这种需求,自己用div+css也是可以实现的 ...
- vue中使用echarts画饼状图
echarts的中文文档地址:https://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20EC ...
- Vue3 + Echarts 5 绘制带有立体感流线中国地图,建议收藏
本文绘制的地图效果图如下: 一.Echarts 使用五部曲 1.下载并引入 echarts Echarts 已更新到了 5.0 版本,安装完记得检查下自己的版本是否是 5.0 . npm instal ...
- echarts 如何在世界地图中绘制中国地图
1.导入 world.china.js 这个js是将world.js 文件 以及china.js文件进行合并 (网上一些中国地图勾勒的身份曲线感觉很飘 所以自己加工了一下china.js中的数据, ...
- 在vue中使用Echarts画曲线图(异步加载数据)
现实的工作中, 数据不可能写死的,所有的数据都应该通过发送请求进行获取. 所以本项目的需求是请求服务器获得二维数组,并生成曲线图.曲线图的横纵坐标均从获得的数据中取得. Echarts官方文档: ht ...
- vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据
在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-se ...
- lucene.net的一个动态更新类
工作的需要,需要对于lucene.net索引即时的更新,毕竟lucene.net的索引重建的话比较慢,数据量大的时候建下要几天,所以就写个了缓冲类来解决即时的更新的问题,其实还是比较简单的. 大体上的 ...
- vue+vux-ui+axios+mock搭建一个简单vue框架
1.首先感谢同事 2.之前一直在做angularjs的项目,目前vue火热,所以自己搭建了一个的vue框架,在此作为记录 vue+vux-ui这里就不介绍了,有很多博客都写的很详细了. 下面简单记录下 ...
随机推荐
- 【Learning】插头DP
简介 插头DP(轮廓线DP)是用来解决网格图回路问题的一种算法. 插头DP解决的经典问题就是统计经过所有格子的哈密顿回路条数,某些格子有障碍. 如果问题稍微进阶一点的话,不一定要求路径是回路.路径 ...
- Linux内核分析实验三----跟踪分析Linux内核的启动过程
一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_ker ...
- [POI2012]STU-Well
题意翻译 给定一个非负整数序列A,每次操作可以选择一个数然后减掉1,要求进行不超过m次操作使得存在一个Ak=0且max(∣xi−xi−1∣)最小,输出这个最小值以及此时最小的k (1≤n≤1 000 ...
- javascript实现div的显示和隐藏
http://www.cnblogs.com/oec2003/archive/2007/05/05/736492.html <html> <head> <meta htt ...
- bootstrap.yml与application.yml的区别
说明:其实yml和properties文件是一样的原理,主要是说明application和bootstrap的加载顺序.且一个项目上要么yml或者properties,二选一的存在. Bootstra ...
- 执行ldconfig命令后报错的解决过程:ldconfig: 目录 /lib 中的 libpng.so 和 libpng15.so.15.13.0 的 so 名称相同但类型不同。
执行ldconfig命令后报错: 目录 /lib 中的 libpng.so 和 libpng15.so.15.13.0 的 so 名称相同但类型不同. 解决过程: mv /lib/libpng.so ...
- python中的模块及路径(2)
如果我们要添加自己的搜索目录,有两种方法: 一是直接修改sys.path,添加要搜索的目录: >>> import sys >>> sys.path.append( ...
- JS正则表达式验证手机号和邮箱
一.验证手机号 function isPoneAvailable(poneInput) { var myreg=/^[1][3,4,5,7,8][0-9]{9}$/; if (!myreg.test( ...
- day9 类、对象、包
结构化编程中,程序围绕要解决的问题来设计. 面向对象编程,围绕要解决问题的对象来设计. 万物皆对象,对象因关注而产生!!! 类——抽取具有相同属性和行为的对象. 属性就是对象身上的值数据,行为就是对象 ...
- Windows 2012 R2 安装net4.6.1
下载并安装Net4.6.1 根据提示下载如下,并安装 https://support.microsoft.com/zh-cn/help/2919355/windows-rt-8-1--windows- ...