实现功能:

缩放

自定义icon maker

多个覆盖点的点击事件

获取两点的距离

信息窗口的点击事件

<template>
<div id="allmap" ref="mymap"></div>
</template> <style scoped>
#allmap {
width: 100%;
height: calc(100vh - 50vw);
margin-bottom: 9.3333vw;
}
.map-wrap /deep/ .anchorBL{
display: none;
} </style> <script>
import BMap from 'BMap'
import loc from '../../assets/image/organization/location.png' export default {
mounted(){
this.initMap()
},
data () {
return {
center: {
lng: 113.284,
lat: 23.125
},
locationIcon: {
url: loc,
size: {width: 18, height: 18}
},
// 附近的人
aroundList: [
{
point: "113.264531|23.157003",
userName: "1",
atlas: loc,
userId: '0'
},
{
point: "113.330934|23.113401",
userName: "2",
atlas: loc,
userId: '1'
},
{
point: "113.310854|23.113605",
userName: "3",
atlas: loc,
userId: '2'
}
],
}
},
methods: {
initMap: function() {
this.createMap()
this.addMapControl()
this.addAround(this.aroundList)
},
// 创建地图
createMap: function() {
var map = new BMap.Map(this.$refs.mymap)
var point = new BMap.Point(this.center.lng,this.center.lat)
map.centerAndZoom(point,15)
window.map = map
},
// 添加控件
addMapControl(){
//向地图中添加缩放控件
var ctrl_nav = new BMap.NavigationControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,type:BMAP_NAVIGATION_CONTROL_LARGE});
map.addControl(ctrl_nav);
// 创建当前用户标注
var ctrl_marker = new BMap.Point(this.center.lng,this.center.lat)
var myIcon = new BMap.Icon(loc,new BMap.Size(40,49))
var marker_one = new BMap.Marker(ctrl_marker,{icon:myIcon})
map.addOverlay(marker_one)
// 创建一个圆
var circle = new BMap.Circle(ctrl_marker,500,{strokeColor:"#f3c6b1",fillColor:"#f3c6b1", strokeWeight:1, strokeOpacity:0.5})
map.addOverlay(circle);
},
// 添加一个位置标记点
addMarker: function(point){
var marker = new BMap.Marker(point)
map.addOverlay(marker,15)
},
// 加载附近的人信息
addAround: function(markerList) {
if(markerList.length>0){
for(var i=0;i<markerList.length;i++){
// 经度
var info1 = markerList[i].point.split('|')[0]
// 纬度
var info2 = markerList[i].point.split('|')[1]
// 绘制附近人点坐标
var pointA = new BMap.Point(this.center.lng,this.center.lat)
var point = new BMap.Point(info1,info2)
// 距离
var path = map.getDistance(pointA, point).toFixed(2)
var myIcon = new BMap.Icon(markerList[i].atlas,new BMap.Size(40,49))
var marker = new BMap.Marker(point,{icon:myIcon})
map.addOverlay(marker)
//悬浮提示信息
var content = {
userName:markerList[i].userName,
atlas: markerList[i].atlas,
userId: markerList[i].userId,
distance: path
}
map.addOverlay(marker)
this.addClickHandler(content,marker)
}
} else{
return
}
},
//点击提示信息
addClickHandler: function(content,marker){
var _this = this
var sContent = `<div id="ssst" style="display: flex;flex-direction: row;align-items: center;width: 50.3333vw;">
<img src="${content.atlas}" alt="" style="width: 12.5333vw;height: 12.5333vw;border-radius: 50%;margin-right: 2.2667vw;">
<div>
<p style="font-size: 4vw;">${content.userName}</p>
<p style="font-size: 3.2vw;color: #999;margin-top: 1.3333vw;">距你${content.distance}m</p>
</div>
</div>`
var userid = content.userId
var infoWindow = new BMap.InfoWindow(sContent)
marker.addEventListener("click",function(e){
e.preventDefault = true
e.stop
this.openInfoWindow(infoWindow)
setTimeout(() => {
e.preventDefault = true
e.stop
_this.chatWith(userid)
}, 0);
}) },
// 弹窗点击跳转事件
chatWith(userid){
var _this = this
var ssst = document.getElementById('ssst')
ssst.addEventListener('click',function() {
_this.$router.push({
path: '/home',
query: {
userId: userid
}
})
})
}
}
}
</script>

vue + BMap实现常用地图的更多相关文章

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

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

  2. 基于vue实现百度离线地图

    基于vue实现百度离线地图 1. 百度地图API文件获取 有网络 的情况下,需引入百度地图API文件.如下: <script type="text/javascript" s ...

  3. vue中引入百度地图

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

  4. Vue.js之常用指令

    vue常用指令 vue.js官方给自己的定义是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍vue.js的常用指令. 官网:点我 一.v-text.v-html v-text:用于绑定文本 v ...

  5. vue 中引用 百度地图

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

  6. 1.Vue.js的常用指令

      Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得 ...

  7. vue封装一些常用组件loading、switch、progress

    vue封装一些常用组件loading.switch.progress github文档https://github.com/zengjielin/vue-component-library loadi ...

  8. vue项目接入百度地图

    方法一 :使用第三方工具 vue-baidu-map 安装命令: yarn add vue-baidu-map --save 文档地址:https://dafrok.github.io/vue-bai ...

  9. Vue专题-js常用指令

    vue.js官方给自己的定为是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍了vue.js的常用指令. vue.js常用指令 Vue.js使用方式及文本插值 Vue.js 使用了基于 HTML ...

随机推荐

  1. Linux c使用gumbo库解析页面表单信息(三)

    前面说了那么多,终于说到如何解析html表单信息了. 什么是表单信息呢,这里我们先要有一些概念: 如上图,这是一个QQ注册页面,注册页面当中需要我们填的空其实就是一个表单信息. 具体到html代码当中 ...

  2. js中浅拷贝和深拷贝以及深拷贝的实现

    前言:2019年的第一篇分享... 一.什么是基本类型值和引用类型值?ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型.基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构 ...

  3. keeplived

    keepalived高可用集群.   keepalived故障切换转移原理1vrrp协议:(vritual router redundancy protocol)虚拟路由冗余协议,2故障转移.keep ...

  4. 【webpack学习笔记】a08-缓存

    一般要优化网站的加载速度可以从缓存入手,利用缓存可以降低网络流量,减少访问请求,从而可以达到加快访问速度的目的. 但是,如果一旦将文件缓存,那么有更新的时候就不能及时更新,若要看到最新内容,那么就需要 ...

  5. 最短路径HDU3790(Dijkstra)

    准备考研,荒废了好多东西,希望做了正确的决定 /********************************************************* *author:chen xin * ...

  6. 下载、安装 SQL server 2012,一步一步教你安装、激活sql server2012数据库 ,附有数据库安装包

    一. 准备阶段:下载2012 SQl server数据库安装包. 链接如下: 文件名:sql2012.zip 百度云链接:https://pan.baidu.com/s/1-fw1dCVbfU1bKM ...

  7. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  8. 固定div的位置——不随窗口大小改变为改变位置

    百度首页示例: 我给二维码,和下面文本固定位置 这时html代码 <div id="bar_code"> <div class="img_put&quo ...

  9. Flask项目笔记

    一.jsonify  jsonify 是flask的函数,可以将字典转换成json数据返回给浏览器二. 钩子函数 @app.before_first_request:第一次请求调用,用于初始化数据 @ ...

  10. JavaWeb基础-Jsp的请求与响应

    JSP请求和相应 HTTP头信息 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的. HttpServletRequest类 r ...