vue中使用百度地图
vue-cli创建的项目中使用百度地图,样式如下:

根据后台返回的不同的信息,展示不同的标记以及对应的标记信息,点击鼠标后展示弹窗
首先,引入vue-baidu-map,以展示地图,对应的命令是
npm install vue-baidu-map --save
然后,在main.js中完成全局注册
import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
// ak 是在百度地图开发者平台申请的密钥
ak: 'YOUR_APP_KEY'
})
然后在页面中应用
<baidu-map class="bm-view" :center="center" :zoom="zoom" @ready="init"></baidu-map>
绑定的ready是地图的初始化信息,center和zoom一定更要写,不然会导致地图无法出现。下面是数据结构以及一些对应的字段
data() {
return {
center: {
lng: 109.45744048529967,
lat: 36.49771311230842
},
zoom: 13,
mapData: [],
people: [{
lng: 109.45744048529967,
lat: 36.49771311230842,
type: 'people',
orderNum: 5
}, {
lng: 110.45744048529967,
lat: 35.49771311230842,
type: 'people',
orderNum: 3
}],
orders: [{
lng: 109.75744048529967,
lat: 36.49771311230842,
type: 'order',
stayTime: '12'
}, {
lng: 109.45744048529967,
lat: 36.89771311230842,
type: 'order',
stayTime: '3'
}],
tabList: [{
name: '全部显示',
type: 'all'
}, {
name: '仅显示人员',
type: 'people'
}, {
name: '仅显示订单',
type: 'order'
}],
currentTab: 'all',
map: null,
infoBox: null,
content: '',
opts: null
};
},
下面是地图的初始化
init({BMap, map}) {
this.map = map;
// 初始化地图,设置中心点坐标
var point = new BMap.Point(119.80250895, 25.48905564);
map.centerAndZoom(point, 14);
this.setMarker();
// 添加鼠标滚动缩放
map.enableScrollWheelZoom();
},
之后就是根据不同的数据设置不同的标记点
setMarker() {
var pointArray = [];
if (this.mapData.length > 0) {
// 清除地图上的覆盖物
this.map.clearOverlays();
for (var i = 0; i < this.mapData.length; i++) {
var pt = new BMap.Point(this.mapData[i].lng, this.mapData[i].lat);
pointArray.push(pt);
if (this.mapData[i].type == 'order' && this.mapData[i].stayTime < 12) {
var myIcon = new BMap.Icon(require('@/assets/image/icon_order_green.png'), new BMap.Size(40, 40));
}
if (this.mapData[i].type == 'order' && this.mapData[i].stayTime >= 12) {
var myIcon = new BMap.Icon(require('@/assets/image/icon_order_yellow.png'), new BMap.Size(40, 40));
}
if (this.mapData[i].type == 'people' && this.mapData[i].orderNum < 5) {
var myIcon = new BMap.Icon(require('@/assets/image/icon_person_green.png'), new BMap.Size(40, 40));
}
if (this.mapData[i].type == 'people' && this.mapData[i].orderNum >= 5) {
var myIcon = new BMap.Icon(require('@/assets/image/icon_person_red.png'), new BMap.Size(40, 40));
}
myIcon.setImageSize(new BMap.Size(40, 40));
var marker = new BMap.Marker(pt, {
icon: myIcon
}); // 创建标注
this.map.addOverlay(marker);
this.addClickHandler(this.mapData[i], marker);
var item = this.mapData[i];
}
var view = this.map.getViewport(pointArray);
var mapZoom = view.zoom;
var centerPoint = view.center;
this.map.centerAndZoom(centerPoint, mapZoom);
}
},
注意,引入本地图片的时候需要用require引入,再然后就是点击标记的时候显示的弹窗
// 点击标记显示信息窗口
addClickHandler(item, marker) {
marker.addEventListener('click', e = > {
if (item.type == 'order') {
this.content = `
<div class="pop_container" ref="popContainer">
<section>
<p><label>到单时间:</label><span>2020-07-16 12:30</span></p>
<p><label>订单地址:</label><span>嘉兴中威苑12幢</span></p>
<p><label>业务号码:</label><span>122232543564656</span></p>
<p><label>装机单号:</label><span>122232543564656</span></p>
</section>
<section>
<p>${item.stayTime}H</p>
<p>留单时间</p>
</section>
</div>
`; this.opts = {
width: 400,
height: 150,
enableMessage: true
};
}
if (item.type == 'people') {
this.content = `
<div class="pop_container people_container">
<section>
<p><label>装机经理:</label><span>张晓松(1234567)</span></p>
<p><label>签到时间:</label><span>2020-07-16 12:30</span></p>
</section>
<section>
<p>${item.orderNum}张</p>
<p>剩余订单</p>
</section>
</div>
`; this.opts = {
width: 400,
height: 100,
enableMessage: true
};
}
this.titleName = item.deviceCode ? item.deviceCode : item.buildingName;
var p = marker.getPosition(); //获取marker的位置
var marker1 = new BMap.Marker(new BMap.Point(p.lng, p.lat));
this.openInfo(item, marker1);
});
},
openInfo(item, p) {
var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
var infoWindow = new BMap.InfoWindow(this.content, this.opts); // 创建信息窗口对象
this.map.openInfoWindow(infoWindow, point); //开启信息窗口
setTimeout(() = > {
if ((item.type == 'order' && item.stayTime < 12) || (item.type == 'people' && item.orderNum < 5)) {
document.getElementsByClassName('BMap_bubble_content')[0].style.backgroundColor = 'rgba(26,179,148,0.8)';
}
if (item.type == 'order' && item.stayTime >= 12) {
document.getElementsByClassName('BMap_bubble_content')[0].style.backgroundColor = 'rgba(248,172,89,0.8)';
}
if (item.type == 'people' && item.orderNum >= 5) {
document.getElementsByClassName('BMap_bubble_content')[0].style.backgroundColor = 'rgba(230,93,93,0.8)';
}
}, 100);
}
下面是地图样式的改写
.anchorBL,
.BMap_cpyCtrl {
display: none;
} .BMap_bubble_title {
color: white;
font-size: 13px;
font-weight: bold;
text-align: left;
padding-left: 5px;
padding-top: 5px;
border-bottom: 1px solid gray;
background-color: #0066b3;
}
/* 消息内容 */
.BMap_bubble_content {
background-color: rgba(40, 40, 40, 0.8);
padding-left: 5px;
padding-top: 5px;
padding-bottom: 10px;
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
}
/* 内容 */
.BMap_pop div:nth-child(9) {
top: 35px !important;
border-radius: 7px;
} .BMap_pop div:nth-child(5) {
display: none;
}
/* 左上角删除按键 */
.BMap_pop img {
// top: 43px !important;
// left: 215px !important;
display: none;
} .BMap_top {
display: none;
} .BMap_bottom {
display: none;
} .BMap_center {
display: none;
}
/* 隐藏边角 */
.BMap_pop div:nth-child(1) div {
display: none;
} .BMap_pop div:nth-child(3) {
display: none;
} .BMap_pop div:nth-child(7) {
display: none;
}
vue中使用百度地图的更多相关文章
- Vue中使用百度地图——设置地图标注
知识点:创建Map实例,为指定的位置设置标注 参考博客:https://www.cnblogs.com/liuswi/p/3994757.html 1.效果图:初始化地图,设置指定经纬度为地图中心点坐 ...
- Vue中使用百度地图——根据输入框输入的内容,获取详细地址
知识点:在Vue.js项目中调用百度地图API,实现input框,输入地址,在百度地图上定位到准确地址,获得到经纬度 参考博客: 百度地图的引用,初步了解参考博客:http://blog.csdn. ...
- vue中实现百度地图
1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/ ...
- Vue --》 如何在vue中调用百度地图
1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/ ...
- vue 中结合百度地图获取当前城市
首先需要去百度地图开发者平台申请 ak http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5 在index.html 中引入script ...
- vue中引入百度地图
xxx.vue <template> <div> <el-input v-model="inputaddr"> </el-input> ...
- vue中使用百度地图vue-baidu-map
安装 npm install vue-baidu-map --save 全局注册 全局注册将一次性引入百度地图组件库的所有组件.需在入口文件main.js中引入vue-baidu-map import ...
- VUE 中引入百度地图(vue-Baidu-Map)
1.安装 $ npm install vue-baidu-map --save 2.全局注册,在main.js中引入以下代码 import BaiduMap from 'vue-baidu-map' ...
- vue 中引用 百度地图
1.在 http://lbsyun.baidu.com/ 申请 秘钥 2.在index.html文件中引入 <script src="http://api.map.baidu.com/ ...
- vue中使用百度地图,悬浮窗搜索功能
https://www.cnblogs.com/shuaifing/p/8185311.html 侵删 <template> <div id="all"> ...
随机推荐
- 使用 nuxi init 创建全新 Nuxt 项目
title: 使用 nuxi init 创建全新 Nuxt 项目 date: 2024/9/6 updated: 2024/9/6 author: cmdragon excerpt: 摘要:本文介绍了 ...
- 全面掌握 Jest:从零开始的测试指南(上篇)
随着JavaScript在前后端开发中的广泛应用,测试已成为保证代码质量的关键环节. 为什么需要单元测试 在我们的开发过程中,经常需要定义一些算法函数,例如将接口返回的数据转换成UI组件所需的格式.为 ...
- Spring —— 注解开发(bean管理)
注解定义bean 纯注解开发(无需配置文件) bean作用范围 bean生命周期
- Flutter Forward 活动正式发布
2023 年 1 月 25 日,Flutter 团队将在肯尼亚首都内罗毕举办 Flutter Forward 大会,并同时开启线上直播,敬请期待! 活动将于北京时间 1 月 25 日 22:30 开始 ...
- 让人眼前一亮的开源项目「GitHub 热点速览」
时隔两周,我又带着让人眼前一亮的开源项目回来了! 告别数据线.蓝牙.WiFi 和网络,只需用手机的摄像头扫描一张动图条形码(需安装应用),就能在设备间传输文件的 libcimbar,一款无需联网和蓝牙 ...
- CTFSHOW pwn03 WrriteUp
本文来自一个初学CTF的小白,如有任何问题请大佬们指教! 题目来源 CTFShow pwn - pwn03 (ret2libc) https://ctf.show/challenges 思路 1.下载 ...
- 第27天:安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞 - Shortcut
https://www.kancloud.cn/manual/thinkphp5_1/354000 ThinkPHP-Vuln-master
- VB.NET 在 Windows下通过WIn32API获取CPU和内存的使用率
.net 要获取CPU和内存的使用率,一般是通过 PerformanceCounter 或者 WMI 查询得到,但是如果操作系统经常不正常断电或者别的什么原因,让系统的性能计数器抽风了,可能就会造成初 ...
- “技术沙龙”来袭,邀您一同探讨 Serverless 数据库技术最佳实践
如今,随着数据库的上云趋势,企业用户对业务连续性的要求越来越高,基于Serverless架构下的数据库也应运而生. Serverless数据库技术可以满足客户在公有云计算环境下根据业务发展弹性扩展集群 ...
- typeOrm 教程 创建链接数据库
实体 User : import { Entity, PrimaryGeneratedColumn, Column } from "typeorm" @Entity() expor ...