vue2 结合iview和百度地图API实现电子围栏

vue2 结合iview和百度地图API实现电子围栏

实现在地图上绘制电子围栏并自定义电子围栏样式,还可以标记中心点

1.百度地图API相关JS引用

 <script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=百度地图官网申请的ak"></script>//电子围栏相关的api<link href="//mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.css" rel="stylesheet">
<script type="text/javascript"src="//mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.js"></script>

2.页面代码

<template><div style="position: relative;height:100%"><!--地图--><div id="map" class="map" style="height:100%" /><div class="draw-btn" @click="drawMap()">开始绘制</div><!--工具栏--><div class="color-list" v-if="showDraw"><Button :type="isCenter?'info':'primary'"size="small"style="margin-right: 10px;"@click="setCenter"> 中心点</Button><input type="color"id="strokeColor"v-model="strokeColor"><Select v-model="strokeWeight"style="width:50px;margin:0 5px"><Option v-for="item in 9":value="item":key="item">{{ item }}</Option></Select><input type="color"id="fillColor"v-model="fillColor"><Select v-model="fillOpacity"style="width:60px;margin:0 5px"><Option v-for="item in fillOpacityList":value="item":key="item">{{ item }}</Option></Select></div></div>
</template>
<script>
export default {name: 'map',data() {return {strokeColor: '#DA4863',strokeWeight: 6,fillColor: '#DA4863',fillOpacity: 0.6,fillOpacityList: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],polyLinePoints: [],markerPoints: [],polyLines: null,isCenter: false,showDraw:false}},computed:{changeData() {const { strokeColor, strokeWeight, fillColor, fillOpacity } = thisreturn {strokeColor,strokeWeight,fillColor,fillOpacity}}},watch: {changeData: function (newV) {this.initSetMap()}},methods:{//开始绘制drawMap(){this.showDraw= truethis.isCenter = falsethis.strokeColor = '#DA4863'this.strokeWeight = 6this.fillColor = '#DA4863'this.fillOpacity = 0.6this.initSetMap()},//获取坐标初始化地图init() {let data={blat: 29.516071,blng: 106.525681}this.initMap(data.blng, data.blat)},//清除坐标点clearMarkerOverlay() {const allOverlays = this.map.getOverlays()for (let i = 0; i < allOverlays.length; i++) {if (allOverlays[i].id && allOverlays[i].id === this.selectData.id) {this.map.removeOverlay(allOverlays[i])}}},//修改围栏样式时触发initSetMap() {this.polyLinePoints = []this.markerPoints = []var that = thisconst { strokeColor, strokeWeight, fillColor, fillOpacity } = thisvar overlaycomplete = function (e) {var mlnglat = []var path = e.overlay.getPath() // Array<Point> 返回多边型的点数组for (var i = 0; i < path.length; i++) {mlnglat.push({lng: path[i].lng,lat: path[i].lat})}console.log(mlnglat)}var styleOptions = {strokeColor: this.strokeColor, // 边线颜色。fillColor: this.fillColor, // 填充颜色。当参数为空时,圆形将没有填充效果。strokeWeight: this.strokeWeight, // 边线的宽度,以像素为单位。strokeOpacity: 1, // 边线透明度,取值范围0 - 1。fillOpacity: this.fillOpacity, // 填充的透明度,取值范围0 - 1。strokeStyle: 'solid' // 边线的样式,solid或dashed。}this.drawingManager = new BMapGLLib.DrawingManager(this.map, {isOpen: false, // 是否开启绘制模式enableDrawingTool: true, // 是否显示工具栏drawingToolOptions: {anchor: BMAP_ANCHOR_TOP_RIGHT, // 位置offset: new BMapGL.Size(5, 5) // 偏离值},polygonOptions: styleOptions // 多边形的样式})this.drawingManager.addEventListener('overlaycomplete', overlaycomplete)},//初始化地图initMap(lng, lat) {let that = thisif (this.map) {this.map.clearOverlays()}this.map = new BMapGL.Map('map')var poi = new BMapGL.Point(lng, lat)this.map.centerAndZoom(poi, 18) // 设置中心点坐标和地图级别this.map.enableScrollWheelZoom() // 启用鼠标滚动对地图放大缩小this.map.addControl(new BMapGL.NavigationControl())if (this.polyLinePoints && this.polyLinePoints.length) {this.polyLinePoints.forEach((item) => {if (item.points && item.points.length) {let data = []item.points.forEach((col) => {var po = new BMapGL.Point(col.lng, col.lat)data.push(po)})this.polyLines = new BMapGL.Polygon(data, {strokeColor: item.strokeColor, // 边线颜色。fillColor: item.fillColor, // 填充颜色。当参数为空时,圆形将没有填充效果。strokeWeight: item.strokeWeight, // 边线的宽度,以像素为单位。strokeOpacity: 1, // 边线透明度,取值范围0 - 1。fillOpacity: item.fillOpacity // 填充的透明度,取值范围0 - 1。})this.map.addOverlay(this.polyLines)}})}if (this.markerPoints && this.markerPoints.length) {this.markerPoints.forEach((item) => {if (item.points && item.points.length) {let data = []item.points.forEach((col) => {var marker = new BMapGL.Marker(new BMapGL.Point(col.lng, col.lat))marker.id = item.idthis.map.addOverlay(marker)const label = new BMapGL.Label('', {offset: new BMapGL.Size(0, 0)})label.setStyle({textAlign: 'center',// 设置label的样式color: 'white',fontSize: '14px',border: 'none',color: 'black',fontFamily: '黑体'// opacity: '0.5',})label.setContent(`<div style="background: rgba(255,255,255,1);border-radius: 12px;padding:3px 5px">${item.name}</div>`)marker.setLabel(label)})}})}//地图展示样式this.map.setMapStyleV2({styleJson: [// {//   featureType: 'poilabel',//   elementType: 'all',//   stylers: {//     visibility: 'off'//   }// },// {//   featureType: 'manmade',//   elementType: 'all',//   stylers: {//     visibility: 'off'//   }// },{featureType: 'building',elementType: 'all',stylers: {visibility: 'off'}}]})this.map.addEventListener('click', function (e) {//点击地图设置中心点if (that.isCenter) {that.clearMarkerOverlay()var marker = new BMapGL.Marker(new BMapGL.Point(e.latlng.lng, e.latlng.lat))marker.id = that.selectData.idthat.map.addOverlay(marker)const label = new BMapGL.Label('', {offset: new BMapGL.Size(0, 0)})label.setStyle({textAlign: 'center',// 设置label的样式color: 'white',fontSize: '14px',border: 'none',color: 'black',fontFamily: '黑体'// opacity: '0.5',})label.setContent(`<div style="background: rgba(255,255,255,1);border-radius: 12px;padding:3px 5px">${that.selectData.name}</div>`)marker.setLabel(label)}})},setCenter() {this.isCenter = true},},mounted() {this.init()}}
</script>
<style scoped lang="less">
/deep/.BMapGLLib_Drawing {position: inherit !important;
}
/deep/ .BMapGLLib_Drawing .BMapGLLib_polyline {display: none !important;
}/deep/ .BMapGLLib_Drawing_panel {position: absolute;right: 380px;top: 1%;
}
//隐藏除了多边形之外的按钮
/deep/ .BMapGLLib_Drawing .BMapGLLib_marker {display: none !important;
}
/deep/ .BMapGLLib_Drawing .BMapGLLib_circle {display: none !important;
}
/deep/ .BMapGLLib_Drawing .BMapGLLib_rectangle {display: none !important;
}
/deep/.BMap_stdMpZoom {width: 0 !important;height: 0 !important;
}
.draw-btn{position: absolute;left: 10px;top: 2%;z-index: 999;
}
.color-list {position: absolute;right: 10px;top: 2%;z-index: 999;margin: auto;display: flex;align-items: center;justify-content: center;
}
</style>

效果图

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/838004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】调优工具

这里简单介绍一下各种调优用到的工具 一&#xff0c;环境准备 首先我们需要准备好Java环境&#xff0c;和win上的jdk环境&#xff08;图形化界面如jconsole只有jdk中有&#xff09;。 有这样一个类Prolem&#xff0c;每个线程都会带来100个垃圾对象&#xff0c;线程new完100…

翻译《The Old New Thing》- What does the CS_OWNDC class style do?

What does the CS_OWNDC class style do? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20060601-06/?p31003 Raymond Chen 2006年06月01日 简要 本文讨论了CS_OWNDC窗口类样式的影响&#xff0c;它让窗口管理器为窗口创建一个永久的设…

品牌银饰售卖|基于SSM+vue的品牌银饰售卖平台的设计与实现(源码+数据库+文档)

品牌银饰售卖平台 目录 基于SSM&#xff0b;vue的品牌银饰售卖平台的设计与实现 一、前言 二、系统设计 三、系统功能设计 1前台功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题…

Redission分布式锁 - 抢课系统

使用Redission分布式锁与Kafka消息队列&#xff0c;实现学生抢课系统&#xff08;高并发秒杀场景&#xff09;。 目录 一、思路1.为频繁访问的信息设置缓存&#xff08;1&#xff09;登陆&#xff08;2&#xff09;课程任务信息&#xff08;3&#xff09;用户抢课记录 2.消息队…

知识图谱开发日志

应用于应用环境的配置.测试.发布 假如你写了一个web,并且测试调试都没有问题 并且,你想发给你的朋友,导师,或者部署到远程云服务器上 那么,你需要配置相同的软件,比如数据库,web服务器,必要的插件,库,etc…但这并不一定能保证软件的正常运行,因为别人可能使用完全不同的操作系统…

在VMware安装Androidx86_64系统要点

上篇使用VirtualBox安装过Androidx86_64系统&#xff0c;尝试了没有蓝牙共享的好方法。本篇记录下使用Vmware虚机安装改系统&#xff0c;并使用蓝牙共享功能。 1.准备材料 本篇安装环境是安装Window10_64位系统。需要下载好Vmware安装包&#xff0c;VMWare版本&#xff1a;VMw…

python:rename函数用法

在Pandas库中&#xff0c;rename函数是一个非常实用的方法&#xff0c;用于重命名DataFrame或Series的轴标签&#xff08;如列名或索引&#xff09;。以下是rename函数的基本用法、参数以及一些示例。 1.rename基本语法 DataFrame.rename(mapperNone, indexNone, columnsNone…

【以规划为导向的自动驾驶】Planning-oriented Autonomous Driving

ABSTRACT 研究背景&#xff1a; 现代自动驾驶系统是顺序化地排列多个任务模块, 近期的主流方法&#xff1a; ①为单个任务部署独立模型 ②设计具有分离式头部的多任务(multi-task)范式。 但是&#xff0c;这些方法会累积误差或任务间协同不足而不利于自动驾驶。 作者认为重…

【devops】Linux 日常磁盘清理 ubuntu 清理大文件 docker 镜像清理

日常磁盘清理 1、查找大文件 find / -type f -size 1G2、清理docker无用镜像&#xff08;drone产生的残余镜像文件&#xff09; docker system prune -a一、清理服务器磁盘 1、查找大文件 在Ubuntu系统中&#xff0c;你可以使用find命令来查找大文件。find命令是一个强大的…

从离线到实时:无锡锡商银行基于 Apache Doris 的数据仓库演进实践

作者&#xff1a;武基鹏&#xff0c;无锡锡商银行 大数据技术经理 编辑整理&#xff1a;SelectDB 技术团队 导读&#xff1a;为实现数据资产的价值转化以及全面数字化、智能化的风险管理&#xff0c;无锡锡商银行大数据平台经历从 Hive 离线数据仓库到 Apache Doris 实时数据仓…

5G技术相关部分图解

1、面向5G商用网络的全系列解决方案 面向5G商用网络的全系列解决方案涵盖了从核心网到接入网的各个方面&#xff0c;确保网络的高性能、高可靠性和高安全性 2、2\3\4\5G带宽图解 G带宽的提升将推动许多新型应用的发展&#xff0c;并提供更快速、更可靠的移动通信体验。然而…

Springboot3 链接Redis遇到的报错(本文仅记录保存,优质文章移步springboot专栏)

出现的报错&#xff1a; cannot connect to Redisedis.clients.jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is setredis wrong number of arguments for ‘auth’ command 其实上面的三个报错是不同界面显示的&#xff0c;后面两个是通过Ide…

git入门操作

一、介绍 Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds创建&#xff0c;用于有效、高速地处理从小到大的项目版本管理。 二、注册Git代码托管平台账号 以下几个平台可供选择&#xff1a; Gitee: https://gitee.com/(国内) Gitee&#xff08;码云&…

【源码】2024全新多语言区块链交易所源码/期权交易/申购/币币秒合约交易所

全新ui&#xff0c;更新很多内容&#xff0c;具体看图&#xff0c;全部开源 全新多语言区块链交易所源码/期权交易/申购/币币秒合约交易所 - 吾爱资源网

03-数据结构(一)

链接&#xff1a;C# 数据结构_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1a541147Nk/?spm_id_from333.337.search-card.all.click&vd_source6eb7d966aa03ff5cb02b63725f651e68 链接&#xff1a;使用 C#.Net 学习掌握数据结构 (更新中)_哔哩哔哩_bilibili 一…

CheckStyle静态样式之道

优质博文&#xff1a;IT-BLOG-CN 在标准化的统一样式检查规范里&#xff0c;最为常用的统一样式工具是checkstyle插件&#xff0c;而不是国内阿里的代码规约插件。 【1】下载插件 【2】配置生效 配置生效及告警设置 【3】配置checkstyle.xml 官网地址 官网最新Releases 下面…

模拟量电机控制器PWM 输出隔离转换器4-20mA/0-5V/0-10V转50Hz/100Hz/1KHz/10KHz/100KHz

主要特性: 精度、线性度误差等级&#xff1a; 0.1、0.2、0.5 级4-20mA/0-5V/0-10V 等标准信号输入可选择RS485 通讯输入&#xff0c;支持 Modbus 协议PWM 信号输出&#xff0c;PWM 频率可选PWM 输出驱动能力可达 5A信号输入/信号输出 3000VDC 隔离可选择一进一出&#xff0c;一…

OpenAI 震撼发布:GPT-4o免费,实时语音视频交互开启新纪元

OpenAI 震撼发布&#xff1a;GPT-4o免费&#xff0c;实时语音视频交互开启新纪元 在仅仅问世17个月后&#xff0c;OpenAI 研制出了仿佛科幻片中登场的超级人工智能——GPT-4o&#xff0c;而且所有人都可以完全免费使用&#xff0c;让这个科技界的巨浪让人震撼无比&#xff01;…

真JAVA代码审计之XSS漏洞

Part1 漏洞案例demo&#xff1a; 没有java代码审计XSS漏洞拿赏金的案例。 所以将就看看demo吧 漏洞原理&#xff1a;关于XSS漏洞的漏洞原理核心其实没啥好说的&#xff0c;网上一查一大堆。 反射性XSS漏洞 <% page language"java" contentType"text/ht…

图搜索算法-最短路径算法-贝尔曼-福特算法

相关文章&#xff1a; 数据结构–图的概念 图搜索算法 - 深度优先搜索法&#xff08;DFS&#xff09; 图搜索算法 - 广度优先搜索法&#xff08;BFS&#xff09; 图搜索算法 - 拓扑排序 图搜索算法-最短路径算法-戴克斯特拉算法 贝尔曼-福特算法&#xff08;Bellman-Ford&#…