vue2中引入百度地图方式汇总:2D/3D都可以通过两种方式实现:1添加地图容器直接在JS代码中使用百度地图API或者 2使用Vue Baidu Map组件 3.引入3D百度地图-WebGL类型 直接在JS代码中使用百度地图API 4引入3D百度地图-WebGL 类型 使用 el-bmap组件
npm install vue-bmap-gl --save
https://dafrok.github.io/vue-baidu-map/#/
https://www.npmjs.com/package/vue-baidu-map
https://lbs.baidu.com/index.php?title=open/demos
0.前缀准备工作:申请ak , 安装 npm install vue-baidu-map
进入网址百度地图开放平台 : https://lbsyun.baidu.com/apiconsole/center#/home 在控制台新建应用 复制访问应用的ak
前期准备:申请ak 前往百度地图开发平台注册百度账号,申请密钥 【https://lbs.baidu.com/index.php?title=jspopularGL/guide/getkey】

引入百度地图方式汇总:
在Vue中使用百度地图,引入百度地图方式汇总:可以通过两种方式实现:添加地图容器直接在JS代码中使用百度地图API,或者 , 使用Vue Baidu Map组件 。
方式一:添加地图容器直接在JS代码中使用百度地图API:步骤如下
百度地图2d vue-baidu-map,
1.1在需要的地方 ,例如在在public/index.html中引入百度地图的JS API库:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=你的百度地图API密钥"></script>
1.2在Vue组件的模板中添加地图容器<div ref="mapContainer" class="map"></div> :
1.3然后在Vue组件的mounted生命周期钩子中初始化百度地图: new BMapGL.Map(this.$refs.mapContainer)
参考官网:
https://lbsyun.baidu.com/jsdemo.htm#aCreateMap
关键代码:
new BMap.Map
<template>
<div id="map-container" class="map" ref="container" style="width: 100%; height: 100%" ></div>
</template>
<script>
const mapvgl = require('mapvgl')
const loadBMap = function loadBMap( akValue) {
return new Promise(function (resolve, reject) {
if (typeof window.BMapGL !== "undefined") {
resolve(window.BMapGL);
return true;
}
// 百度地图异步加载回调处理,不使用加载的script不会执行
window.onBMapCallback = function () {
console.log("百度地图脚本初始化成功...");
resolve(window.BMapGL);
};
let script = document.createElement("script");
script.type = "text/javascript";
script.src = `https://api.map.baidu.com/api?type=webgl&v=1.0&ak=${akValue}&callback=onBMapCallback`;
// 启用 https 配置,通过 s=1 参数实现
// 启用 callback 参数,异步加载必须使用此参数才可以生效
script.onerror = reject;
document.documentElement.appendChild(script);
})
};
export default {
name: 'sub-map002',
data: () => {
return {
map: {},
};
},
computed: {
},
mounted() {
this.$nextTick(() => {
var ak='XXXXi3WesOqMGc5Bqf1OK5uYBGYf7P1x' // 申请的ak 前往百度地图开发平台注册百度账号,申请密钥
loadBMap( ak ).then((BMapGL) => {
console.log("BMapGL", BMapGL);
const _this = this;
console.log("BMapGL", BMapGL);
this.BMapGL = BMapGL;
let map = new BMapGL.Map(this.$refs.container);
map.centerAndZoom(new BMapGL.Point(102.698108,25.048039), 11);
map.enableScrollWheelZoom(true);
map.addeventlistener('tilesloaded', function () {
alert('地图加载完成!');
});
// map.setMapStyleV2({
// stylejson: require("./custom_map_config.json"),
// });
this.map =map
})
})
},
created() {},
};
</script>
<style lang="less">
html,body,#map-container {
margin: 0; padding: 0;
width: 100% ;
height: 100%;
position: relative;
}
</style>
方式二 vue2百度地图使用 _使用Vue Baidu Map组件:步骤如下
百度地图2d vue-baidu-map,
2.1首先安装Vue Baidu Map: npm install vue-baidu-map --save
2.2然后在Vue项目中引入并使用:
// main.js 或者要使用地图的地方引入
import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
ak: '你的百度地图ak' // 这里填写你的百度地图ak
})
2.3接着在Vue组件中使用<baidu-map>标签:
<template>
<baidu-map class="map" @ready="handler">
</baidu-map>
</template>
<script>
export default {
methods: {
handler({ BMap, map }) {
// 这里可以操作百度地图实例
}
}
}
</script>
<style>
.map {
width: 100%;
height: 300px;
}
</style>
关键代码:
import BaiduMap from 'vue-baidu-map';
Vue.use(BaiduMap, { ak: '你的百度地图ak' // 这里填写你的百度地图ak });
handler
举例如下:
<template>
<div class="container1">
<h1> 插件百度地图vue-baidu-map:vue2使用(该插件只在vue2项目中可使用,在vue3项目中使用会报错) </h1>
<p> 官方
https://dafrok.github.io/vue-baidu-map/#/zh/start/installation <br />
密钥
http://lbsyun.baidu.com/apiconsole/key<br />
生成器
http://api.map.baidu.com/lbsapi/creatmap/index.html<br />
示例:
npm install vue-baidu-map --save
<div>
<!-- ak是密钥,仅局部注册组件时声明 <baidu-map @ready="handler" :center="{ lng: 116.404, lat: 39.076321 }" :scroll-wheel-zoom="true" :zoom="12" class="bm-view" ak="oukWFWRKCGktlhX25uFBpEt0nV4iayz1"> -->
<baidu-map @ready="handler" :center="centerLagLat" :scroll-wheel-zoom="true" :zoom="12" class="bm-view">
<!--跳动标记-->
<bm-marker :position="centerLagLat" :dragging="true" animation="BMAP_ANIMATION_BOUNCE"></bm-marker>
<bm-marker :position="{ lng: 116.404, lat: 39.07615 }" :dragging="true">
<bm-label content="我爱北京天安门" :labelStyle="{ color: 'red', fontSize: '24px' }"
:offset="{ width: -35, height: 30 }" />
</bm-marker>
<!--比例尺控件左上角-->
<bm-scale anchor="BMAP_ANCHOR_TOP_LEFT"></bm-scale>
<!--缩放控件右下角-->
<bm-navigation anchor="BMAP_ANCHOR_BOTTOM_RIGHT"></bm-navigation>
</baidu-map>
</div>
</div>
</template>
<script>
import Vue from "vue";
// 全局注册
// 全局注册将一次性引入百度地图组件库的所有组件。
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
ak: 'oukWFWRKCGktlhX25uFBpEt0nV4iayz1', //个人手机号私人使用-July_zhengfj oukWFWRKCGktlhX25uFBpEt0nV4iayz1
})
export default {
name: 'BaiduMapContainer',
components: {
},
data() {
return {
centerLagLat: { lng: 116.404, lat: 39.076321 },
show: false,
}
},
methods: {
handler({ BMap, map }) {
console.log(BMap )
map.setMapStyle({style:'dark'}); //默认:极简风格地图(style:'googlelite'),黑夜风格地图代码:map.setMapStyle({style:'dark'}); 模板页可以查看 http://lbsyun.baidu.com/custom/list.htm
this.mapOBJ = map;
// 去这个位置编辑http://lbsyun.baidu.com/apiconsole/custommap个性化地图
// this.map.setMapStyle({ styleJson: custom_map_config });
}
},
props: {},
}
</script>
<style scoped>
.bm-view {
width: 100%;
height: 300px;
}
</style>

或者也可以改为: import BMap from 'vue-baidu-map/components/map/Map' <BMap ak="":center="center"class="map":scroll-wheel-zoom="true":zoom="zoom"@ready="handler"/> handler({ BMap, map }) { // 百度地图容器全局化 this.map = map // 百度地图构造函数全局化 mapConstructor = BMap },
举例2
备注
一.低版本的引用-安装vue-baidu-map
安装+ main.js全局引入 + 初始化地图使用--全部代码
Yarn add vue-baidu-map --save
import BaiduMap from 'vue-baidu-map';
Vue.use(BaiduMap, {
ak: 'XXXXXXXXXXqMGc5Bqf1OK5uYBGYf7XXX',
});
<template>
<div class="sub-map002">
<baidu-map class="bm-view" :center="centerLagLat" :zoom="14" :scroll-wheel-zoom="true" ></baidu-map>
</div>
</template>
<script>
export default {
name: 'sub-map002',
data: () => {
return {
centerLagLat: {lng: 119, lat:29},
};
},
computed: {
},
mounted() {
},
created() {},
};
</script>
<style lang="less">
html,body,.sub-map002 {
margin: 0; padding: 0;
width: 100% ;
height: 100%;
position: relative;
.bm-view {
width: 100%;
height: 100%;
position: relative;
}
}
</style>
运行效果截图

地图添加标记--截取部分代码
<div class="sub-map002">
<baidu-map class="bm-view" :center="map.center" :zoom="map.zoom" :scroll-wheel-zoom="map.scroll-wheel-zoom" > <bml-marker-clusterer :averageCenter="true"> <bm-marker v-for="(marker,index) of marker1" :key="index + 'marker2'" :icon="{url: icon, size: {width: 128, height: 128}}" :position="{lng: marker.lng, lat: marker.lat} " > <bm-label :content="`区域设备总数:`+marker. count" :zIndex="9999" :labelStyle="{color: '#fff', fontSize : '16px',borderRadius:'6px',borderColor:'#0c75f5',backgroundColor:'#0c75f5',padding:'4px 7px'}" :offset="{width: 0, height: -6}"/> </bm-marker> </bml-marker-clusterer> </baidu-map></div>import icon from "./assets/local.png";<script> export default { name: 'sub-map002', data: () => { return { icon, map: { center: {lng: 109, lat:29}, zoom: 13, dragging: true, 'scroll-wheel-zoom': true, }, marker1:[ {lng: 109, lat:29, count:1229},], }; }, computed: { }, mounted() { }, created() {},};</script>运行效果截图

自定义样式 @ready="handler"
<baidu-map ref="bmap" class="bm-view" :center="map.center" :zoom="map.zoom" @ready="handler">
</baidu-map>
methods: {
handler ({BMap, map}) {
let goCenter = {
lng: map.getCenter().lng,
lat: map.getCenter().lat
}
map.setMapStyle({ style : "midnight" } );
// map.setMapStyle({ styleJson: [[
// {
// 'featureType': 'all',
// 'elementType': 'geometry',
// 'stylers': {
// 'color': '#53F1F0'
// }
// },
// {
// 'featureType': 'building',
// 'elementType': 'geometry',
// 'stylers': {
// 'color': '#53F1F0'
// }
// }] });
// map.setMapStyle({ styleJson: this.mapStyle.styleJson });
},
},
自定义样式 @ready="handler" // 初始化百度地图
handler({ BMap, map }) { this.map = map; this.map.setMapStyle({ style: this.data.style || "googlelite" }); //默认:精简风格(googlelite),模板页可以查看http://lbsyun.baidu.com/custom/list.htm // 去这个位置编辑http://lbsyun.baidu.com/apiconsole/custommap个性化地图 // this.map.setMapStyle({ styleJson: custom_map_config }); }
方式三:
引入3D百度地图-WebGL类型 直接在JS代码中使用百度地图API
type=WebGL: BMapGL 【vue-bmap-gl】直接在JS代码中使用百度地图API
需求;
为了使用百度地图的3D控件及旋转地图功能,看看WebGL 【vue-bmap-gl】
百度地图3d vue-bmap-gl --save
步骤
3.1安装 vue-bmap-gl --save:
目前只支持vue2,安装依赖
npm install vue-bmap-gl --save
(http://api.map.baidu.com/api?type=webgl&v=1.0&ak=xxxxx)
3.2 在Vue文件中导入并注册 & 引入
import VueBMap from 'vue-bmap-gl'
import 'vue-bmap-gl/dist/style.css'
Vue.use(VueBMap)
VueBMap.initBMapApiLoader({
// 百度的key
ak: 'T9XgL5DpTmOQvL0SbN362KIzYpR52LYU', // 用自己的百度地图ak
// 百度 sdk 版本,默认为 1.0
v: '1.0'
})
3.3
<template>
<div>
<div id="container" />
</div>
</template>
import VueBMap from 'vue-bmap-gl';
var BMapGL = VueBMap.BMapGL
this.map = new BMapGL.Map('container', {})// 创建地图实例
举例:
<template>
<div>
<div id="container" />
</div>
</template>
<script>
import { lazyBMapApiLoaderInstance } from 'vue-bmap-gl'
export default {
data() {
return {
map: null,
centerPoint: {
lng: 116.404,
lat: 39.915
},
zoom: 15,
mapType: 'BMAP_EARTH_MAP'
}
},
mounted() {
this.init()
},
methods: {
small() {
this.map.zoomOut()
},
big() {
this.map.zoomIn()
},
NavigationControl3D() {
// eslint-disable-next-line no-undef
var navi3DCtrl = new BMapGL.NavigationControl3D() // 添加3D控件
this.map.addControl(navi3DCtrl)
},
LocationControl() {
// 创建定位控件
// eslint-disable-next-line no-undef
var locationControl = new BMapGL.LocationControl({
// 控件的停靠位置(可选,默认左上角)
// anchor: 'BMAP_ANCHOR_TOP_RIGHT',
// 控件基于停靠位置的偏移量(可选)
// eslint-disable-next-line no-undef
// offset: new BMapGL.Size(20, 20)
})
// 将控件添加到地图上
this.map.addControl(locationControl)
// 添加定位事件
locationControl.addEventListener('locationSuccess', function(e) {
var address = ''
address += e.addressComponent.province
address += e.addressComponent.city
address += e.addressComponent.district
address += e.addressComponent.street
address += e.addressComponent.streetNumber
alert('当前定位地址为:' + address)
})
locationControl.addEventListener('locationError', function(e) {
alert(e.message)
})
},
init() {
lazyBMapApiLoaderInstance.load().then(() => {
// eslint-disable-next-line no-undef
const GL =
this.map = new GL.Map('container', {
minZoom: 5,
maxZoom: 20
}) // 创建Map实例
this.map.centerAndZoom(new GL.Point(this.centerPoint.lng, this.centerPoint.lat), this.zoom)
this.map.enableScrollWheelZoom(true)
this.map.setMapType(this.mapType)
this.NavigationControl3D()
this.LocationControl()
})
}
}
}
</script>
<style lang="scss" scoped>
#container {
width: 100%;
height: 100vh;
}
.zlp-control {
position: fixed;
top: 50px;
left: 50px;
z-index: 100;
}
</style>
方式四:引入3D百度地图-WebGL 类型 使用 el-bmap组件
type=WebGL: BMapGL 【vue-bmap-gl】 使用 el-bmap组件
需求;为了使用百度地图的3D控件及旋转地图功能,看看WebGL 【vue-bmap-gl】
百度地图3d vue-bmap-gl --save
步骤
4.1安装 vue-bmap-gl --save:
目前只支持vue2,安装依赖
npm install vue-bmap-gl --save
(http://api.map.baidu.com/api?type=webgl&v=1.0&ak=xxxxx)
4.2在Vue文件中导入并注册VueBMap组件:
// 导入VueBMap组件
import VueBMap from 'vue-bmap-gl';
// 设置API密钥,必须是已在百度地图开放平台申请的密钥
VueBMap.initBMapApiLoader({
ak: '你的百度地图API密钥'
});
// 在Vue组件中注册VueBMap
export default {
components: {
'el-bmap': VueBMap.BMapGL
},
// 其他组件选项...
}
4.3在组件模板中使用el-bmap组件:
<template>
<div class="map-container">
<el-bmap></el-bmap>
</div>
</template>
<style>
.map-container {
height: 500px; /* 设置地图容器的高度 */
}
</style>
注意: 确保你已经在百度地图开放平台申请了API密钥,并且该密钥已经设置在VueBMap.initBMapApiLoader中。这样就可以在Vue组件中嵌入百度地图,并使用el-bmap组件进行地图的相关操作。
vue2-使用百度地图vue-bmap-gl 参考
https://docs.guyixi.cn/vue-bmap-gl/#/zh-cn/base/bmap
https://lbs.baidu.com/index.php?title=jspopularGL/guide/getkey
https://map.heifahaizei.com/doc/begin/use.html
<template>
<div id="app">
<h3 class="title">{{ msg }}</h3>
<div class="bmap-wrapper">
<el-bmap class="bmap-box" :center="centerLagLat" :zoom="11" :vid="'bmap-vue'"></el-bmap>
</div>
</div>
</template>
<script>
import Vue from 'vue';
import VueBMap from 'vue-bmap-gl';
import 'vue-bmap-gl/dist/style.css'
import { lazyBMapApiLoaderInstance } from 'vue-bmap-gl';
let bmapManager = new VueBMap.BMapManager();
Vue.use(VueBMap);
VueBMap.initBMapApiLoader({
ak: 'XXXXXXXesOqMGc5Bqf1OK5uYBXXXXXXx',
// 默认百度 sdk 版本为 1.0
v: '1.0',
}); export default { name: 'sub-map002', data: () => { return { msg: 'hello,vue-bmap!', centerLagLat:[102.697621,29.040], }; }, computed: { }, mounted() { }, created() {}, }; </script> <style lang="less" scoped> html,body,#app { width: 100%; height: 100%; background: rgba(255, 255, 255, 0); .bmap-wrapper { width: 100%; height: 500px; } } </style>
运行效果截图

data: function() {
return {
bmapManager,
map: null,
events: {
init: (o) => {
this.map = o;
console.log(o.getCenter())
console.log(this.$refs.map.$$getInstance())
},
'moveend': () => {
},
'zoomchange': () => {
},
'click': (e) => {
alert('map clicked');
}
},
};
},
其他方式: BMapGL/MapVGL/BMapGLLib
vue2-使用百度地图BMapGL new BMapGL.Map/
https://mapv.baidu.com/gl/docs/index.html
https://docs.guyixi.cn/vue-mapvgl/#/zh-cn/introduction/install
https://gitee.com/guyangyang/vue-mapvgl/
vue-mapvgl是一些图层库,是依附于vue-bmap-gl的,需要同时安装vue-bmap-gl
https://mapv.baidu.com/gl/examples/editor.html#point-china.html


浙公网安备 33010602011771号