ty-mobile-uni
Version:
uView UI,是uni-app生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
105 lines (102 loc) • 3.34 kB
JavaScript
//获取当前位置
let BMapLoading = false;
let BMapLoader = null;
export function getBMap() {
if (!BMapLoading) {
BMapLoading = true;
// 返回单例
BMapLoader = new Promise((resolve, reject) => {
try {
if (!window.BMap) {
const script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://api.map.baidu.com/api?v=3.0&ak=nXwrVUz0e1FjTcGbzod7Hfh71U7l0KTN&callback=callbackBMap";
script.addEventListener('load', () => {
// 回调方法放置
window.callbackBMap = () => {
const infoBoxscript = document.createElement("script");
infoBoxscript.type = "text/javascript";
infoBoxscript.src = "https://api.map.baidu.com/library/InfoBox/1.2/src/InfoBox.js";
infoBoxscript.addEventListener('load', () => {
return resolve(window.BMap);
});
document.body.appendChild(infoBoxscript);
};
});
// 异常监听
script.addEventListener('error', () => {
window.BMap = undefined;
BMapLoading = false;
return reject(new TypeError('百度地图加载异常'))
});
document.body.appendChild(script);
} else {
// 重置错误
BMapLoading = false;
return resolve(window.BMap)
}
} catch (e) {
// reject 错误
return reject(e);
// throw new TypeError('百度地图加载异常', e);
}
});
}
return BMapLoader
}
export function errorCatch(promise) {
return promise.then((data) => [null, data]).catch(err => [err])
}
export async function BMapFounder() {
// [err, BMap]
return await errorCatch(getBMap());
}
export function getLocation(callBack, failCallBack) {
if (window.BMap) {
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r) {
if (this.getStatus() === window.BMAP_STATUS_SUCCESS) {
//setTimeout(()=>{
// var convertor = new BMap.Convertor();
// var pointArr = [];
// pointArr.push(r.point);
// console.log(convertor,r,"----和");
// convertor.translate(pointArr,1,5, function(data) {
// if(data.status === 0) {
// callBack && callBack(data.points[0]);
// }
// else{
// failCallBack && failCallBack();
// }
// });
callBack && callBack(r.point);
// let lat = r.latitude;
// let lng = r.longitude;
// const pointBak = new BMap.Point(lng, lat);
// const convertor = new BMap.Convertor();
// convertor.translate([pointBak], 1, 5,function(resPoint) {
// if(resPoint && resPoint.points && resPoint.points.length>0){
// lng = resPoint.points[0].lng;
// lat = resPoint.points[0].lat;
// }
// const point = new BMap.Point(lng, lat);
// const geo = new BMap.Geocoder();
// geo.getLocation(point, (res) => {
// //callBack && callBack(res.point);
// console.log(res,"---正文");
// alert(JSON.stringify(res.addressComponents)+JSON.stringify(res.point));
// });
// });
//}, 3000);
} else {
failCallBack && failCallBack();
}
}, {
enableHighAccuracy: true
})
}
}
export default {
BMapFounder,
getLocation
};