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中使用百度地图的更多相关文章

  1. Vue中使用百度地图——设置地图标注

    知识点:创建Map实例,为指定的位置设置标注 参考博客:https://www.cnblogs.com/liuswi/p/3994757.html 1.效果图:初始化地图,设置指定经纬度为地图中心点坐 ...

  2. Vue中使用百度地图——根据输入框输入的内容,获取详细地址

    知识点:在Vue.js项目中调用百度地图API,实现input框,输入地址,在百度地图上定位到准确地址,获得到经纬度 参考博客:  百度地图的引用,初步了解参考博客:http://blog.csdn. ...

  3. vue中实现百度地图

    1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/ ...

  4. Vue --》 如何在vue中调用百度地图

    1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/ ...

  5. vue 中结合百度地图获取当前城市

    首先需要去百度地图开发者平台申请 ak http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5 在index.html 中引入script ...

  6. vue中引入百度地图

    xxx.vue <template> <div> <el-input v-model="inputaddr"> </el-input> ...

  7. vue中使用百度地图vue-baidu-map

    安装 npm install vue-baidu-map --save 全局注册 全局注册将一次性引入百度地图组件库的所有组件.需在入口文件main.js中引入vue-baidu-map import ...

  8. VUE 中引入百度地图(vue-Baidu-Map)

    1.安装 $ npm install vue-baidu-map --save 2.全局注册,在main.js中引入以下代码 import BaiduMap from 'vue-baidu-map' ...

  9. vue 中引用 百度地图

    1.在 http://lbsyun.baidu.com/ 申请 秘钥 2.在index.html文件中引入 <script src="http://api.map.baidu.com/ ...

  10. vue中使用百度地图,悬浮窗搜索功能

    https://www.cnblogs.com/shuaifing/p/8185311.html 侵删 <template> <div id="all"> ...

随机推荐

  1. 使用 nuxi preview 命令预览 Nuxt 应用

    title: 使用 nuxi preview 命令预览 Nuxt 应用 date: 2024/9/8 updated: 2024/9/8 author: cmdragon excerpt: 摘要:本文 ...

  2. CSS – rem, em, px

    参考: 掘金 – 如何更愉快地使用em -- 别说你懂CSS相对单位 绝对值 vs 相对值 px, cm, mm 这些是绝对值. rem, em 是相对值. 绝对值就是最终的尺寸. 相对值的意思是它不 ...

  3. MyBatis——简介

    MyBatis MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 官网:https://mybatis.net.cn/ 持久层 负责将数据保存到数据库的那一层代码 javaEE 三层架 ...

  4. Java反射取值赋值

    项目需求:需要对获取的数据每个字段值校验合法性,故想到用 反射 实现 /** * 字段值校验 * * @param r 需要校验的实体类 * @param properties 自定义需要校验的属性 ...

  5. XYD1006CSPS

    T1 密钥 [关键结论,模拟,枚举] Description 给定两个长度为 \(n\) 的 \(01\) 序列 \(a\),\(b\),每个位置都有一个权值 \(c\), 每次操作可以将 \(a\) ...

  6. mysql用户相关操作(转载)

    mysql用户相关操作 一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用户 ...

  7. filter 加 indexOf 方法去重数组

    let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6] let unique = (arr) => { console.log(arr) return arr.f ...

  8. 怎么封装一个vue的自定义指令

    自定义指令分为 全局和局部的指令 : 1. 自定义全局指令: 在 mian.js 中 ,使用 Vue.directive('指令名' ,  配置对象 ) 2. 局部自定义指令 在组件中使用 direc ...

  9. 1001 Attention 和 Self-Attention 的区别(还不能区分我就真的无能为力了)

    通过 pytorch 去构建一个 transformer 的框架 不是导包,不是调包侠 注意力机制是一个很宽泛(宏大)的一个概念,QKV 相乘就是注意力,但是他没有规定 QKV是怎么来的 通过一个查询 ...

  10. kotlin协程——>异常处理

    异常处理 本节内容涵盖了异常处理与在异常上取消.我们已经知道取消协程会在挂起点抛出 CancellationException 并且它会被协程的机制所忽略.在这⾥我们会看看在取消过程中抛出异常或同 ⼀ ...