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>
 |