Vue2项目中对百度地图的封装使用详解


Posted in Vue.js onJune 16, 2022

Vue2项目中对百度地图的封装使用详解

百度地图的使用:

vue项目,有个 vue-baidu-map 可以用,但是好久不更新了。

React项目,百度官方出了个React版的,可以直接用,React-BMapGL

除此以外,百度官方的都是 JavaScript API,这里以此来用vue封装下,方便使用。

需求

  • 组件按需引入。个人喜欢代码干干净净,只要项目需要的功能就行了
  • 简单的封装下,方便直接按官方文档使用需要的功能,方便复用
  • 基于Vue2 、JavaScript API v3.0
  • 基于项目需求封装,有些东西没弄,需要的自己DIY吧

知识点

  • Vue插槽 slot,方便在地图上使用各种百度地图功能
  • Vue通知 emit、on。为了传参,主要是获取地图map对象
  • Vue组件封装,加载地图后,各种地图功能,如:打点、划线、弹窗等一系列的封装使用
  • 百度地图自定义弹窗的实现;弹窗调用vue内部方法的实现

实现

components – bmap – index.vue

地图单文件组件,主要代码如下,具体参考代码

<template>
  <div class="bmap-view">
    <div id="bmapcontainer" :style="{ height: mapHeight }" />
    <slot />
  </div>
</template>

<script>
import indexjs from './index.js'
export default {
  ...indexjs
}
</script>

<style lang='scss' scoped>
</style>

components - bmap - bmap-jsapi-loader - index.js

百度地图异步加载的处理文件,具体看代码

components – map – index.js

地图组件的业务代码,可以配置地图开放的属性props和监听事件。

例如这里,开放了ak(申请的百度地图key),styleId(百度地图样式id),zoom(缩放值),center(地图加载默认中心点),height(地图默认高度值)

主要代码如下,具体参考代码

import BMapLoader from './bmap-jsapi-loader'

export default {
  name: 'BmapView',
  props: {
    ak: {
      type: String,
      default: 'ZMVYYKDUVYZIHl5ygAaKyBhs7Gkg24SX'
    },
    styleId: {
      type: String,
      default: '41d153e7e9e7bcda9541996853046c93'
    },
    zoom: {
      type: Number,
      default: 15
    },
    center: {
      type: [Array, String],
      default() {
        return [113.22682, 23.410167]
      }
    },
    height: {
      type: Number | String,
      default: 520
    }

  },
  computed: {
    mapHeight() {
      return isNaN(this.height) ? this.height : `${this.height}px`
    }
  },
  data() {
    return {
      map: ''
    }
  },
  beforeDestroy() {
    this.map = null
  },
  mounted() {
  },
  created() {
    this.initMap()
  },
  methods: {
    initMap() {
      BMapLoader.load({
        key: this.ak,
        version: '3.0'
      }).then((BMap) => {
        this.map = new BMap.Map('bmapcontainer', {
          enableBizAuthLogo: false
        })
        const point = new BMap.Point(this.center[0], this.center[1])
        this.map.centerAndZoom(point, this.zoom)
        this.map.setMapStyleV2({
          styleId: this.styleId
        })

        this.$emit('bmap-ready', this.map)
      }).catch(e => {
        console.log(e)
      })
    }

  },
  watch: {}
}

以上是使用百度地图的基础

调用方式

views - bmapTest - index.js

components: {
  BmapView: () => import ('@/components/bmap/index.vue')
}

views - bmapTest - index.vue

<bmap-view />

效果图

Vue2项目中对百度地图的封装使用详解

打点控件封装

参考文档 jsapi_reference_3_0

具体去看 bMarker.vue 文件了,去除百度地图的默认弹窗样式,真的太恶心了。 这里主要值得参考的是自定义弹窗时,html里面通过vue的 runtimeCompiler: true运行时编译功能,可以调用vue里面的参数和方法,这里对于自定义是很方便的。

效果图

Vue2项目中对百度地图的封装使用详解

代码总览

涉及的文件如下(具体参考代码):

|-- public
    |-- images  // 注意,地图需要到的图片放这里
|-- src
    |-- components
        |-- bmap
            |-- bmap-jsapi-loader
                |-- index.js
            |-- bMarker.vue    // 打点、弹窗控件封装
            |-- index.vue    // 地图单文件组件,供界面调用
            |-- index.js    // 地图初始化、配置相关
    |-- views
        |-- bmapTest    // 演示实例所在
            |-- index.vue
            |-- index.scss
            |-- index.js

代码

按代码总览的目录去代码里找着看就行了。

总结

以上,只是简单的封装。百度地图的api真的是不如高德地图好用。以上的封装已满足本人项目需求,别的功能可以自己按需扩展了。

到此这篇关于Vue2项目中对百度地图封装使用的文章就介绍到这了,更多相关Vue2百度地图封装使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Vue.js 相关文章推荐
详解Vue 的异常处理机制
Nov 30 Vue.js
vue实现滚动鼠标滚轮切换页面
Dec 13 Vue.js
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
vue实现同时设置多个倒计时
May 20 Vue.js
详解vue身份认证管理和租户管理
May 25 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 #Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 #Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 #Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 #Vue.js
vue中data里面的数据相互使用方式
Jun 05 #Vue.js
Vue 打包后相对路径的引用问题
Jun 05 #Vue.js
vue实现在data里引入相对路径
Jun 05 #Vue.js
You might like
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
javascript document.referrer 用法
2009/04/30 Javascript
jQuery 常见学习网站与参考书
2009/11/09 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
学前端,css与javascript重难点浅析
2020/06/11 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
python三大神器之fabric使用教程
2019/06/10 Python
PyQt5响应回车事件的方法
2019/06/25 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
关于赌博的检讨书
2014/01/08 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
疾病捐款倡议书
2014/05/13 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
2016大一新生军训感言
2015/12/08 职场文书