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. 【YashanDB知识库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found

    问题现象 使用如下的sql语句创建自关联外键表: drop table self_f_key; create table self_f_key(t1 number primary key not nu ...

  2. Redis入门 - C#|.NET Core封装Nuget包

    经过前面章节的学习,可以说大家已经算Redis开发入门了.已经可以去到项目上磨砺了. 但是今天我还想和大家分享一章:封装自己的Redis C#库,然后打包成Nuget包. 首先要说明的是:不是要自己开 ...

  3. Azure 入门系列 (第四篇 Key Vault)

    本系列 这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能. 一共 6 篇 1. Virtual Machine (VM) ...

  4. “RazorTagHelper”任务意外失败。解决方案

    严重性    代码    说明    项目    文件    行    禁止显示状态错误    MSB4018    "RazorTagHelper"任务意外失败.System.I ...

  5. CMake构建学习笔记16-使用VS进行CMake项目的开发

    目录 1. 概论 2. 详论 2.1 创建工程 2.2 加载工程 2.3 配置文件 2.4 工程配置 2.5 调试执行 3. 项目案例 4. 总结 1. 概论 在之前的系列博文中,我们学习了如何构建第 ...

  6. .NET 7+Angular 4 轻量级新零售进销存系统

    前言 给大家推荐一个专为新零售快消行业打造了一套高效的进销存管理系统. 系统不仅具备强大的库存管理功能,还集成了高性能的轻量级 POS 解决方案,确保页面加载速度极快,提供良好的用户体验. 项目介绍 ...

  7. 神经网络之卷积篇:详解为什么使用卷积?(Why convolutions?)

    详解为什么使用卷积? 来分析一下卷积在神经网络中如此受用的原因,然后对如何整合这些卷积,如何通过一个标注过的训练集训练卷积神经网络做个简单概括.和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀 ...

  8. [TK] 三色二叉树 hzoi-tg#282 存图方法

    可以发现,假如在序列中遇到一个数为 \(2\) ,也就是有两个子节点,那么接下来的全部数字都是描述左树的,一直到左树被遍历完成. 这让你想到了什么? 当然是DFS啦. 根据DFS我们有下面这样的存图思 ...

  9. [namespace hdk] Balanced_tree 整合

    代码 #include<bits/stdc++.h> using namespace std; namespace hdk{ namespace balanced_tree{ const ...

  10. 服务器Linux的一些常用命令,收藏备用!

    在Linux服务器的管理和维护过程中,掌握一些常用的命令是非常必要的.这些命令不仅可以帮助你更好地了解和控制系统,还能提高工作效率,减少错误发生的概率.本文将详细介绍一些在Linux服务器上常用的命令 ...