vue+echarts实现地图航线
第一步:echarts的安装。
npm install echarts --save
第二步:在vue项目中的main.js中进行导入echarts,放在其原型上方便利用。
// main.js 中
import echarts from 'echarts'
Vue.prototype.$echarts = echarts // 全局注册 ECharts 组件
<template>
<div id="app">
<div id="mapBox" ref="mapBox" />
</div>
</template>
<script>
// 导入中国地图的JS文件
import '@/assets/china'
var geoCoordMap = {
'上海': [121.4648, 31.2891],
'乌鲁木齐': [87.9236, 43.5883],
'兰州': [103.5901, 36.3043],
'北京': [116.4551, 40.2539],
'南京': [118.8062, 31.9208],
'南宁': [108.479, 23.1152],
'南昌': [116.0046, 28.6633],
'南通': [121.1023, 32.1625],
'厦门': [118.1689, 24.6478],
'合肥': [117.29, 32.0581],
'呼和浩特': [111.4124, 40.4901],
'咸阳': [108.4131, 34.8706],
'哈尔滨': [127.9688, 45.368],
'大连': [122.2229, 39.4409],
'天津': [117.4219, 39.4189],
'太原': [112.3352, 37.9413],
'威海': [121.9482, 37.1393],
'宁波': [121.5967, 29.6466],
'广州': [113.5107, 23.2196],
'成都': [103.9526, 30.7617],
'扬州': [119.4653, 32.8162],
'拉萨': [91.1865, 30.1465],
'昆明': [102.9199, 25.4663],
'杭州': [119.5313, 29.8773],
'株洲': [113.5327, 27.0319],
'武汉': [114.3896, 30.6628],
'汕头': [117.1692, 23.3405],
'沈阳': [123.1238, 42.1216],
'济南': [117.1582, 36.8701],
'济宁': [116.8286, 35.3375],
'海口': [110.3893, 19.8516],
'淮安': [118.927, 33.4039],
'深圳': [114.5435, 22.5439],
'温州': [120.498, 27.8119],
'烟台': [120.7397, 37.5128],
'珠海': [113.7305, 22.1155],
'石家庄': [114.4995, 38.1006],
'福州': [119.4543, 25.9222],
'秦皇岛': [119.2126, 40.0232],
'绍兴': [120.564, 29.7565],
'苏州': [120.6519, 31.3989],
'西宁': [101.4038, 36.8207],
'西安': [109.1162, 34.2004],
'贵阳': [106.6992, 26.7682],
'郑州': [113.4668, 34.6234],
'重庆': [107.7539, 30.1904],
'银川': [106.3586, 38.1775],
'长春': [125.8154, 44.2584],
'长沙': [113.0823, 28.2568],
'青岛': [120.4651, 36.3373]
}
var BJData = [
[{ name: '北京' }, { name: '深圳', value: 71 }],
[{ name: '北京' }, { name: '重庆', value: 64 }],
[{ name: '北京' }, { name: '广州', value: 58 }],
[{ name: '北京' }, { name: '长沙', value: 29 }],
[{ name: '北京' }, { name: '海口', value: 28 }],
[{ name: '北京' }, { name: '南京', value: 25 }],
[{ name: '北京' }, { name: '武汉', value: 23 }],
[{ name: '北京' }, { name: '南昌', value: 23 }],
[{ name: '北京' }, { name: '烟台', value: 21 }],
[{ name: '北京' }, { name: '温州', value: 17 }],
[{ name: '北京' }, { name: '沈阳', value: 14 }],
[{ name: '北京' }, { name: '西宁', value: 13 }],
[{ name: '北京' }, { name: '合肥', value: 9 }],
[{ name: '北京' }, { name: '呼和浩特', value: 9 }],
[{ name: '北京' }, { name: '南通', value: 8 }],
[{ name: '北京' }, { name: '乌鲁木齐', value: 1 }],
[{ name: '北京' }, { name: '兰州', value: 15 }]
]
var SHData = [
[{ name: '上海' }, { name: '深圳', value: 136 }],
[{ name: '上海' }, { name: '北京', value: 132 }],
[{ name: '上海' }, { name: '广州', value: 117 }],
[{ name: '上海' }, { name: '厦门', value: 65 }],
[{ name: '上海' }, { name: '哈尔滨', value: 61 }],
[{ name: '上海' }, { name: '成都', value: 59 }],
[{ name: '上海' }, { name: '大连', value: 55 }],
[{ name: '上海' }, { name: '重庆', value: 53 }],
[{ name: '上海' }, { name: '西安', value: 49 }],
[{ name: '上海' }, { name: '沈阳', value: 49 }],
[{ name: '上海' }, { name: '青岛', value: 48 }],
[{ name: '上海' }, { name: '长春', value: 47 }],
[{ name: '上海' }, { name: '长沙', value: 32 }],
[{ name: '上海' }, { name: '天津', value: 30 }],
[{ name: '上海' }, { name: '昆明', value: 30 }],
[{ name: '上海' }, { name: '武汉', value: 27 }],
[{ name: '上海' }, { name: '太原', value: 24 }],
[{ name: '上海' }, { name: '乌鲁木齐', value: 4 }],
[{ name: '上海' }, { name: '兰州', value: 14 }]
]
var GZData = [
[{ name: '广州' }, { name: '上海', value: 153 }],
[{ name: '广州' }, { name: '北京', value: 138 }],
[{ name: '广州' }, { name: '杭州', value: 104 }],
[{ name: '广州' }, { name: '成都', value: 89 }],
[{ name: '广州' }, { name: '重庆', value: 84 }],
[{ name: '广州' }, { name: '南京', value: 75 }],
[{ name: '广州' }, { name: '昆明', value: 62 }],
[{ name: '广州' }, { name: '西安', value: 62 }],
[{ name: '广州' }, { name: '海口', value: 58 }],
[{ name: '广州' }, { name: '郑州', value: 51 }],
[{ name: '广州' }, { name: '武汉', value: 49 }],
[{ name: '广州' }, { name: '天津', value: 39 }],
[{ name: '广州' }, { name: '青岛', value: 36 }],
[{ name: '广州' }, { name: '济南', value: 35 }],
[{ name: '广州' }, { name: '宁波', value: 34 }],
[{ name: '广州' }, { name: '乌鲁木齐', value: 23 }],
[{ name: '广州' }, { name: '兰州', value: 25 }]
]
// 航线上的飞机模型的矢量图
var planePath = 'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z'
export default {
name: 'App',
mounted() {
this.initMap()
},
methods: {
// 用于返回起点名字、终点名字、起点坐标、终点坐标
returnCoords(data) {
const result = []
for (let i = 0; i < data.length; i++) {
const fromcoords = geoCoordMap[data[i][0]['name']]
const tocoords = geoCoordMap[data[i][1]['name']]
result.push({
fromname: data[i][0]['name'],
toname: data[i][1]['name'],
coords: [fromcoords, tocoords],
value: data[i][1]['value']
})
}
return result
},
// 返回航线和飞机的颜色:三种颜色(起点为广州的、上海的、北京的)
returnColor(index) {
return index === 0 ? '#6beef4' : (index === 1 ? '#ecc021' : '#73fa3b')
},
// 初始化
initMap() {
const series = [];
[GZData, SHData, BJData].forEach((item, index) => {
series.push({
type: 'lines', // series.type = "lines"表名是想渲染模拟迁徙的模板
name: index === 0 ? '广州' : (index === 1 ? '上海' : '北京'), // 鼠标hover到航线上去显示不同的内容
zlevel: index === 0 ? 0 : (index === 1 ? 1 : 2), // zleve控制飞机的图标的分层
effect: {
show: true,
symbol: planePath, // 把矢量图planPath赋值给symbol
symbolSize: 18 // 控制矢量图的大小
},
// 线条的样式
lineStyle: {
curveness: 0.2, // 控制线条的弯曲度
color: this.returnColor(index), // 不同的起点显示不同的线条样式
width: 3 // 线条的宽度
},
data: this.returnCoords(item) // 所有的航线起始地点的数据
})
})
this.myEcharts = this.$echarts.init(this.$refs.mapBox, 'dark')
const option = {
title: {
text: '中国航空航线图' // 整个的标题
},
// geo用于显示地图坐标
geo: {
map: 'china', // 导入的china.js,该文件中注册的china地图。
zoom: 1.2, // 默认显示的缩放倍数
roam: true, // 是否开启鼠标的缩放
scaleLimit: { // 控制鼠标缩放的最小倍数,最大倍数
min: 1,
max: 1
},
label: {
show: true, // 控制省份名称的显示隐藏
offset: [0, 0], // 控制省份名称的偏移量
color: 'white' // 省份名称的字体颜色
},
// 板块的颜色
itemStyle: {
areaColor: '#3151f0', // 每个板块的颜色
borderColor: '#404a59' // 板块的边界颜色
},
// 鼠标移入某板块的样式设置
emphasis: {
// 移入该板块时的板块颜色
itemStyle: {
areaColor: 'red'
},
// 省份的名称颜色
label: {
color: 'white'
}
}
},
series: series, // 显示的数据
// 鼠标hover到航线上显示数据
tooltip: {
show: true,
formatter: function(data) { // 返回该航线的数据
return data.data.fromname + '>>>' + data.data.toname + ':' + data.data.value
}
}
}
this.myEcharts.setOption(option)
}
}
}
</script>
<style scoped>
#mapBox {
width: 500px;
height: 400px;
}
</style>
// 导入中国地图的JS文件 import '@/assets/china'