Vue-cli3/4中使用ECharts和BMap (亲测有效)

  • Post author:
  • Post category:vue


首先 国内三大地图服务商 高德地图(AMap)腾讯地图(qqmap) 百度地图(BMap)

其中AMap 和 qqmap 使用的坐标系为 GCJ02 火星坐标系

BMap使用的坐标系为 BD09 百度坐标系,BD09是在GCJ02二次加密的基础上诞生的

下面进入正题



第一步

在public/index.html中引入bmap的script,注意在ak=后面填写自己申请的ak(百度地图开放平台)

!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <!--引入百度地图-->
    <script  type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=yourKey" ></script>
    <!--引入百度热力图-->
    <!-- <script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/3.0/src/Heatmap_min.js"></script> -->
    <title></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but navbar doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

注意:如果是单页面应用的页面,也可以在app/view/index.html中引用。


第二步

在你需要使用BMap的vue文件中import引入, 如下图

<template>
    <!-- 热点图 -->
    <div id="main" ref="mapChart">
        
    </div>
</template>
<script>
const echarts = require("echarts");
import 'echarts/extension/bmap/bmap'
// ...


第三步

就可以直接调用bmap了

第四部

定制自己的地图样式

var bmap = myChart.getModel().getComponent('bmap').getBMap();
          bmap.setMapStyle({ //设置模板的初始风格
        // style:'midnight',
        styleJson: [
          {
            'featureType': 'water',
            'elementType': 'all',
            'stylers': {
                'color': '#131c34'
            }
          }, 
          {
            'featureType': 'land',
            'elementType': 'all',
            'stylers': {
                'color': '#060e21'
            }
          }, 
          {
            'featureType': 'railway',
            'elementType': 'all',
            'stylers': {
                'visibility': 'off'
            }
          }, 
          {
            'featureType': 'highway',
            'elementType': 'all',
            'stylers': {
                'color': '#fdfdfd',
                'visibility': 'off'
            }
          }, {
            'featureType': 'highway',
            'elementType': 'labels',
            'stylers': {
                'visibility': 'off'
            }
        }, {
            'featureType': 'arterial',
            'elementType': 'geometry',
            'stylers': {
                'color': '#fefefe',
                // 'visibility': 'off'
            }
          }, {
            'featureType': 'arterial',
            'elementType': 'geometry.fill',
            'stylers': {
                'color': '#fefefe',
                // 'visibility': 'off'
            }
          }, {
            'featureType': 'poi',
            'elementType': 'all',
            'stylers': {
                'visibility': 'off'
            }
          }, {
            'featureType': 'green',
            'elementType': 'all',
            'stylers': {
                'visibility': 'off'
            }
          }, {
            'featureType': 'subway',
            'elementType': 'all',
            'stylers': {
                'visibility': 'off'
            }
          }, {
            'featureType': 'manmade', // 人造
            'elementType': 'all',
            'stylers': {
                'color': '#d1d1d1',
                'visibility': 'off'
            }
        }, {
            'featureType': 'local',
            'elementType': 'all',
            'stylers': {
                'color': '#d1d1d1',
                // 'visibility': 'off'
            }
          }, {
            'featureType': 'arterial',
            'elementType': 'labels', // 动脉
            'stylers': {
                'visibility': 'off'
            }
          }, {
            'featureType': 'boundary', // 边界
            'elementType': 'all',
            'stylers': {
                'color': '#fefefe'
            }
        }, {
            'featureType': 'building',
            'elementType': 'all',
            'stylers': {
                'color': '#d1d1d1',
                'visibility': 'off'
            }
          }]
      });


    // 还可以选择自己添加的样式id, 可参考 https://lbsyun.baidu.com/index.php?              title=jspopularGL/guide/custom
    bmap.setMapStyleV2({     
        styleId: '你已经发布的样式id'
    });


      bmap.addEventListener("zoomend",()=>{
          var bssw = bmap.getBounds().getSouthWest();   //可视区域左下角
          var bsne = bmap.getBounds().getNorthEast();   //可视区域右上角
          // console.log('可视区域左下角',bmap.getBounds().getSouthWest())
          // console.log('可视区域右上角',bmap.getBounds().getNorthEast())
          console.log(("当前地图可视范围是:" + bssw.lng + "," + bssw.lat + "到" + bsne.lng + "," + bsne.lat));
      });
      bmap.addControl(new BMap.ScaleControl());//平移和缩放

至此完成

当然也可以使用github上相关的插件 比如 vue-amap等,具体方式大家可自行尝试。

另外去除百度地图的标志可以在app.vue中使用以下css样式:

.BMap_cpyCtrl {
  display: none;
}
.anchorBL {
  display: none;
}



版权声明:本文为weixin_43962846原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。