243 lines
6.0 KiB
Plaintext
243 lines
6.0 KiB
Plaintext
<template>
|
|
<div ref="mapbox" class="map-wrapper" />
|
|
</template>
|
|
<script>
|
|
import echarts from 'echarts'
|
|
import 'modules/echarts/map/js/world.js'
|
|
import { fontSize } from 'utils/fontsize'
|
|
export default {
|
|
props: {
|
|
area: { type: String, default: '' },
|
|
width: { type: String, default: '' },
|
|
heigt: { type: String, default: '' }
|
|
},
|
|
watch: {
|
|
area() {
|
|
const that = this
|
|
this.$nextTick(function() {
|
|
that.myChart.resize()
|
|
})
|
|
}
|
|
},
|
|
mounted() {
|
|
this.initMap()
|
|
},
|
|
methods: {
|
|
data() {
|
|
return {
|
|
myChart: ''
|
|
}
|
|
},
|
|
initMap() {
|
|
var geoCoordMap = {
|
|
Shanghai: [121.4648, 31.2891],
|
|
// Wuhan: [114.31, 30.52],
|
|
Boston: [-71.050423, 42.382983]
|
|
}
|
|
var BJData = [
|
|
[
|
|
{
|
|
name: 'Shanghai',
|
|
selected: true,
|
|
color: '#fce630'
|
|
},
|
|
{
|
|
name: 'Boston'
|
|
}
|
|
],
|
|
[
|
|
{
|
|
name: 'Boston',
|
|
selected: true,
|
|
color: '#fce630'
|
|
},
|
|
{
|
|
name: 'Shanghai'
|
|
}
|
|
]
|
|
]
|
|
var convertData = function(data) {
|
|
var res = []
|
|
for (var i = 0; i < data.length; i++) {
|
|
var dataItem = data[i]
|
|
var fromCoord = geoCoordMap[dataItem[0].name]
|
|
var toCoord = geoCoordMap[dataItem[1].name]
|
|
if (fromCoord && toCoord) {
|
|
res.push([
|
|
{
|
|
coord: fromCoord,
|
|
value: dataItem[0].value
|
|
},
|
|
{
|
|
coord: toCoord
|
|
}
|
|
])
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
var series = []
|
|
;[['Shanghai', BJData]].forEach(function(item, i) {
|
|
series.push(
|
|
{
|
|
type: 'lines',
|
|
zlevel: 1,
|
|
effect: {
|
|
show: true,
|
|
color: '#fff',
|
|
period: 6,
|
|
trailLength: 0.7,
|
|
symbolSize: fontSize(0.05)
|
|
},
|
|
lineStyle: {
|
|
normal: {
|
|
width: fontSize(0.03),
|
|
color: '#9ae5fc',
|
|
opacity: 0.02,
|
|
curveness: -0.2
|
|
}
|
|
},
|
|
|
|
data: convertData(item[1])
|
|
},
|
|
|
|
{
|
|
type: 'effectScatter',
|
|
coordinateSystem: 'geo',
|
|
zlevel: 3,
|
|
rippleEffect: {
|
|
// 涟漪特效
|
|
period: 5, // 动画时间,值越小速度越快
|
|
brushType: 'fill', // 波纹绘制方式 stroke, fill
|
|
scale: 5 // 波纹圆环最大限制,值越大波纹越大
|
|
},
|
|
label: {
|
|
normal: {
|
|
show: true,
|
|
color: '#fce630',
|
|
position: 'right', // 显示位置
|
|
offset: [10, 0], // 偏移设置
|
|
fontSize: fontSize(0.16),
|
|
formatter: '{b}' // 圆环显示文字
|
|
},
|
|
emphasis: {
|
|
show: true
|
|
}
|
|
},
|
|
symbol: 'circle',
|
|
symbolSize: function(val) {
|
|
return fontSize(0.08) // 圆环大小
|
|
},
|
|
|
|
data: item[1].map(function(dataItem) {
|
|
return {
|
|
name: dataItem[0].name,
|
|
value: geoCoordMap[dataItem[0].name]
|
|
}
|
|
})
|
|
}
|
|
)
|
|
})
|
|
var option = {
|
|
// backgroundColor: '#fff',
|
|
title: {
|
|
// text: '合作伙伴分布图',
|
|
// x: '4%',
|
|
// top: 4,
|
|
textStyle: {
|
|
color: '#fff',
|
|
fontSize: fontSize(0.16)
|
|
}
|
|
},
|
|
|
|
visualMap: {
|
|
// 图例值控制
|
|
min: 0,
|
|
max: 10000,
|
|
show: false,
|
|
color: ['#fff'],
|
|
fontSize: fontSize(0.16)
|
|
},
|
|
tooltip: {
|
|
trigger: 'item',
|
|
fontSize: fontSize(0.16),
|
|
formatter: function(params) {
|
|
if (typeof params.value === 'undefined') {
|
|
return ''
|
|
} else {
|
|
return params.name
|
|
}
|
|
}
|
|
},
|
|
geo: {
|
|
map: 'world',
|
|
label: {
|
|
emphasis: {
|
|
show: false
|
|
}
|
|
},
|
|
roam: true, // 是否允许缩放
|
|
layoutCenter: ['50%', '50%'], // 地图位置
|
|
layoutSize: '180%',
|
|
regions: [
|
|
{
|
|
// 选中的区域
|
|
name: ['China'],
|
|
selected: true,
|
|
itemStyle: {
|
|
// 高亮时候的样式
|
|
emphasis: {
|
|
areaColor: '#e8b05c'
|
|
}
|
|
},
|
|
label: {
|
|
// 高亮的时候不显示标签
|
|
emphasis: {
|
|
show: false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
// 选中的区域
|
|
name: ['United States'],
|
|
selected: true,
|
|
itemStyle: {
|
|
// 高亮时候的样式
|
|
emphasis: {
|
|
areaColor: '#e8b05c'
|
|
}
|
|
},
|
|
label: {
|
|
// 高亮的时候不显示标签
|
|
emphasis: {
|
|
show: false
|
|
}
|
|
}
|
|
}
|
|
],
|
|
itemStyle: {
|
|
normal: {
|
|
areaColor: '#11d2d6',
|
|
borderColor: '#002097'
|
|
},
|
|
emphasis: {
|
|
areaColor: '#339966'
|
|
}
|
|
}
|
|
},
|
|
|
|
series: series
|
|
}
|
|
this.myChart = echarts.init(this.$refs.mapbox)
|
|
this.myChart.setOption(option)
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
<style scoped>
|
|
.map-wrapper {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
</style>
|