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实现两个区域滚动条同步滚动
Dec 13 Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue router 动态路由清除方式
May 25 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 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 google或baidu分页代码
2009/11/26 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
Smarty模板配置实例简析
2019/07/20 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
python实现下载文件的三种方法
2017/02/09 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
Python中super函数的用法
2017/11/17 Python
python如何爬取个性签名
2018/06/19 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
python文件读取失败怎么处理
2020/06/23 Python
python re的findall和finditer的区别详解
2020/11/15 Python
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
文字自荐书范文
2014/02/10 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
推荐信格式要求
2014/05/09 职场文书
项目备案申请报告
2015/05/15 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python