vue

您所在的位置:网站首页 如何注册自定义控件 vue

vue

2024-07-17 08:30:39| 来源: 网络整理| 查看: 265

首先我们引入vue-baidu-map地图,可以参考:https://blog.csdn.net/qq_39009348/article/details/90070142,里面有详细的vue-baidu-map的基本使用方法。更多覆盖物的使用请参考:https://blog.csdn.net/qq_39009348/article/details/106189999

需求:如果我们需要自定义一个控件区域,并且在该控件区域控制我们的某些标注是否显示,以及搜索详细地址,以及回到地图中心,该如何做呢?

首先我们引入自定义控件:

 在标签内加入一个自定义控件,里面布局自己设置,就和常规的布局一样了;

显示集中器 显示灯控 显示线路 搜索地址: 搜索

我的css代码(需要注意的是自定义控件默认的初始样式是在左上部分,自己根据需要改变初始样式即可):

#searAdressBox{ position:absolute; top:0 !important; right:0 !important; left: 0 !important; bottom:auto !important; z-index: 1000; width:100%; height:40px; line-height: 40px; background-color:rgba(0,0,0,0.1) } .controlBox{ padding-left:170px; padding-right:20px; display: flex; justify-content: space-between; } .control_left{ display: flex; } .check{ position: relative; bottom:7px; } .control_right{ display: flex; } .iconcommon{ color:#409EFF; font-size: 30px; margin-right:20px; cursor: pointer; font-weight: 900; } .searchText{ color:#409EFF; font-size: 15px; font-weight: 900; }

第一个功能:回到地图中心

首先根据每个账号可以设置一个地图的中心点,当用户切换到中心点以外的地方,即可点击回到地图中心,这个功能比较简单,直接点击时把经纬度赋值给标签中绑定的:center="{lng: map.center.lng, lat: map.center.lat}"即可;

第二个功能:切换标注隐藏显示

首先我们添加了一些标注的聚合点,我们想通过控制单选框来控制是否显示这些标注点(不止一个)

首先要说明的是,通过v-show来控制这个标签的显示隐藏是没有效果的;那要如何做呢?我们知道这个标注点是通过v-for遍历一个数组,绑定经纬度标注在地图页面的。当我们遍历一个空数组时,当然就不会显示这些标注了;所以我们的思路是通过计算属性去控制这个数组的数据来达到类似效果:

首先:请求要标注数据,保存在本地

// 获取已经标注集中器经纬度数组 getCMarked() { getCMarked().then(res => { if (res.rows.length > 0 || res.rows !== undefined) { var cArr = [] for (var i = 0; i < res.rows.length; i++) { if (res.rows[i].ismark) { cArr.push(res.rows[i]) } } this.Cmarked = cArr } else { this.$message({ message: '获取数据失败', type: 'error' }) } }) },

然后,计算属性控制该数组是否有数据:

computed: { // 计算属性控制集中器标注是否显示 Cmarkers() { // this.showTerminal为单选框绑定是否显示标注的值,为true是让遍历数组有数据,false时遍历数组为空 if (this.showTerminal) { return this.Cmarked } else { return [] } } },

这样既完成了这个功能

第三个功能:搜索地址并且定位

原理和第一个回到地图中心一样的,获取经纬度,然后设置地图中心为该经纬度的值

getlalg为百度提供的根据地址获取经纬度的接口:

http://api.map.baidu.com/geocoder?address=' + address + '&output=json&key=cCQ1X0IjCVzdIxOD8nEguY&city='

// 通过获取经纬度定位

export const getlalg = (address) => {

  return Axios.get(Url.baiduMap + '/geocoder?address=' + address + '&output=json&key=你的秘钥&city=').then(res => res.data)

}

// 搜索地址 searchAdress() { var adress = this.searchadress getlalg(adress).then(res => { if (res.status === 'OK') { var lg = res.result.location.lng var la = res.result.location.lat this.map.center.lng = lg this.map.center.lat = la this.map.zoom = 18 } else { this.$message({ message: '搜索失败', type: 'info' }) } }) },

 回到地图中心:

上面搜索功能做完之后,搜索一个地址,地图中心也相应的在搜索的位置,所以地图切换到搜索的位置,回到地图中心即是设置了一个固定的地图中心点,每次进入地图初始位置并是该地图中心点,当我们对地图拖拽,离开了地图中心点,想要一键回到中心点该怎么做呢?很容易想到是获取中心点经纬度,重新给地图中心点赋值,即:

this.map.center.lng = lg this.map.center.lat = la

但事实上并没有效果,即点击回到中心点并不会回到中心点的可视范围内,为什么呢?因为中心点一直没变,保存在数据库里的中心点没变,拖拽地图并没有改变中心点,所以地图可视范围不会变的,但是我们发现搜索后中心点是变了,所以地图移动到了搜索位置,我们根据这个思路,只要在每次拖拽结束,获取到当前位置的中心点,赋值给地图中心点,回到中心点后去获取数据库的中心点即可完美解决:

 地图绑定拖拽结束事件

获取中心点经纬度,改变中心点 

// 监听拖拽地图结束事件 dragendEvent(type, target, pixel, point) { this.map.center.lng = type.point.lng this.map.center.lat = type.point.lat }, // 监听拖拽地图结束事件(建议按这种方式写,因为上面这种方式得到的事拖拽时鼠标点击下去那一刻的经纬度,而不是你拖拽到可视区域的中心点经纬度) ,而且上面的方式获取点击时的坐标点经纬度,然后又设置该点为中心点,地图就会有一个从点击向中心点移动的过程,看起来像卡顿一样,体验不好 dragendEvent(e) { const { lng, lat } = e.target.getCenter() this.map.center.lng = lng this.map.center.lat = lat },

 回到中心点:

// 获取地图中心点 getMapCenters() { const para = { id: this.peopleId } var params = Qs.stringify(para) getMarkcenter(params).then(res => { // 获取地图中心点,设置中心点 this.map.center.lng = res.longitude this.map.center.lat = res.latitude this.map.zoom = 18 }) },

效果图:



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭