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

在这里插入图片描述

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

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

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

2、项目内全局引入

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

<script
      src="//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-button
          size="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-button
          size="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-map
        ak="123"
        class="baidu-map allmap"
        :center="center"
        :zoom="zoom"
        :scroll-wheel-zoom="true"
        :mapClick="false"
        @click="mapClick"
        @rightclick="mouseOverEvent = false"
        @mousemove="syncPolygon"
      >
        <bm-marker
          v-if="mouseOverEvent && isediting"
          :position="labelPostion"
          :icon="{ url: iconimg, size: { width: 32, height: 32 } }"
        >
          <bm-label
            content="双击鼠标开始绘制,右击鼠标结束绘制"
            :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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字化催生低代码开发浪潮,管理系统也能一键生成

近年来&#xff0c;数字经济以无比迅猛的势头崛起&#xff0c;成为引领全球经济变革的重要引擎。在这个数字化趋势日益明显的时代&#xff0c;企业的数字转型已经成为提高竞争力、适应市场需求的迫切需要。 随着科技的飞速发展&#xff0c;数字技术已经渗透到各个领域&#xff…

详细介绍‘’由于找不到msvcr110.dll 无法继续执行简单处理方法

分享关于“msvcp110.dll丢失的4个解决方案”的主题。在我们日常使用电脑的过程中&#xff0c;可能会遇到各种各样的问题&#xff0c;而msvcp110.dll丢失就是其中之一。那么&#xff0c;msvcp110.dll丢失是什么意思呢&#xff1f;又是什么原因导致了这个问题的出现呢&#xff1f…

详细记一下jvm调优整过程

cpu占用过高 cpu占用过高要分情况讨论&#xff0c;是不是业务上在搞活动&#xff0c;突然有大批的流量进来&#xff0c;而且活动结束后cpu占用率就下降了&#xff0c;如果是这种情况其实可以不用太关心&#xff0c;因为请求越多&#xff0c;需要处理的线程数越多&#xff0c;这…

2019年12月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 下列关于舞台的描述,不正确的是? A:Scratch只能设置一个舞台 B:舞台不能进行编程 C:舞台可以有多个背景 D:舞台上可以有角色 答案:B A选项,scratch只有一个舞台,B选项,可以在舞台区进行编程,例如切换背景,设置背景…

【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】

文章目录 概要前置条件统计数据分析直方图均衡化原理小结 概要 图像处理是计算机视觉领域中的重要组成部分&#xff0c;而直方图在图像处理中扮演着关键的角色。如何巧妙地运用OpenCV库中的图像处理技巧&#xff0c;特别是直方图相关的方法&#xff0c;来提高图像质量、改善细…

【云备份项目总结】客户端篇

项目总结 整体回顾util.hppdata.hppcloud.hpp 代码 客户端的代码与服务端的代码实现有很多相似之处&#xff0c;我们也只编写一个简单的客户端代码。 整体回顾 客户端要实现的功能是&#xff1a;对指定文件夹中的文件自动进行备份上传。但是并不是所有的文件每次都需要上传&am…

2020年09月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 下面哪个积木能够调节左右声道的音量? A: B: C: D: 答案:C 第2题 当我们进行数学计算时,需要用到下面哪个模块中的积木? A: B:

【已解决】vscode 配置C51和MDK环境配置

使用命令 gcc -v -E -x c - 看自己gcc 有没有安装好 也可以在自己的vscode中新建一个终端 gcc -v g -v 首先把自己的C51 和MDK 路径 设置好 vscode 中设置 C51 和 MDK 的路径 这是你keil 中写 51单片机和 STM32 的 如果你出现什么include 的什么波浪线&#xff0c;那估计…

如何用python生成动态随机验证码图片

相信大部分小伙伴在登录注册页面都看到过这样的验证码图片&#xff1a; 今天就带大家用实现一波这种验证码图片的生成&#xff0c;这在Django开发中可以拿来即用~ 1. 首先导入必要的库&#xff1a; import random from PIL import Image, ImageDraw, ImageFont, ImageFilter…

编译原理-至下而上的语法分析

文章目录 至下而上分析的基本问题归约短语规范归约符号栈的使用 算符优先分析优先关系算符文法及优先关表构造如何求FIRSTVT和LASTVT算符优先分析算法优先函数 至下而上分析的基本问题 归约 用一个寄存符号的先进后出栈&#xff0c;把输入符号一个一个地移进栈里&#xff0c;…

SAP 52策略测试简介

我们在前面测试了50策略按单生产,创建完计划独立需求后,通过主数据中的独立集中的字段控制下层物料是否能通过计划订单转成生产订单和采购订单。 52策略其实和50策略非常的相似。52策略就是按库存生产,创建完计划独立需求后的结果和50策略是一样的。 1、我们先看下50策略和…

从零基础到精通:Flutter开发的完整指南

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 第一部分&#xff1a;入…

Linux:给openlab搭建web网站

httpd服务器建立综合练习 建立网站需求&#xff1a; 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c; &#xff08;1&#xff09;、基于 www.openlab.com/stud…

LiveMedia视频监控汇聚管理平台功能方案之REST HTTP接口服务(六)

LiveMedia视频监控汇聚管理平台全面支持HTTP接口与其他系统对接&#xff0c;接口包含登陆、视频设备/组织结构添加、修改、删除、实时视频、录像回放、定位、设备控制、报警通知及报警联动等&#xff0c;第三方系统可以无缝的把视频中间件当作自身系统中的一个组件来调用和同步…

常用的软件测试组织架构模型

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;加入1000人软件测试技术学习交流群&#x1f4e2;资源分享&#xff1a;进了字节跳动之后&#xff0c;才…

Slax Linux 强化了会话管理和引导参数选项

导读Slax Linux 的创始人和维护者Tomas Matejicek 宣布 了他的微型和便携 GNU/Linux 发行版的新版本&#xff0c;带来了各种增强和错误修复。 新的 Slax Linux 版本&#xff08;基于 Debian 的 12.1 版本和基于 Slackware 的 15.0.2 版本&#xff09;引入了在可写设备上运行发…

黑客通过ScreenConnect远程访问入侵医疗机构

导语&#xff1a;最近&#xff0c;安全研究人员发现黑客利用ScreenConnect远程访问工具对美国多家医疗机构进行攻击。这些威胁行为利用了Transaction Data Systems&#xff08;TDS&#xff09;使用的本地ScreenConnect实例&#xff0c;该公司是一家在全美50个州都有业务的药店供…

Monkey压力测试

环境搭建 提前下好java&#xff08;我的是java8&#xff09; https://www.androiddevtools.cn/ 下载Android SDK 解压后点击安装 可以使用雷神模拟器模拟手机连接 dumpsys activity activities | grep “mFocusedActivity”&#xff08;获取当前运行进程包名&#xff09; ex…

【数据结构—— 栈的实现(数组栈)】

数据结构—— 栈的实现 一.栈1.1栈的概念及结构 二.栈的实现2.1头文件的实现——&#xff08;Strck.h&#xff09;2.2 源文件的实现——&#xff08;Strck.c&#xff09;2.3 源文件的实现——&#xff08;test.c&#xff09; 三.栈的实际数据测试展示3.1正常的后进先出方式3.2 …

对自动化测试的一些展望与理解

1. 需求和目标 在我开展自动化测试之前&#xff0c;其实该项目以前的测试人员也已经写了很多的接口测试用例&#xff0c;但是大多数用例处于“半瘫痪”状态&#xff0c;在CI上无人维护&#xff08;听说起初是有人维护的&#xff0c;但是后来用例多了&#xff0c;维护的人每次花…