【vue+baiduMap】百度地图绘制多边形区域

在这里插入图片描述

1、创建百度地图应用,获取权限ak

百度地图服务台
在这里插入图片描述

Ps.本项目里按钮等基础控件使用的是element-ui版本控件

2、项目内全局引入

index.html页面插入引用代码:

<scriptsrc="//api.map.baidu.com/api?v=2.0&ak=你的密钥"type="text/javascript"
></script>

在这里插入图片描述

3、项目完整代码

template:

<template><div class="map-wrap"><h1>{{ title }}</h1><div class="flex"><div class="button-wrap"><el-buttonsize="small"type="primary"icon="el-icon-edit"@click="handleDraw('polygon')">编辑</el-button><el-button size="small" icon="el-icon-check" @click="handelFinishDraw">完成</el-button><el-buttonsize="small"icon="el-icon-refresh-left"@click="handleClearDraw">重置</el-button></div><div class="picker-color"><div class="text">选择颜色</div><span@click="handleChangeColor(item)"v-for="item in colors":key="item.code":class="['color' + item.code,drawColor == item.value ? 'active' : '',]"><i v-if="drawColor == item.value" class="el-icon-check"></i><i v-else>&nbsp;</i></span></div></div><!--  <div :id="mapId" class="allmap" /> --><div><baidu-mapak="123"class="baidu-map allmap":center="center":zoom="zoom":scroll-wheel-zoom="true":mapClick="false"@click="mapClick"@rightclick="mouseOverEvent = false"@mousemove="syncPolygon"><bm-markerv-if="mouseOverEvent && isediting":position="labelPostion":icon="{ url: iconimg, size: { width: 32, height: 32 } }"><bm-labelcontent="双击鼠标开始绘制,右击鼠标结束绘制":labelStyle="labelStyle":offset="{ width: 35, height: 20 }"/></bm-marker><bm-polygon:path="paths":stroke-color="drawColor":stroke-opacity="1":stroke-weight="4":fill-color="drawColor":fill-opacity="0.2":editing="isediting"@lineupdate="updatePolygonPath"/></baidu-map></div></div>
</template>

js:

<script>
import iconimg from "@/assets/logo.png";
import BaiduMap from "vue-baidu-map/components/map/Map.vue";
import BmMarker from "vue-baidu-map/components/overlays/Marker.vue";
import BmPolygon from "vue-baidu-map/components/overlays/Polygon.vue";
import BmLabel from "vue-baidu-map/components/overlays/Label";
export default {props: {defaultArea: {type: Array,default: () => [],},defaultColor: String,},components: { BaiduMap, BmMarker, BmPolygon, BmLabel },data() {return {title: "地图绘制展示页",center: {lng: 111.695793,lat: 40.822495,},iconimg: iconimg,isediting: true,labelPostion: { lng: 111.695793, lat: 40.822495 },labelStyle: {padding: "3px 5px",color: "#333",fontSize: "14px",background: "#fff",border: "1px solid #efefef",},mouseOverEvent: true,isediting: false,paths: [],zoom: 15,markers: [],map: null,mapId: null,actNav: null,drawColor: "#2A8DFF",drawingManagers: null,colors: [{ code: 1, value: "#FF6B36" },{ code: 2, value: "#FFAD29" },{ code: 3, value: "#FFDA21" },{ code: 4, value: "#29E98F" },{ code: 5, value: "#1EEDE6" },{ code: 6, value: "#2A8DFF" },{ code: 7, value: "#CC16EF" },{ code: 8, value: "#F53ABD" },],};},created() {},mounted() {},watch: {defaultArea: {handler(val) {if (val) {this.drawColor = this.defaultColor || "#2A8DFF";this.$nextTick(() => {if (val) {this.mouseOverEvent = false;this.drawDefault(val);}});}},immediate: true,deep: true,},},methods: {//编辑多边形updatePolygonPath(e) {this.paths = e.target.getPath();console.log(e);},//鼠标移动syncPolygon(e) {if (!this.isediting) {return;}if (!this.paths.length) {return;}if (!this.mouseOverEvent) {return;}this.labelPostion = e.point;this.$set(this.paths, this.paths.length - 1, e.point);},/* 操作按钮 */// 编辑handleDraw() {this.isediting = true;},//完成handelFinishDraw() {this.isediting = false;this.$emit("getMapPointsData", this.paths, this.drawColor);},//重置handleClearDraw() {this.paths = [];this.mouseOverEvent = true;this.$emit("getMapPointsData", [], "");},//地图点击事件mapDblclick(e) {this.isediting = false;},mapClick(e) {if (!this.isediting) {return;}this.labelPostion = {lat: e.point.lat,lng: e.point.lng,};this.paths.push(e.point);},//编辑默认drawDefault(points) {if (points && points.length > 0) {this.center = points[0];this.paths = points;}},//切换颜色handleChangeColor(item) {this.drawColor = item.value;this.$emit("getMapPointsData", this.paths, this.drawColor);},},
};
</script>

css:

<style scoped>
.map-wrap {position: relative;width: 100%;height: 100%;
}
.map-wrap .flex {display: flex;flex-shrink: 0;white-space: nowrap;justify-content: space-between;align-items: center;height: 50px;line-height: 50px;
}
.allmap {width: 100%;height: calc(100% - 50px);position: absolute;
}
ul {list-style: none;
}
.picker-color {text-align: right;padding-right: 30px;
}
.text {display: inline-block;padding: 0 10px;float: left;
}
span {display: inline-block;width: 24px;height: 24px;line-height: 20px;border-radius: 4px;border-width: 2px;border-style: solid;margin-left: 8px;overflow: hidden;text-align: center;margin-top: 10px;float: left;
}
span i {font-weight: 600;
}
.color1 {border-color: #ff6b36;background: rgba(255, 107, 54, 0.3);color: #ff6b36;
}
.color2 {border-color: #ffad29;background: rgba(255, 173, 41, 0.3);color: #ffad29;
}
.color3 {border-color: #ffda21;background: rgba(255, 218, 33, 0.3);color: #ffda21;
}
.color4 {border-color: #29e98f;background: rgba(41, 233, 143, 0.3);color: #29e98f;
}
.color5 {border-color: #1eede6;background: rgba(30, 237, 230, 0.3);color: #1eede6;
}
.color6 {border-color: #2a8dff;background: rgba(42, 141, 255, 0.3);color: #2a8dff;
}
.color7 {border-color: #cc16ef;background: rgba(204, 22, 239, 0.3);color: #cc16ef;
}
.color8 {border-color: #f53abd;background: rgba(245, 58, 189, 0.3);color: #f53abd;
}
</style>

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

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

相关文章

SQL编写规范【干货】

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 获取所有软件开发资料&#xff1a;点我获取

如何利用PCB创建PCB封装库

如何利用PCB创建PCB封装库 首先你要活得PCB工程文件&#xff0c;然后利用Altium Designer将工程文件打开&#xff0c;如下图所示&#xff1a; 然后选择工具栏“设计”->“生成PCB库&#xff08;P&#xff09;”&#xff0c;如下图&#xff1a; 最后将生成的库文件保存到指…

【2015年数据结构真题】

用单链表保存m个整数&#xff0c;结点的结构为 [data] [link]&#xff0c;且|data|<n(n为正整数)。现要求设计一个时问复杂度尽可能高效的算法&#xff0c;对于链表中 data 的绝对值相等的结点&#xff0c;仅保留第一次出现的结点而删除其余绝对值相等的结点。例如&#xff…

C#多线程的操作

文章目录 1 使用线程意义2 C#线程开启的四种方式2.1 异步委托开启线程2.2 通过Thread类开启线程2.3 通过线程池开启线程2.4 通过任务Task开启线程 3 前台线程和后台线程简述3.1 前台线程3.2 后台线程 4 简述Thread和Task开启线程的区别4.1 Thread效果展示4.2 Task效果展示4.3 区…

FPGA电平标准的介绍

对FPGA的管脚进行约束的时候&#xff0c;常常看到这样的电平标准&#xff0c;例如LVCOM18&#xff0c;LVCOS25&#xff0c;LVDS&#xff0c;LVDS25等等&#xff0c;其实这些都是一系列的电平标准。 针对数字电路而言&#xff0c;数字电路表示电平的只有1和0两个状态&#xff0c…

2023年【N1叉车司机】找解析及N1叉车司机复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年N1叉车司机找解析为正在备考N1叉车司机操作证的学员准备的理论考试专题&#xff0c;每个月更新的N1叉车司机复审模拟考试祝您顺利通过N1叉车司机考试。 1、【多选题】《中华人民共和国特种设备安全法》第八十三…

Vue 模板语法 v-bind

红色框里面的都是vue的模板。有了模板就得有模板的特殊语法。上面只是简单的双括号加上表达式&#xff0c;这种叫做插值语法&#xff0c;除了这种语法还有其他语法吗&#xff1f; 插值语法实现的功能很单一&#xff0c;就是将指定的值放到指定的位置。还有一种叫做指令语法&am…

C++算法: 最大化数组末位元素的最少操作次数

涉及知识点 数学 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;这两个数组的长度都是 n 。 你可以执行一系列 操作&#xff08;可能不执行&#xff09;。 在每次操作中&#xff0c;你可以选择一个在范围 [0, n - 1] 内的下标 i &#xff0c;并交换 num…

人工智能如何重塑体验为先的汽车行业

面向汽车行业用户体验的 AI 人工智能的影响力继续在各个主要行业中迅速蔓延&#xff0c;全球各地的公司都开始大力投资 AI 技术&#xff0c;以提高自身的竞争优势。未来的趋势表明&#xff0c;企业如果不立即采用人工智能战略&#xff0c;就可能会远远落后于竞争对手。 AI 和…

真空的应用

真空对人类主要的贡献有两点&#xff1a;对基础研究来说&#xff0c;提供了最清洁和最少受外界干扰的实验环境&#xff1b;对工业生产来说&#xff0c;则可以制造性能最优越、甚至自然界前所未有的材料。随着真空技术在航空航天和军工、光伏发电以及半导体等领域的应用&#xf…

栈和队列:队列

目录 队列概念&#xff1a; 队列&#xff1a; 先进先出&#xff1a; 与栈的区别&#xff1a; 队列的实现&#xff1a; 关于节点指针的封装&#xff1a; 初始化&#xff1a; 入队&#xff1a; 出队&#xff1a; 获取队头元素和获取队尾元素&#xff1a; 判断队列是…

react 组件进阶

目标&#xff1a;1.能够使用props接收数据 2.能够实现父子组建之间的通讯 3.能够实现兄弟组建之间的通讯 4.能够给组建添加props校验 5.能够说出生命周期常用的钩子函数 6.能够知道高阶组件的作用 一&#xff0c;组件通讯介绍 组件是独立且封闭的单元&#xff0c;默认情况下&a…