vue + echarts + 百度地图 画地图散点图

在更新到Echarts5.0.1版本后,遇到地图无法显示的问题。解决办法是在引入BMap时,需要额外导入'echarts/extension/bmap.js'。创建画图区域后,在组件文件中使用MP函数引入并调用绘制百度地图的drawMap方法,确保在正确的位置加载ak并初始化地图。示例代码展示了如何在Echarts中配置并绘制包含多个城市的散点图。
摘要由CSDN通过智能技术生成

更新:升级echarts5.0.1版本后,之前的操作引入百度地图发现地图并没有绘制,需要在文件引入MP的地方新增一句

import 'echarts/extension/bmap.js'

-------------------------------------------分割线---------------------------------
创建画图区域

<div id="myChart"></div>

创建js文件引入百度地图js文件, baidu-map.js

export function MP (ak) {
  const BMap = window.BMap // 这里写一句解决BMap is not defined错误
  return new Promise(function (resolve, reject) {
    if (typeof BMap !== 'undefined') {
      resolve(BMap)
      return true
    }
    window.onBMapCallback = function () {
      resolve(BMap)
    }
    let script = document.createElement('script')
    script.id = 'baiduMap'
    script.type = 'text/javascript'
    script.src = 'http://api.map.baidu.com/api?v=2.0&ak=' + ak + '&callback=onBMapCallback'
    script.onerror = reject
    document.head.appendChild(script)
  })
}

在要画图的组件文件中mounted函数引入并调用创建的画百度地图函数

import {MP} from 'baidu-map.js'
methods: {
  drawMap(){
    let data = [
    	 {name: '海门', value: 9},
    	 {name: '鄂尔多斯', value: 12},
   	 	 {name: '招远', value: 12},
    	 {name: '舟山', value: 12},
    	 {name: '齐齐哈尔', value: 14},
    	 {name: '盐城', value: 15},
    	 {name: '赤峰', value: 16}
		]
	let geoCoordMap = {
    	'海门':[121.15,31.89],
    	'鄂尔多斯':[109.781327,39.608266],
    	'招远':[120.38,37.35],
    	'舟山':[122.207216,29.985295],
    	'齐齐哈尔':[123.97,47.33],
    	'盐城':[120.13,33.38],
    	'赤峰':[118.87,42.28]
	}
	let convertData = function (data) {
    	var res = [];
    	for (var i = 0; i < data.length; i++) {
     	   var geoCoord = geoCoordMap[data[i].name];
      	  if (geoCoord) {
       	     res.push({
                name: data[i].name,
                value: geoCoord.concat(data[i].value)
            });
          }
    	}
    	return res;
	}
option = {
    title: {
        text: '全国主要城市空气质量 - 百度地图',
        subtext: 'data from PM25.in',
        sublink: 'http://www.pm25.in',
        left: 'center'
    },
    tooltip : {
        trigger: 'item'
    },
    bmap: {
        center: [104.114129, 37.550339],
        zoom: 5,
        roam: true
    },
    series : [
        {
            name: 'pm2.5',
            type: 'scatter',
            coordinateSystem: 'bmap',
            data: convertData(data),
            symbolSize: function (val) {
                return val[2] / 10;
            },
            encode: {
                value: 2
            },
            label: {
                formatter: '{b}',
                position: 'right',
                show: false
            },
            itemStyle: {
                color: 'purple'
            },
            emphasis: {
                label: {
                    show: true
                }
            }
        },
        {
            name: 'Top 5',
            type: 'effectScatter',
            coordinateSystem: 'bmap',
            data: convertData(data.sort(function (a, b) {
                return b.value - a.value;
            }).slice(0, 6)),
            symbolSize: function (val) {
                return val[2] / 10;
            },
            encode: {
                value: 2
            },
            showEffectOn: 'render',
            rippleEffect: {
                brushType: 'stroke'
            },
            hoverAnimation: true,
            label: {
                formatter: '{b}',
                position: 'right',
                show: true
            },
            itemStyle: {
                color: 'purple',
                shadowBlur: 10,
                shadowColor: '#333'
            },
            zlevel: 1
        }
      ]
	}
	  let mapDiv = document.getElementById('myChart')
      let myChart = echarts.init(mapDiv)
      myChart.setOption(option)


  }
},
mounted(){
  this.$nextTick(() => {
      MP(ak).then(BMap => {  //ak 是在百度地图开发者平台申请的密钥
        this.drawMap() // 画图的函数,这里复制Echarts官方的数据
      })
    })
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值