vue引入echarts+map(地图)
vue引入echarts地图的三种方式
一、vue中引入echart
1、安装echarts: npm install echarts --save
2、在main.js文件中引入echarts实例: Vue.prototype.$echarts = echarts
3、在需要用到echart图形的vue文件中引入: import echarts from "echarts";
4、如果用到map(地图),还需要导入地图对应的的JS文件:
import \'../../../node_modules/echarts/map/js/province/yunnan.js\'
import \'../../../node_modules/echarts/map/js/province/fujian.js\'5、map(地图)对应的资源文件有两种,一种是导入JS文件,一种是读取JSON文件,在vue项目中,map对应的资源文件存在于node_moudles中的echarts文件夹,当然在vue中可以通过http请求去读取地图对应的JSON文件,但是要求JSON文件必须在static文件中,不然http请求失败。
二、项目的目录结构:
三、引入echarts的四种方式:
<template>
<div>
<div class="echarts">
<div class="box" ref="WorldEchart"></div>
<div class="box" ref="ChinaEchart"></div>
<div class="box" ref="YunnanEChart"></div>
<div class="box" ref="GuangXiEChart"></div>
</div>
</div>
</template>
<script>
import echarts from "echarts";
import \'../../../node_modules/echarts/map/js/province/yunnan.js\'
import \'../../../node_modules/echarts/map/js/province/fujian.js\'
export default {
data() {
return {
world: require(\'../../../node_modules/echarts/map/json/world.json\'), //地图json数据
}
},
mounted() {
this.ByRequired(this.world); //通过require读取json文件
this.ByStaticJson();//通过post请求方式读取json文件,但要求json文件必须在vue工程下的static文件夹
this.ByGeoRegister();//通过geo设置地图属性再注册到echart实例中
this.ByMapName();//通过直接设置 map: "地图名称", 这里需要注意世界地图和全国地图需要用world和china单词,各个
省会用中文,直接使用地图名称必须保证已经引入地图对应的js文件,即 import \'../../**/.js(推荐使用这种)},
beforeDestroy() {
if (!this.chart) {
return;
}
this.chart.dispose(); //销毁echart实例
this.chart = null;
},
methods: {
ByRequired(world){
this.$nextTick(()=>{
var myChart = this.$echarts.init(this.$refs.WorldEchart);
echarts.registerMap(\'dalian\', world,{});
myChart.setOption({
series: [{
name:\'大连市\',
label: {
normal: {
show: true,
},
emphasis: {
show: true
}
},
itemStyle: {
color: \'#ddb926\'
},
type: \'map\',
zoom: 1,//缩放比例能控制echart图形在dom中的大小
roam: true,
mapType: \'dalian\',
emphasis: {
label: {
show: true
}
},
// 文本位置修正
textFixed: {
Alaska: [20, -20]
},
data: [{
name: \'瓦房店市\',
value: 4822023
},
{
name: \'普兰店市\',
value: 731449
},
{
name: \'庄河市\',
value: 6553255
},
{
name: \'金州区\',
value: 949131
},
{
name: \'长海县\',
value: 8041430
},
{
name: \'甘井子区\',
value: 5187582
},
{
name: \'沙河口区\',
value: 3590347
},
{
name: \'西岗区\',
value: 917092
},
{
name: \'中山区\',
value: 632323
},
{
name: \'旅顺口区\',
value: 9317568
}
]
}],
//右下角数值条
visualMap: {
left: \'right\',
min: 1,
max: 100,
inRange: {
color: [\'#313695\', \'#4575b4\', \'#74add1\', \'#abd9e9\', \'#e0f3f8\', \'#ffffbf\', \'#fee090\', \'#fdae61\', \'#f46d43\', \'#d73027\', \'#a50026\']
},
//text: [\'High\', \'Low\'], // 文本,默认为数值文本
calculable: true
},
tooltip: {
trigger: \'item\',
showDelay: 0,
transitionDuration: 0.2,
formatter: function(params) {
var value = (params.value + \'\').split(\'.\');
value = value[0].replace(/(d{1,3})(?=(?:d{3})+(?!d))/g, \'$1,\');
return params.seriesName + \'<br/>\' + params.name + \': \' + value;
}
},
});
})
},
ByStaticJson() {
let myChartbyjson = echarts.init(this.$refs.ChinaEchart); //这里是为了获得容器所在位置
var mapJsonPath = "/static/china.json"; //json文件的相对路径
$.get(mapJsonPath, function(mapJson) {
echarts.registerMap("china", mapJson); // 注册地图
let option = {
zoom:2,
series: [{
name: this.selCity,
itemStyle:{
normal:{
label:{
show:true,
textStyle: {
color: "#231816"
}
},
areaStyle:{color:\'#B1D0EC\'},
color:\'#ff0000\',
borderColor:\'#dadfde\'//区块的边框颜色
},
emphasis:{//鼠标hover样式
label:{
show:true,
textStyle:{
color:\'#fa4f04\'
}
}
}
},
type: "map",
mapType: "china", // 自定义扩展图表类型
label: {
show: true,
},
}, ],
};
myChartbyjson.setOption(option);
myChartbyjson.on(\'click\', function (param) {
alert(param.name);
//遍历取到provincesText 中的下标 去拿到对应的省js
for(var i= 0 ; i < provincesText.length ; i++ ){
if(param.name == provincesText[i]){
//显示对应省份的方法
// showProvince(provinces[i]) ;
showProvince(provinces[i],provincesText[i])
break ;
}
}
});
});
},
ByGeoRegister() {
let myChart = echarts.init(this.$refs.YunnanEChart); //这里是为了获得容器所在位置
window.onresize = myChart.resize;
myChart.setOption({ // 进行相关配置
backgroundColor: "#02AFDB",
tooltip: {}, // 鼠标移到图里面的浮动提示框
dataRange: {
show: false,
min: 0,
max: 1000,
text: [\'High\', \'Low\'],
realtime: true,
calculable: true,
color: [\'orangered\', \'yellow\', \'lightskyblue\']
},
geo: { // 这个是重点配置区
map: \'云南\', // 表示中国地图
roam: true,
label: {
normal: {
show: true, // 是否显示对应地名
textStyle: {
color: \'rgba(0,0,0,0.4)\'
}
}
},
itemStyle: {
normal: {
borderColor: \'rgba(0, 0, 0, 0.2)\'
},
emphasis: {
areaColor: null,
shadowOffsetX: 0,
shadowOffsetY: 0,
shadowBlur: 20,
borderWidth: 0,
shadowColor: \'rgba(0, 0, 0, 0.5)\'
}
}
},
series: [{
type: \'scatter\',
coordinateSystem: \'geo\' // 对应上方配置
},
{
name: \'启动次数\', // 浮动框的标题
type: \'map\',
geoIndex: 0,
data: [{
"name": "北京",
"value": 599
}, {
"name": "上海",
"value": 142
}, {
"name": "黑龙江",
"value": 44
}, {
"name": "深圳",
"value": 92
}, {
"name": "湖北",
"value": 810
}, {
"name": "四川",
"value": 453
}]
}
]
})
},
ByMapName() {
let that = this;
this.mychart = this.$echarts.init(this.$refs.GuangXiEChart);
// 绘制图表
this.mychart.setOption({
backgroundColor: "#404a59",
zoom:2,
title: {
text: "福建",
top: 25,
left: "center",
textStyle: {
fontSize: 25,
fontWeight: 650,
color: "#fff",
},
},
tooltip: {
trigger: "item",
formatter: function(val) {
return "<br>人数: " + 1 + "人";
},
},
toolbox: {
show: true,
orient: "vertical",
left: "right",
top: "center",
feature: {
dataView: {
readOnly: false
},
restore: {},
saveAsImage: {},
},
},
series: [{
type: "map",
map: "福建", //这里需要注意呀,
//mapType: "浙江",
// 是否开启鼠标缩放和平移漫游 默认不开启
itemStyle: {
normal: {
areaColor: "#323c48",
borderColor: "#111",
},
emphasis: {
areaColor: "#2a333d",
label: {
show: true,
color: "white",
},
},
},
roam: true,
top: 70,
label: {
show: true, // 是否显示对应地名
},
data: this.cityDatas,
}, ],
});
this.mychart.on("click", function(params) { //地图添加点击事件,当点击区域块的时候,params.name能够取到区域的名称:云南,北京...
alert(params.data.code);
console.log(JSON.stringify(params));
});
}
}
}
</script>
<style>
.echarts{
position:absolute;
top:0;
left:0;
width: 100%;
height:100%;
}
.box{
width: 50%;
height: 50%;
float:left;
line-height: inherit;
}
</style>
四、界面渲染效果:
以上是 vue引入echarts+map(地图) 的全部内容, 来源链接: utcz.com/z/376545.html