实现Vue高德地图多边形编辑器吸附功能

2023-11-14

前言

之前做的高德地图多边形编辑器吸附功能,最近出现不能编辑。在修改的过程中顺便记录一下。

实现效果

在这里插入图片描述

安装

npm i @amap/amap-jsapi-loader --save

核心代码

<template>
  <div class="container">
    <div id="container"></div>
    <div class="input-card">
      <el-button @click="createPolygon()">新建</el-button>
      <el-button @click="polyEditor.open()">开始编辑</el-button>
      <el-button @click="editClose">结束编辑</el-button>
    </div>
  </div>
</template>
   
<script>
import AMapLoader from "@amap/amap-jsapi-loader";
var polyEditor = "";
export default {
  name: "AreaMap",
  data() {
    return {
      map: null,
      // polyEditor: null,
      coordList: "",
      timer: "",
    };
  },
  props: ["pathList", "dataId"],
  mounted() {
    if (this.dataId) {
      this.start();
      console.log("修改");
    } else {
      this.echart();
      console.log("添加");
    }
  },
  methods: {
    start() {
      this.timer = setInterval(this.echart, 1000); // 注意: 第一个参数为方法名的时候不要加括号;
    },
    async echart() {

      clearInterval(this.timer);
      console.log("接收参数", this.pathList);
      // console.log(typeof JSON.parse(this.pathList));
      await AMapLoader.load({
        key: "申请好的Web端开发者Keyxxxxxx", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: [
          "AMap.ToolBar",
          "AMap.Driving",
          "AMap.PolygonEditor",
          "AMap.PlaceSearch",
        ], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
      })
        .then((AMap) => {
          this.map = new AMap.Map("container", {
            //设置地图容器id
            viewMode: "3D", //是否为3D地图模式
            zoom: 10, //初始化地图级别
            center: [113.08, 34.94], //初始化地图中心点位置
          });
          this.map.setFitView();
        })
        .catch((e) => {
          console.log(e);
        });
      this.initEditor();

    },
    initEditor() {
      var path1 = []
      if (this.dataId) {
        path1 = JSON.parse(this.pathList) || [];

      }

      var polygon1 = new AMap.Polygon({
        path: path1,
      });
      this.map.add([polygon1]);
      polyEditor = new AMap.PolygonEditor(this.map);
      console.log(polyEditor);
      console.dir(polyEditor);
      polyEditor.on("add", (data) => {
        console.log(data);
        this.coordList = data.lnglat;
        var polygon = data.target;
        polygon.on("dblclick", () => {
          polyEditor.setTarget(polygon);
          polyEditor.open();
        });
      });
      polygon1.on("dblclick", () => {
        polyEditor.setTarget(polygon1);
        polyEditor.open();
      });

      return polyEditor;
    },
    createPolygon() {
      polyEditor.close();
      polyEditor.setTarget();
      polyEditor.open();
    },
    editClose() {
      // console.log("this", this);

      let that = this;
      polyEditor.on("end", function (event) {
        // event.target 即为编辑后的多边形对象
        //多边形的坐标
        this.coordList = event.target.getPath();
        // console.log("coordList", this.coordList);
        let mapList = [];
        this.coordList.forEach((v) => {
          console.log("v", v.lng, "--", v.lat);
          mapList.push([v.lng, v.lat]);
        });
        that.$emit("mapList", mapList);
      });
      polyEditor.close();
    },
  },
  beforeDestroy() {
    clearInterval(this.timer);
  },
};
</script>
   
<style lang="scss" scoped>
#container {
  width: 100%;
  height: 500px;
}

.container {
  position: relative;
  border: 1px solid rgb(204, 204, 204);

  .input-card {
    position: absolute;
    bottom: 15px;
    right: 15px;
  }
}
</style>

多边形坐标提交

点击结束编辑处理编辑的多边形坐标。如下
[[112.782253,35.045745],[112.916836,34.972633],[112.871517,34.875799],[112.665524,34.991761]]

editClose() {
      // console.log("this", this);

      let that = this;
      polyEditor.on("end", function (event) {
        // event.target 即为编辑后的多边形对象
        //多边形的坐标
        this.coordList = event.target.getPath();
        // console.log("coordList", this.coordList);
        let mapList = [];
        this.coordList.forEach((v) => {
          console.log("v", v.lng, "--", v.lat);
          mapList.push([v.lng, v.lat]);
        });
        that.$emit("mapList", mapList);
      });
      polyEditor.close();
    },

在编辑的时候回显出来

接收pathList参数,放到polygon1 进行展示。
在这里插入图片描述

总结

这方法用来单独封装,进行使用。根据父子传参进行数据的传输。最后保存到数据库中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现Vue高德地图多边形编辑器吸附功能 的相关文章

随机推荐

  • HashMap实现原理及扩容机制详解

    文章目录 一 HashMap基础 二 红黑树基础 三 HashMap实现原理 1 Node和Node链 2 拉链法 3 关于Node数组 table 4 散列算法 5 HashMap和红黑树 6 关于TreeNode 转自 这篇更详细 ht
  • UNext:基于 MLP 的快速医学图像分割网络

    UNext 会议分析 摘要 贡献 方法 整体框架 1 Shifted MLP 2 Tokenized MLP Stage 实验 1 对比实验 2 消融实验 2 1 模块的消融实验 2 2 通道数的探索 可借鉴参考 会议分析 期刊 会议 名
  • 前端常见难点面试题

    1 跨域 同源策略 同源策略 同源策略是浏览器的一个安全功能 不同源的客户端脚本在没有明确授权的情况下 不能读写对方资源 同源 就是协议 域名和端口号相同 降域 document domain 同源策略认为域和子域属于不同的域 如 chil
  • 《代码走查》杂记

    代码走查 一 定义 1 代码走查 code walkthrough 是一个开发人员与架构师集中与讨论代码的过程 代码走查的目的交换有关代码是如何书写的思路 并建立一个对代码的标准集体阐述 在代码走查的过程中 开发人员都应该有机会向其他人来阐
  • OpenGL: 视图矩阵的推导

    OpenGL 视图矩阵的推导 2014年03月04日 11 08 45 阅读数 6525 把物体从世界坐标系转化到视点坐标系的矩阵称为视图矩阵 下面我们先看下opengl视图矩阵的推导过程 假设视点或camera的局部坐标系为UVN UVN
  • webpack中的代码分离

    Tip 本指南继续沿用 起步 中的示例代码 请确保你已熟悉这些指南中提供的示例以及输出管理章节 代码分离是 webpack 中最引人注目的特性之一 此特性能够把代码分离到不同的 bundle 中 然后可以按需加载或并行加载这些文件 代码分离
  • Python 九九乘法表的7种实现方式

    Python 九九乘法表的7种实现方式 九九乘法表是初学者学习编程的必要练手题目之一 因此各种语言都有对应的实现方式 而 Python 也不例外 在 Python 中 我们可以使用多种方式来生成一个简单的九九乘法表 实现方式一 双重循环 f
  • 远程debug java_远程Debug Java进程的方法

    远程debug的意思是启动一个Java进程 启动一个debugger进程 将两者连接起来 利用debugger来debug Java进程 事实上目前所有的IDE的debug功能都是通过远程debug方式来实现的 它们都利用了一个叫做JDPA
  • 【行人重识别】Unsupervised Salience Learning for Person Re-identification

    Abstract 人眼可以基于 一些较小的显着区域来识别人的身份 然而 当使用现有方法计算图像的相似度时 通常会隐藏这种有价值的显着信息 此外 许多现有的方法学习区别性特征并以监督的方式处理急剧的视点变化 并要求为不同的摄像机视图对标注新的
  • QSqlQueryModle使用过滤器来完成数据库数据筛选

    原型 void QSqlTableModel setFilter const QString filter 注意 如果模型已从数据库中填充数据 则模型将其与新滤波器重新选择 否则 将在调用下一次select 中应用过滤器 model的sel
  • 15.服务数据的定义与使用

    学习视频 https www bilibili com video BV1zt411G7Vn p 15 目标 服务数据的自定义 客户端发布显示个人信息的请求 服务端处理请求及反馈应答 一 自定义服务数据 1 定义srv文件 mkdir ca
  • Python 判断None的三种方法

    1 if x is None 2 if not x 3 if not x is None 在Python 中 None False 空字符串 空列表 空元组 其实都相当于False 如果x为空列表 y为None 如果你做x is None的
  • 社区版pycharm官网下载安装教程

    1 官网下载安装包 官网地址 https www jetbrains com pycharm 选择所需版本 2 安装 安装前确认已完成python软件安装 建议不要安装到C盘 路径不要出现中文 直接install 等待安装 3 配置 点击桌
  • PyQt中的多线程使用方法(以PySide6为例)

    在Qt中 开启多线程的方法有多种 总体分成QThread QObject QRunnable QtConcurrent三大类方法 而放到PyQt和PySide具体的使用中 使用方法可以说十分类似 一 继承QThread类及run方法 此方法
  • while it seems to fit format ‘yyyy-MM-dd‘T‘HH:mm:ss.SSSX‘

    一 报错信息如下 2023 04 11 18 52 47 534 WARN 21608 nio 9090 exec 1 w s m s DefaultHandlerExceptionResolver Resolved org springf
  • 浅析CV下的无人驾驶技术

    报告题目 浅析CV下的无人驾驶技术 1 概述 2006年 Geoffrey Hinton老爷子针对传统的神经网络算法训练速度慢 面对多层Hidden Layer严重出现过拟合的现状 提出了无监督预训练对权值进行初始化 有监督训练微调的解决方
  • 三国群英传霸业之王服务器维护,《三国群英传2网络版》掌上助手APP曝光,三国群英传霸业之王...

    列位从公能否还为本人错过逛戏勾当而感应懊末路 能否曾身正在外但始末心系三国 又能否苦于只能侃侃而谈却无法展现本人的 宏图霸业 为了让大师可以或许随时随地查看逛戏情况 领会逛戏资讯 我们将正在逛戏上线后推出掌上帮手 列位从公能否还为本人错过逛
  • 【C/C++】日常学习7

    1 输入 输出流操作 2 构造函数参数参数列表初始化 3 C 中类的前向声明以及和 include的区别 4 在函数后加const的意义 1 输入 输出流操作 读取字符串的不同操作 cin 遇到空格 回车符就停止读取 空格 回车符是分隔符
  • ❓“想要创业项目,但又不知道互联网上有哪些好的项目?”

    想创业 但不知道从哪里入手 5大互联网创业项目 一起来了解一下吧 在互联网时代 创业项目不再局限于传统的实体店铺 下面介绍的是互联网创业项目 希望可以给想要创业的你提供一些启示 1 电商平台 电商平台是最为常见的互联网创业项目 可以选择开设
  • 实现Vue高德地图多边形编辑器吸附功能

    前言 之前做的高德地图多边形编辑器吸附功能 最近出现不能编辑 在修改的过程中顺便记录一下 实现效果 安装 npm i amap amap jsapi loader save 核心代码