vuebaidumap 删除覆盖物_Vue:如何在地图上添加自定义覆盖物(点)

本文介绍了如何在Vue项目中利用vue-baidu-map库,在百度地图上添加自定义覆盖物(点)。通过创建一个名为MyOverLay的组件,结合bm-marker和overlay,实现了根据颜色显示不同所属者的标记。通过监听位置变化并重绘覆盖物,确保点的位置准确。同时,展示了如何使用不同的图标和样式来区分不同的点。
摘要由CSDN通过智能技术生成

首发日期:2019-1-25

如何在地图上添加自定义覆盖物(点)

此文重点是在地图上标点,所以就省去引入百度地图的步骤了。

先给一下最终的效果。

这个效果主要是利用百度地图的“覆盖物”来实现的。

由于我做的这个要求显示不同的颜色来代表不同的所属者,所以就做的麻烦一点。

普通的bm-marker

如果你的需求不要求特别显示,那么可以使用bm-marker

代码大致如下:

上面的代码中position里面的值是经纬度。有了经纬度来能够标上点。

ak是你申请的百度api的key

center是城市中心

特别图标来标点

如果你希望使用特别的图标来给标上全部点,那么也可以使用bm-marker,它里面有一个icon属性,icon里面的图片可以用来标点:

icon中的url是图片的url路径。

同时多种覆盖物

如果你想要显示多种覆盖物,那么你可以使用overlay。(要封装,因为封装之后才能传值进去指定显示什么覆盖物)

简单的overlay是这样子的:

为什么可以基于这个组件来封装是因为这个组件有以下几个好处:

可以定制文本内容

它本身是一个元素,而不是一个图片,(上面的“打点物”都是图片(小红点不确定是不是,可能是一个字体图标的东西)),因为是元素,所以我们能够使用border,background,color等等样式来处理这个元素。

需求实现步骤:

1.定义一个MyOverLay:

ref="customOverlay"

:class="{sample: true}"

:style="pointColor"

pane="labelPane"

@draw="draw">

import { BmOverlay } from 'vue-baidu-map'

export default {

props: ['text', 'position', 'color'], // 用来接受传入的值,用来定制样式

components: {

BmOverlay

},

watch: {

position: {

handler () {

this.$refs.customOverlay.reload() // 当位置发生变化时,重新渲染,内部会调用draw

},

deep: true

}

},

data () {

return {

pointColor: ''

}

},

mounted () {

this.pointColor = this.color // 这里我是用来获取传入的值来定义样式的,可能有点多余了,pointColor是组件中绑定的样式,color是传进来的样式。【这样就可以根据传入的样式来显示不同样子的点了】

},

methods: {

// 这是百度地图的重绘函数,用于维持覆盖物的位置(这里的值貌似会影响拖拉时的偏移度)

draw ({ el, BMap, map }) {

const { lng, lat } = this.position

const pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat))

el.style.left = pixel.x - 16 + 'px'

el.style.top = pixel.y - 16 + 'px'

}

}

}

.sample {

width: 32px;

height: 32px;

line-height: 32px;

border-radius: 32px;

background: rgba(0,0,0,0.5);

overflow: hidden;

box-shadow: 0 0 5px #000;

color: #fff;

text-align: center;

position: absolute;

}

.sample.active {

background: rgba(0,0,0,0.75);

color: #fff;

}

2.使用MyOverLay,传给它需要的值:

v-for="item in 省略" :key="item.省略" :position="{lng: item.longitude, lat: item.latitude}"

:text="item.省略"

:color='省略(这里可以处理一下从而给每一个组件实例都传入自定义的值)'

>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值