Vue Baidu Map使用

百度地图官方提供的是常规<script>标签引入的方法。要想将百度地图引入Vue中,有两种方式:

  1. 在index.html中引入js文件;修改webpack.base.conf.js来增加externals属性;在主js中调用Vue.use来全局注册或在单个页面中使用import单独引入。这样,在页面中就可以像常规的页面那样使用百度地图了。需要为容器<div>设置一个id属性来初始化地图。
  2. 定义一个js文件,export一个加载函数,在其中为document动态添加<script>标签,并加载官方的地图js库。在页面中将该函数import导入,然后正常使用即可。同样需要一个含id属性的容器<div>

上面这两种方式,1比较直观,2更贴近Vue的风格。百度官方提供了Vue Baidu Map,就是使用了方式2。
Vue Baidu Map定义了一个getMapScript()函数,在其中为document动态创建了一个<script>标签,并将其src设为百度地图JavaScript API v2.0。因此,Vue Baidu Map仅仅是百度官方推出的一个Vue封装,核心功能是动态下载的,与常规页面的百度地图js库是相同的。
然而,Vue Baidu Map是针对百度地图JavaScript API v2.0进行的封装,目前并不兼容百度地图JavaScript API v3.0。

安装

调用命令:

npm install vue-baidu-map --save

安装完成后,package.json中就会添加依赖:

"dependencies": {
    ...
    "vue-baidu-map": "^0.21.14",
    ...
},

node_modules文件夹下也会出现vue-baidu-map文件夹。

使用

在页面中进行导入:

import { BaiduMap, BmScale, BmMapType, BmNavigation } from 'vue-baidu-map/components'

在node_modules/vue-baidu-map/components/index.js中,导出了官方封装的所有地图Vue组件。因此这里可以直接引入多个所需要的组件。
然后在页面的components中注册:

components: { BaiduMap, BmScale, BmMapType, BmNavigation },

然后在页面中使用组件即可:

<baidu-map class="map-container" v-bind="mapOptions" @ready="mapReady" @load="mapLoad" >
    <bm-scale anchor="BMAP_ANCHOR_TOP_RIGHT"/>
    <bm-map-type :map-types="['BMAP_NORMAL_MAP', 'BMAP_HYBRID_MAP']" anchor="BMAP_ANCHOR_TOP_LEFT"/>
    <bm-navigation anchor="BMAP_ANCHOR_TOP_RIGHT"/>
</baidu-map>

组件中传入的属性定义在data中。

data() {
   return {
     mapOptions: {
       ak: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
       center: '北京',
       scrollWheelZoom: true
     }
   }
},

上面为组件注册了ready事件与load事件函数:

methods: {
  mapReady(e) {
    console.log("map ready");
    // let map = e.currentTarget;
  },
  mapLoad(e) {
    console.log("map load");
    // let BMap = e.BMap;
    // let map = e.map;
  }
}

其中:

  • ready事件与load事件无必然关联。
  • ready事件是Vue封装触发。load事件是百度地图JavaScript API v2.0提供。
  • ready事件组件渲染完毕后触发,通常只触发一次。load事件在组件加载时触发,多次加载会触发多次。
  • ready事件与load事件的触发并无绝对先后顺序。地图主组件BaiduMap在center属性为String时,zoom属性为非必要,此时会先触发ready,后触发load;然而在center属性为Point对象时,zoom属性为必要,此时会先触发load,后触发ready。
  • ready事件传入的参数为:{BMap, map}。BMap为百度地图构造函数,map为实例化后的地图对象。load事件传入的参数中包含多个属性,其中有个currentTarget属性,就是map实例。
  • 所有地图组件都有ready事件。但只有地图主组件BaiduMap会触发load事件,其他地图组件不会触发。
  • 各个地图组件的ready是按定义顺序触发,故地图主组件BaiduMap的ready一定是最早触发的。因此,在地图主组件的ready中尝试操作子组件有可能不会成功,因为此时子组件尚未ready。所以对组件的操作通常是在组件的ready事件中操作。
  • 若要调用官方API为map动态添加元素,可以在BaiduMap组件的ready事件中执行。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue Baidu Map是一个基于Vue.js的百度地图组件库,它默认是在线获取地图数据的。如果要实现离线使用,可以按照以下步骤操作: 1. 获取百度地图的离线地图数据:可以通过百度地图官网下载离线地图数据包,选择你需要的地区进行下载。这些数据包包含地图瓦片数据和必要的资源文件。 2. 配置离线地图数据路径:在Vue Baidu Map组件中,有一个叫做`resource`的属性,可以用来配置地图资源路径。你可以将下载的离线地图数据放置在某个目录下,然后将该目录的路径配置到`resource`属性中。 3. 离线地图数据加载:在Vue Baidu Map中,有一个叫做`offline`的属性,可以用来指定是否使用离线地图数据。将`offline`属性设置为`true`,组件就会根据配置的离线地图数据路径加载离线地图数据。 4. 渲染地图:组件会根据离线地图数据进行地图渲染,你可以按照需要在Vue组件中使用它。 需要注意的是,离线地图数据包的大小较大,下载和存储可能需要较长时间和大量的存储空间。此外,离线地图数据在使用前需要进行事先下载和配置,以确保正确加载地图。 总而言之,离线使用Vue Baidu Map需要下载百度地图的离线地图数据包,并在Vue Baidu Map组件中配置离线地图的路径和使用离线地图的设置,以实现离线地图的使用。 ### 回答2: Vue百度地图可以通过以下步骤实现离线使用: 1. 下载地图数据:首先,可以从百度地图开放平台下载离线地图数据。下载的数据文件可以包含特定区域的地图瓦片数据和离线导航数据。 2. 导入地图数据:将下载的地图数据文件导入到Vue项目中,在项目的静态资源文件夹中创建一个新的文件夹,将地图数据文件放入其中。 3. 配置地图组件:在Vue组件中使用百度地图组件时,可以通过设置地图初始化时的参数来指定使用离线地图数据。设置地图的center属性为指定区域的经纬度坐标,设置zoom属性为初始缩放级别。 4. 加载离线地图数据:在组件的`mounted`生命周期中,通过调用百度地图JavaScript API的`BMap.Offline.getOfflineMapList()`方法,加载离线地图数据。这个方法可以返回所有已下载的离线地图数据列表。 5. 使用离线地图:在加载离线地图数据后,可以通过设置地图的`BMap.Map.setMapType()`方法来设置地图的类型为离线地图。这样,当地图加载完成后,将显示离线地图数据而非在线地图数据。 需要注意的是,在使用离线地图数据时,需要保证您已遵守百度地图开放平台的政策和规定,确保合法使用地图数据。另外,还要注意地图数据的更新和管理,随着时间的推移,离线地图数据可能会过时,需要定期更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值