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.hqwc.cn/news/706680.html

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

相关文章

绘制过程图,Minitab如何帮助大学生拿下统计学科高分

Madison Bair是Minitab全球总部的一名营销实习生&#xff0c;目前&#xff0c;她正在宾夕法尼亚州的阿罗修斯山学院攻读学位。在进修过程中&#xff0c; 她似乎遇到了一些麻烦事&#xff0c;我们一起来看看&#xff01; 背景— 来自Madison的自述 Hi&#xff01;大家好&…

Dockerfile中yum install 无法使用的问题

记录一次开发中使用Dockerfile进行centos7容器自定义的时候发现yum install无法使用 1. 查看主机是否能够联网 ping www.baidu.com主机能够联网 2. 查看进行Dockerfile进行打包的时候新容器是否联网 在Dockerfile中添加 RUN ping www.baidu.com 发现无法ping通 解决办法 …

基于yolov8+flask搭建一个web版本的网页模型预测系统

测试环境&#xff1a; anaconda3python3.8 torch1.9.0cu111 ultralytics8.2.2 首先我们将训练好的权重放在weights目录下面 并将名字改成yolov8n.pt&#xff0c;如果不想改可以在代码app.py都把路径改过来即可。然后我们打开 python app.py之后看到 我们点击选择文件支持图…

RSAC 2024观察:软件供应链安全进入AI+时代

盘点RSAC会议上软件供应链安全议题的特点、趋势及启示。 网络安全行业备受关注的RSAC 2024刚刚落下帷幕&#xff0c;今年大会的创新沙盒比赛打破了之前五年均有软件供应链安全初创公司进入10强的惯例&#xff0c;但这并未影响软件供应链安全议题成为大会必选项&#xff0c;并引…

数据分析实例——搭建电商的指标体系||对应功能开发需要接入的电商API接口说明

前言&#xff1a; 在日常工作中&#xff0c;数据分析中常常涉及搭建指标体系&#xff0c;搭建电商需要接入的电商API接口本文主要以电商为案例&#xff0c;来讲讲如何搭建指标体系。 指标体系的定义&#xff1a; 指标体系是由一系列指标组成的&#xff0c;这些指标是基于不同的…

黑马guli商城项目初始化-SpringCloud微服务项目初始化使用SpringCloudAlibaba快速搭建分布式系统

视频教程&#xff1a;https://www.bilibili.com/video/BV1np4y1C7Yf?p4&spm_id_frompageDriver&vd_source0b3904471b2f8a3a133e05bd42f729a9 这里写目录标题 1.服务架构图2.初始化目录结构3.初始化数据库4.使用逆向工程项目生成数据库CRUD5.创建工具项目6.配置mybati…

2024CCPC郑州邀请赛暨河南省赛

比赛记录&#xff1a;看群里大家嘎嘎拿牌&#xff0c;自己个人来solo了一下&#xff0c;发现简单到中等题很多&#xff0c;写了两小时出了7题&#xff0c;但是写的比较慢&#xff0c;对难题把握还是不准确 补题 &#xff1a; A题确实巧妙充分利用题目的数据范围来思考问题&…

一套智慧水务平台大概多少钱?

在当今日益发展的水务行业中&#xff0c;如何实现高效、智能的管理&#xff0c;成为了摆在水务企业和相关部门面前的一大挑战。而智慧水务平台作为新时代的解决方案&#xff0c;以其强大的功能和卓越的性能&#xff0c;赢得了广泛的关注。那么&#xff0c;一套智慧水务平台大概…

PDF Squeezer for Mac,让PDF压缩更高效

还在为PDF文件过大而烦恼吗&#xff1f;试试PDF Squeezer for Mac吧&#xff01;它拥有强大的压缩功能&#xff0c;可以快速将PDF文件压缩至更小的体积&#xff0c;让你的文件传输更快捷。同时&#xff0c;它还支持多种压缩方式&#xff0c;满足你的不同需求。赶快下载体验吧&a…

【上海生物发酵展精选展商】三门峡市高瑞生物技术有限公司

三门峡市高瑞生物技术有限公司注册成立于2017年2月23日&#xff0c;经营范围是微生物培养基原材料制造、销售。2017年度因场地搬迁、异地重建&#xff0c;公司由“三门峡市高山生物制品有限公司”更名为“三门峡市高瑞生物技术有限公司”。 该公司具有20余年丰富经验的微生物培…

又一个行业被Ai背刺了:Comfyui生成你的专属模特!

工作流获取方式放在文末了 Ai技术的进步&#xff0c;带来了许多之前无法实现的新技术和新成品&#xff0c;这也使得曾经需要漫长的时间和复杂的创作过程才能够完成的工作呗Ai技术轻松代替。 于此同时&#xff0c;不同行业也在这个过程中受到了不同程度的冲击。 今天给大家分…

【自然语言处理】二元文法模型

实验名称 二元文法模型 实验目的1.掌握N-gram文法的公式&#xff1b; 2.理解语言模型的实现过程&#xff1b; 3.掌握简单的平滑方法&#xff1b; 4.用代码编程实现2元语言模型&#xff0c;即一阶马尔可夫链。 实验内容&#xff1a;使用免费的中文分词语料库&#xff0c;如人民…