第一种使用 vue-baidu-map 的方法
首先 npm install vue-baidu-map --save
1 全局引入
在main.js 里面引入
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {ak:'2Zvw46SfEejaTIckyE8SwSWxcUkALsxi'}); ak是百度地图秘钥
2 局部引入 (推介使用性能消耗小,局部引入直接把上面的全部注释,然后在html添加ak)
import
{
BaiduMap,
BmScale,
BmGeolocation,
BmMarker,
BmLabel,
BmInfoWindow
}
from
'
vue-baidu-map
'
export
default
{
name:
"
teamCheckWork
",
components:
{
BaiduMap,
BmScale,
BmGeolocation,
BmMarker,
BmLabel,
BmInfoWindow
},
data()
{
return
{
signedIn:[],
// 已签到数据
onSignedIn:[],
// 未签到数据
map_center:
{lng:0,lat:0
}, // 初始化中心点位置
map_zoom:
15, // 初始化地图缩放大小这两个必须有
};
},
}}}}}
// 地图初始化
handler({
BMap,
map })
{
console.
log(
BMap,
map);
let
_this
=
this
//设置一个临时变量指向vue实例,因为在百度地图回调里使用this,指向的不是vue实例
this.
BMap
=
BMap
this.
map
=
map
console.
log(
this.
map);
// 刚进入页面中的定位,需要向用户授权
let
geolocation
=
new
BMap
.
Geolocation
();
let
gc
=
new
BMap
.
Geocoder
();
// console.log(geolocation,gc);
// 获取当前的地理位置
geolocation.
getCurrentPosition(
function(
r)
{
// if(this.getStatus() == BMAP_STATUS_SUCCESS) {
var
pt
=
r
.
point;
gc.
getLocation(
pt,
function(
rs)
{
var
addComp
=
rs
.
addressComponents;
_this.
addrPoint.
address
=
addComp.
province
+
addComp.
city
+
addComp.
district
+
addComp.
street
+
addComp.
streetNumber;
});
console.
log(
'
r.point.lat
',
r.
point.
lng,
r.
point.
lat)
this.
map_center
=
r.
point
console.
log(
this.
map_center);
_this.
addrPoint.
lng
=
r.
point.
lng;
_this.
addrPoint.
lat
=
r.
point.
lat;
var
mk
=
new
BMap
.
Marker
(
r
.
point
);
map.
addOverlay(
mk);
map.
panTo(
r.
point);
_this.
getTeamSignIn(
this.
nowTime);
if(
r.
accuracy
==
null)
{
// alert('accuracy null:'+r.accuracy);
//用户决绝地理位置授权
return;
}
// }else{
// alert('failed'+this.getStatus());
// }
},
{enableHighAccuracy:
true
});
},
// 获取团队考勤记录
getTeamSignIn(
time)
{
let
that
=this;
this.
$http.
get(
"
/attendance/getTeamAttendance?attendanceTime=
"
+
time).
then(
res
=>
{
console.
log(
'
res
',
res);
this.
getTeamSignInHistory
=
res;
// console.log(this.getTeamSignInHistory);
if(
this.
getTeamSignInHistory.
length
>
0)
{
console.
log(
'
aaaaaa
');
this.
getTeamSignInHistory.
forEach((
item,
index)
=>
{
item.
status
?
this.
signedIn.
push(
item)
:
this.
onSignedIn.
push(
item);
});
//
this.
signedIn
=[ /模拟数据获取直接按照格式赋值就会在地图上显示出点
:position="{lng:item.SignInLongitude, lat:item.SignInLatitude}" v-for="(item,index) in signedIn"
{
EmployeeName:
'
张一
',
SignInAddress:
'
大剧院
',
SignInLatitude:
'
38.465846
',
SignInLongitude:
'
112.736636
',
SignInTime:
'
2020-9-29
',
status:
1,
userid:
'
26b6c76b-4cf9-4416-ae92-b4268b9f9185
'
},
{
EmployeeName:
'
张二
',
SignInAddress:
'
海底
',
SignInLatitude:
'
38.454601
',
SignInLongitude:
'
112.730671
',
SignInTime:
'
2020-9-29
',
status:
1,
userid:
'
26b6c76b-4cf9-4416-ae92-b4268b9f9185
'
},
{
EmployeeName:
'
张三
',
SignInAddress:
'
南城
',
SignInLatitude:
'
38.449515
',
SignInLongitude:
'
112.728228
',
SignInTime:
'
2020-9-29
',
status:
1,
userid:
'
26b6c76b-4cf9-4416-ae92-b4268b9f9185
'
}
],
console.
log(
'
signedIn
',
this.
signedIn);
console.
log(
this.
map);
// this.signedIn.forEach((items,index)=>{
// console.log(items);
// //把获取回来的点添加到地图上
// console.log(that.map);
// // console.log(window)
// var points = new BMap.Point(items.SignInLongitude,items.SignInLatitude);//创建坐标点
// var label = new BMap.Label(items.EmployeeName,{
// offset:new BMap.Size(25,5)
// });
// // var opts = {
// // width:250,
// // height: 100,
// // title:item.EmployeeName
// // };
// // var infoWindows = new BMap.InfoWindow(item.EmployeeName,opts);
// // markerFun(points,label,infoWindows);
// this.addMarker(points,label);
// });
}
else
{
this.
$toast(
"
当前时间还未有人提交考勤记录
");
}
}) .
catch(
err
=>
{
this.
$toast(
err);
});
}
《html》
<baidu-map class="map map-content" :center="map_center" :zoom="map_zoom" @ready="handler" :style="{height:height}" :double-click-zoom="false" ak="2Zvw46SfEejaTIckyE8SwSWxcUkALsxi"> <bm-marker :position="{lng:item.SignInLongitude, lat:item.SignInLatitude}" v-for="(item,index) in signedIn" :key="index" animation="BMAP_ANIMATION_BOUNCE"> <bm-label :content="item.EmployeeName" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/> </bm-marker> </baidu-map>
第二种直接引用百度地图
1这种只有一种引用方式直接在哪里用就在哪里引用
html
<div class="map-content"id="map-container" :style="{height:height}"></div>
注意:一定要加高度不然会不显示
async mounted() {
await MP('2Zvw46SfEejaTIckyE8SwSWxcUkALsxi') //加载引入地图,参数是秘钥
this.initMap();
},
// 初始化地图获取当前定位点
initMap() {
var that = this;
// 刚进入页面中的定位,需要向用户授权
let geolocation = new BMap.Geolocation();
let gc = new BMap.Geocoder();
// console.log(geolocation,gc);
// 获取当前的地理位置
geolocation.getCurrentPosition( function(r) {
// if(this.getStatus() == BMAP_STATUS_SUCCESS) {
var pt = r.point;
gc.getLocation(pt, function(rs){
var addComp = rs.addressComponents;
that.addrPoint.address= addComp.province + addComp.city + addComp.district + addComp.street+addComp.streetNumber;
});
// console.log('r.point.lat',r.point.lng,r.point.lat)
that.addrPoint.lng = r.point.lng;
that.addrPoint.lat = r.point.lat;
that.generatingMaps(r.point)
if(r.accuracy==null){
// alert('accuracy null:'+r.accuracy);
//用户决绝地理位置授权
return;
}
// }else{
// alert('failed'+this.getStatus());
// }
},{enableHighAccuracy: true});
},
// 生成当前位置的地图并添加初始化点
generatingMaps(value){
var map = new BMap.Map("map-container", {enableMapClick:false,minZoom:15,maxZoom:20}) //新建地图实例,enableMapClick:false :禁用地图默认点击弹框,minZoom地图最大最小实例
var point = new BMap.Point( value.lng,value.lat);
map.centerAndZoom(point,17);
let marker = new BMap.Marker(new BMap.Point( value.lng,value.lat)); // 创建点
map.addOverlay(marker);
},
// 获取数据
getTeamSignIn(time){
this.$http.get("/attendance/getTeamAttendance?attendanceTime=" + time).then(res => {
console.log('res',res);
this.getTeamSignInHistory= res;
// console.log(this.getTeamSignInHistory);
if(this.getTeamSignInHistory.length>0){
console.log('aaaaaa');
this.getTeamSignInHistory.forEach((item,index)=>{
item.status? this.signedIn.push(item): this.onSignedIn.push(item);
});
this.signedIn=[
{
EmployeeName:'张一',
SignInAddress:'大剧院',
SignInLatitude: '38.465846',
SignInLongitude: '112.736636',
SignInTime:'2020-9-29',
status:1,
userid:'26b6c76b-4cf9-4416-ae92-b4268b9f9185'
},
{
EmployeeName:'张二',
SignInAddress:'海底',
SignInLatitude: '38.454601',
SignInLongitude: '112.730671',
SignInTime:'2020-9-29',
status:1,
userid:'26b6c76b-4cf9-4416-ae92-b4268b9f9185'
},
{
EmployeeName:'张三',
SignInAddress:'南城',
SignInLatitude: '38.449515',
SignInLongitude: '112.728228',
SignInTime:'2020-9-29',
status:1,
userid:'26b6c76b-4cf9-4416-ae92-b4268b9f9185'
}
],
console.log('signedIn',this.signedIn);
console.log(this.map);
this.signedIn.forEach((items,index)=>{
console.log(items);
//把获取回来的点添加到地图上
console.log(that.map);
// console.log(window)
var points = new BMap.Point(items.SignInLongitude,items.SignInLatitude);//创建坐标点
var label = new BMap.Label(items.EmployeeName,{
offset:new BMap.Size(25,5)
});
// var opts = {
// width:250,
// height: 100,
// title:item.EmployeeName
// };
// var infoWindows = new BMap.InfoWindow(item.EmployeeName,opts);
// markerFun(points,label,infoWindows);
this.addMarker(points,label);
});
}else{
this.$toast("当前时间还未有人提交考勤记录");
}
}) .catch(err => {
this.$toast(err);
});
}
// 调用添加多个标注
addMarker(points,label){
let that=this; // 注意this指向问题指向map
console.log(points,label);
var markers = new BMap.Marker(points);
that.map.addOverlay(markers);
markers.setLabel(label);
// markers.addEventListener("click",function (event) {
// console.log("0001");
// map.openInfoWindow(infoWindows,points);//参数:窗口、点 根据点击的点出现对应的窗口
// });
},
<
baidu-map
class=
"
map map-content
" :
center=
"
map_center
" :
zoom=
"
map_zoom
" @
ready=
"
handler
" :
style=
"
{height:
height
}
" :
double-click-zoom=
"
false
"
ak=
"
2Zvw46SfEejaTIckyE8SwSWxcUkALsxi
"
>
<
bm-marker :
position=
"
{lng:
item.
SignInLongitude, lat:
item.
SignInLatitude
}
"
v-for=
"(
item,
index)
in
signedIn
" :
key=
"
index
"
animation=
"
BMAP_ANIMATION_BOUNCE
"
>
<
bm-label :
content=
"
item.
EmployeeName
" :
labelStyle=
"
{color:
'
red
', fontSize :
'
24px
'
}
" :
offset=
"
{width:
-
35, height:
30
}
"/
>
</
bm-marker
>
</
baidu-map
>
