安装 vue-baidu-map(官方网站)
- NPM
$ npm install vue-baidu-map --save
- CDN
<script src="https://unpkg.com/vue-baidu-map"></script>
组件注册
全局注册
全局注册将一次性引入百度地图组件库的所有组件。
- 第一种:main.js中添加
import Vue from 'vue'
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
ak: 'YOUR_APP_KEY'
})
- 第二种:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>baidu_map</title>
<!-- 引入百度地图组件 -->
<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=YOUR_APP_KEY"></script>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
Hello_BaiduMap.vue中
<template>
<!-- 地图容器 -->
<baidu-map class="bm-view">
</baidu-map>
</template>
<style>
// BaiduMap 组件容器本身是一个空的块级元素,如果容器不定义高度,百度地图将渲染在一个高度为 0 不可见的容器内。
.bm-view {
width: 100%;
height: 300px;
}
</style>
局部注册
如果有按需引入组件的需要,可以选择局部注册百度地图组件,这将减少工程打包后的容量尺寸。局部注册的 BaiduMap 组件必须声明 ak 属性。 所有的独立组件均存放在 vue-baidu-map/components 文件夹下,按需引用即可。 由于未编译的 ES 模块不能在大多数浏览器中直接运行,如果引入组件时发生运行时错误,请检查 webpack 的 loader 配置,确认 include 和 exclude 选项命中了组件库。
<template>
<baidu-map class="bm-view" ak="YOUR_APP_KEY">
</baidu-map>
</template>
<script>
import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
export default {
components: {
BaiduMap
}
}
</script>
<style>
.bm-view {
width: 100%;
height: 300px;
}
</style>
使用案例
1、Hello BaiDuMap
<template>
<div id="container" class="container"></div>
</template>
<script>
export default {
name: 'baiduMap',
data () {
return {
}
},
mounted() {
// 页面渲染后执行
this.mapInit()
},
methods: {
// 初始化地图
mapInit() {
var map = new BMap.Map("container")
// 创建地图实例, 指定中心点116.404, 39.925
var point = new BMap.Point(116.404, 39.925)
// 创建点坐标
map.centerAndZoom(point, 15)
// 拖拽地图
map.enableDragging()
// 地图缩放
map.enableScrollWheelZoom()
}
}
}
</script>
<style scoped>
.container {
width: 100%;
height: 830px;
}
</style>
2、设置点标记
<template>
<div id="container" class="container"></div>
</template>
<script>
export default {
name: 'baiduMap',
data () {
return {
}
},
mounted() {
// 页面渲染后执行
this.mapInit()
},
methods: {
// 初始化地图
mapInit() {
var map = new BMap.Map("container")
// 创建地图实例, 指定中心点116.404, 39.925
var point = new BMap.Point(116.404, 39.925)
// 创建点坐标
map.centerAndZoom(point, 15)
// 拖拽地图
map.enableDragging()
// 地图缩放
map.enableScrollWheelZoom()
// 设置标记点
var marker = new BMap.Marker(point)
map.addOverlay(marker)
}
}
}
</script>
<style scoped>
.container {
width: 100%;
height: 830px;
}
</style>
3、单个点标记添加点击事件
<template>
<div id="container" class="container"></div>
</template>
<script>
export default {
name: 'baiduMap',
data () {
return {
}
},
mounted() {
// 页面渲染后执行
this.mapAddListener()
},
methods: {
// 单个点标记添加点击事件
mapAddListener() {
// 创建地图
var map = new BMap.Map("container")
// 创建坐标点
var point = new BMap.Point(116.404, 39.925)
// 设置地图中心
map.centerAndZoom(point, 15)
// 创建点标记
var marker = new BMap.Marker(point)
map.addOverlay(marker)
// 创建信息窗口
var opts = {
width: 200,
height: 100,
title: '故宫博物院'
};
var infoWindow = new BMap.InfoWindow('地址:北京市东城区王府井大街88号乐天银泰百货八层', opts)
// 标记添加点击事件
marker.addEventListener('click', function () {
map.openInfoWindow(infoWindow, point)
});
}
}
}
</script>
<style scoped>
.container {
width: 100%;
height: 830px;
}
</style>
4、多个点标记添加点击事件
<template>
<div id="container" class="container"></div>
</template>
<script>
export default {
name: 'baiduMap',
data () {
return {
}
},
mounted() {
// 页面渲染后执行
this.mapAddListener1()
},
methods: {
// 多个点标记添加点击事件
mapAddListener1(){
var points = [{"lng": 116.404, "lat": 39.925, "name": "故宫博物院", "address": "紫禁城"},
{"lng": 116.404, "lat": 39.915, "name": "天安门", "address": "长安街"},
{"lng": 116.395, "lat": 39.935, "name": "北海公园", "address": "北海公园湖底"},
{"lng": 116.415, "lat": 39.931, "name": "中国美术馆", "address": "五四大街"}]
var map = new BMap.Map("container")
// 拖拽地图
map.enableDragging()
// 地图缩放
map.enableScrollWheelZoom()
// 标记点添加点击事件
const createMarker = (item) => {
// 创建坐标点
var point = new BMap.Point(item.lng, item.lat)
// 设置地图中心
map.centerAndZoom(point, 15)
// 创建点标记
var marker = new BMap.Marker(point)
map.addOverlay(marker)
// 信息内容
var content =
'<ul style="margin:0 0 5px 0;padding:0.2em 0">'
+'<li style="line-height: 26px;font-size: 15px;">'
+'<span style="width: 50px;display: inline-block;">名称: </span>' + item.name + '</li>'
+'<li style="line-height: 26px;font-size: 15px;">'
+'<span style="width: 50px;display: inline-block;">地址: </span>' + item.address + '</li>'
+'</ul>'
var infoWindow = new BMap.InfoWindow(content)
marker.addEventListener('click', function(){
map.openInfoWindow(infoWindow, point)
});
}
// 循环标记点添加点击事件
points.forEach((point) => {
createMarker(point)
})
}
}
}
</script>
<style scoped>
.container {
width: 100%;
height: 830px;
}
</style>
5、自定义点标记图标并且添加点击事件
<template>
<div id="container" class="container"></div>
</template>
<script>
// 引入标记图片
import iconCar from '../assets/blank.gif';
export default {
name: 'baiduMap',
data () {
return {
}
},
mounted() {
// 页面渲染后执行
this.myMarker()
},
methods: {
myMarker(){
var points = {"lng": 116.404, "lat": 39.925, "name": "故宫博物院", "address": "紫禁城"}
var map = new BMap.Map("container")
// 拖拽地图
map.enableDragging()
// 地图缩放
map.enableScrollWheelZoom()
// 创建地图实例
var point = new BMap.Point(points.lng, points.lat)
// 创建点坐标
map.centerAndZoom(point, 15)
// 创建标记并设置标记尺寸
var myIcon = new BMap.Icon(iconCar, new BMap.Size(32, 32))
var marker = new BMap.Marker(point, {icon: myIcon})
var labelopts = {
// 指定文本标注所在的地理位置
position: point,
// 设置文本偏移量
offset: new BMap.Size(0, 0)
};
// 设置标记样式
var label = new BMap.Label('', labelopts);
label.setStyle({
color : "#fff",
backgroundColor : "rgba(0, 0, 0, 0.5)",
borderRadius : "10px",
position : "absolute",
padding : "0px",
margin : "0px",
border : "0px",
cursor : "pointer",
width : "15px",
height : "15px"
})
map.addOverlay(label)
map.addOverlay(marker)
// 信息内容
var content =
'<ul style="margin:0 0 5px 0;padding:0.2em 0">'
+'<li style="line-height: 26px;font-size: 15px;">'
+'<span style="width: 50px;display: inline-block;">名称: </span>' + points.name + '</li>'
+'<li style="line-height: 26px;font-size: 15px;">'
+'<span style="width: 50px;display: inline-block;">地址: </span>' + points.address + '</li>'
+'</ul>'
var infoWindow = new BMap.InfoWindow(content)
marker.addEventListener('click', function(){
map.openInfoWindow(infoWindow, point)
});
}
}
}
</script>
<style scoped>
.container {
width: 100%;
height: 830px;
}
</style>