// loadBMap.js ak 百度key
export default function loadBMap(ak) {
return new Promise((resolve, reject) => {
//聚合API依赖基础库,因此先加载基础库再加载聚合API
asyncLoadBaiduJs(ak)
.then(() => {
// 调用加载第三方组件js公共方法加载其他资源库
// 加载聚合API
// MarkerClusterer_min.js依赖TextIconOverlay.js。因此先加载TextIconOverlay.js
asyncLoadJs('http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay.js')
.then(() => {
asyncLoadJs(
'http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js'
)
.then(() => {
asyncLoadJs(
'http://api.map.baidu.com/library/InfoBox/1.2/src/InfoBox_min.js'
)
.then(() => {
resolve()
return true
})
.catch(err => {
reject(err)
})
})
.catch(err => {
reject(err)
})
})
.catch(err => {
reject(err)
})
})
.catch(err => {
reject(err)
})
})
}
// 加载百度地图基础组件js
export function asyncLoadBaiduJs(ak) {
return new Promise((resolve, reject) => {
if (typeof BMap !== 'undefined') {
resolve(BMap)
return true
}
window.onBMapCallback = function() {
resolve(BMap)
}
let script = document.createElement('script')
script.type = 'text/javascript'
script.src = 'http://api.map.baidu.com/api?v=3.0&ak=' + ak + '&s=1&callback=onBMapCallback'
script.onerror = reject
document.head.appendChild(script)
})
}
// 加载第三方组件js公共方法
export function asyncLoadJs(url) {
return new Promise((resolve, reject) => {
let script = document.createElement('script')
script.type = 'text/javascript'
script.src = url
document.head.appendChild(script)
script.onload = () => {
resolve()
}
script.onerror = reject
})
}
// import loadBMap from '@/utils/loadBMap.js'
initMapc() {
let that = this
loadBMap('百度key').then(() => {
map = new BMap.Map('mapContainer')
const centerPoint = new BMap.Point(that.longitude, that.latitude)
map.centerAndZoom(centerPoint, that.zoom)
// 添加缩放控件
map.addControl(new BMap.NavigationControl());
markerArr = [];
that.parkList.forEach(item => {
let point = new BMap.Point(item.longitude, item.latitude);
let marker = new BMap.Marker(point);
marker.id = item.id;
marker.title = item.name;
marker.address = item.address
// 添加标签
const opts = {
position: point, // 指定文本标注所在的地理位置
offset: new BMap.Size(8, -30) // 设置文本偏移量
};
// 创建文本标注对象
let c =
"<div style='background: #fff;padding: 6px 8px;border-radius: 4px'>" +
"<div style='display: flex;align-items: center;'> <span style='color: #333;font-size:14px'>" +
item.name +
" " +
"</span>" +
"</div>" +
"<div style='font-size: 12px;color: rgb(153, 153, 153);margin-top:2px;'>" +
item.address + "</div>" + "</div>"
const label = new BMap.Label(c, opts);
// 自定义文本标注样式
label.setStyle({
color: "#000",
fontSize: "12px",
fontFamily: "微软雅黑",
border: '0',
padding: '0',
// ointerEvents: 'none' // 设置文本标签不接受鼠标事件
});
// 将标签添加到地图中
// map.addOverlay(label);
// 添加信息窗口
marker.addEventListener('click', function() {
// alert(`Marker ID: ${marker.id}, Title: ${marker.title}`);
that.navigateTo('/pages/shop/packageList?id=' + marker.id + "&name=" +
marker.title)
});
label.addEventListener("click", function(e) {
// alert("您点击了文本标签");
// console.log(e)
// console.log(marker.id)
that.navigateTo('/pages/shop/packageList?id=' + marker.id + "&name=" +
marker.title)
});
label.setZIndex(999); // 设置zIndex属性
marker.setLabel(label);
markerArr.push(marker);
map.addOverlay(marker);
})
var markerClusterer = new BMapLib.MarkerClusterer(map, {
markers: markerArr
})
// 监听地图移动、放大缩小事件
map.addEventListener("movestart", function(){
markerClusterer.getMarkers().forEach(marker => {
// console.log(marker.id)
let c =
"<div style='background: #fff;padding: 6px 8px;border-radius: 4px'>" +
"<div style='display: flex;align-items: center;'> <span style='color: #333;font-size:14px'>" +
marker.title +
" " +
"</span>" +
"</div>" +
"<div style='font-size: 12px;color: rgb(153, 153, 153);margin-top:2px;'>" +
marker.address + "</div>" + "</div>"
const label = new BMap.Label(c, {
position: marker.getPosition(),
offset: new BMap.Size(20, -10)
});
label.setStyle({
color: "#000",
fontSize: "12px",
fontFamily: "微软雅黑",
border: '0',
padding: '0',
});
marker.setLabel(label);
map.addOverlay(marker);
label.addEventListener("click", function(e) {
// alert("您点击了文本标签");
// console.log(e)
// console.log(marker.id)
that.navigateTo('/pages/shop/packageList?id=' + marker.id +
"&name=" +
marker.title)
});
})
});
map.addEventListener("moveend", function(){
markerClusterer.getMarkers().forEach(marker => {
// console.log(marker.id)
let c =
"<div style='background: #fff;padding: 6px 8px;border-radius: 4px'>" +
"<div style='display: flex;align-items: center;'> <span style='color: #333;font-size:14px'>" +
marker.title +
" " +
"</span>" +
"</div>" +
"<div style='font-size: 12px;color: rgb(153, 153, 153);margin-top:2px;'>" +
marker.address + "</div>" + "</div>"
// // 添加文本标签到每个 marker 上
// const label = new BMap.Label(c, {
// position: marker.getPosition(),
// offset: new BMap.Size(20, -10)
// });
const label = new BMap.Label(c, {
position: marker.getPosition(),
offset: new BMap.Size(20, -10)
});
label.setStyle({
color: "#000",
fontSize: "12px",
fontFamily: "微软雅黑",
border: '0',
padding: '0',
});
marker.setLabel(label);
map.addOverlay(marker);
label.addEventListener("click", function(e) {
// alert("您点击了文本标签");
// console.log(e)
// console.log(marker.id)
that.navigateTo('/pages/shop/packageList?id=' + marker.id +
"&name=" +
marker.title)
});
})
});
map.addEventListener("zoomstart", function(){
markerClusterer.getMarkers().forEach(marker => {
// console.log(marker.id)
let c =
"<div style='background: #fff;padding: 6px 8px;border-radius: 4px'>" +
"<div style='display: flex;align-items: center;'> <span style='color: #333;font-size:14px'>" +
marker.title +
" " +
"</span>" +
"</div>" +
"<div style='font-size: 12px;color: rgb(153, 153, 153);margin-top:2px;'>" +
marker.address + "</div>" + "</div>"
// // 添加文本标签到每个 marker 上
// const label = new BMap.Label(c, {
// position: marker.getPosition(),
// offset: new BMap.Size(20, -10)
// });
const label = new BMap.Label(c, {
position: marker.getPosition(),
offset: new BMap.Size(20, -10)
});
label.setStyle({
color: "#000",
fontSize: "12px",
fontFamily: "微软雅黑",
border: '0',
padding: '0',
});
marker.setLabel(label);
map.addOverlay(marker);
label.addEventListener("click", function(e) {
// alert("您点击了文本标签");
// console.log(e)
// console.log(marker.id)
that.navigateTo('/pages/shop/packageList?id=' + marker.id +
"&name=" +
marker.title)
});
})
});
map.addEventListener("zoomend", function(){
markerClusterer.getMarkers().forEach(marker => {
// console.log(marker.id)
let c =
"<div style='background: #fff;padding: 6px 8px;border-radius: 4px'>" +
"<div style='display: flex;align-items: center;'> <span style='color: #333;font-size:14px'>" +
marker.title +
" " +
"</span>" +
"</div>" +
"<div style='font-size: 12px;color: rgb(153, 153, 153);margin-top:2px;'>" +
marker.address + "</div>" + "</div>"
// // 添加文本标签到每个 marker 上
// const label = new BMap.Label(c, {
// position: marker.getPosition(),
// offset: new BMap.Size(20, -10)
// });
const label = new BMap.Label(c, {
position: marker.getPosition(),
offset: new BMap.Size(20, -10)
});
label.setStyle({
color: "#000",
fontSize: "12px",
fontFamily: "微软雅黑",
border: '0',
padding: '0',
});
marker.setLabel(label);
map.addOverlay(marker);
label.addEventListener("click", function(e) {
// alert("您点击了文本标签");
// console.log(e)
// console.log(marker.id)
that.navigateTo('/pages/shop/packageList?id=' + marker.id +
"&name=" +
marker.title)
});
})
});
})
},
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5518b820b45e4bf2b2f8e23c9367d9cb.jpeg#pic_center)