腾讯地图绘画多边形和计算面积

在这里插入图片描述


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>地图</title>
  </head>

  <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.4/vue.min.js"></script>
  <script
    type="text/javascript"
    src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"
  ></script>
  <script
    charset="utf-8"
    type="text/javascript"
    src="https://map.qq.com/api/gljs?libraries=tools,geometry&v=1.exp&key=OXQ-JNFCT"
  ></script>

  <style type="text/css">
    html,
    body {
      height: 100vh;
      margin: 0px;
      padding: 0px;
    }
    #my_app {
      height: 100%;
    }

    #container {
      width: 100%;
      height: 80%;
    }

    #toolControl {
      position: absolute;
      top: 10px;
      left: 0px;
      right: 0px;
      margin: auto;
      width: 252px;
      z-index: 1001;
    }

    .toolItem {
      width: 30px;
      height: 30px;
      float: left;
      margin: 1px;
      padding: 4px;
      border-radius: 3px;
      background-size: 30px 30px;
      background-position: 4px 4px;
      background-repeat: no-repeat;
      box-shadow: 0 1px 2px 0 #e4e7ef;
      background-color: #ffffff;
      border: 1px solid #ffffff;
    }

    .toolItem:hover {
      border-color: #789cff;
    }

    .active {
      border-color: #d5dff2;
      background-color: #d5dff2;
    }

    #marker {
      background-image: url('https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/marker_editor.png');
    }

    #polyline {
      background-image: url('https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/polyline.png');
    }

    #polygon {
      background-image: url('https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/polygon.png');
    }

    #circle {
      background-image: url('https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/circle.png');
    }

    #rectangle {
      background-image: url('https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/rectangle.png');
    }

    #ellipse {
      background-image: url('https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/ellipse.png');
    }

    .next {
      margin: 50px auto 0 auto;
      width: 300px;
      height: 60px;
      background: red;
      color: #fff;
      font-size: 40px;
      text-align: center;
    }
  </style>

  <body>
    <div id="my_app" v-cloak>
      <div id="container"></div>

      <div class="next" @click="nextHandler">下一步</div>

      <div id="toolControl">
        <div
          v-for="(item)  in list"
          :key="item.id"
          class="toolItem"
          :class="{'active': activeId === item.id}"
          :id="item.id"
          :title="item.title"
          @click="selectItem(item.id)"
        ></div>
      </div>
    </div>
  </body>
  <script>
    var one = new Vue({
      el: '#my_app',
      data: {
        activeId: 'polygon', // 初始化默认值
        editor: '',
        list: [
          {
            id: 'marker',
            title: '点标记',
          },
          {
            id: 'polyline',
            title: '折线',
          },
          {
            id: 'polygon',
            title: '多边形',
          },
          {
            id: 'circle',
            title: '圆形',
          },
          {
            id: 'rectangle',
            title: '矩形',
          },
          {
            id: 'ellipse',
            title: '椭圆',
          },
        ],
        map: null,
        locationList: [],
      },
      mounted() {
        this.$nextTick(() => {
          this.initMap();
        });
      },
      methods: {
        selectItem(id) {
          this.activeId = id;
          this.editor.setActiveOverlay(id);
        },

        initMap() {
          // 初始化地图
          this.map = new TMap.Map('container', {
            zoom: 17, // 设置地图缩放级别
            center: new TMap.LatLng(39.984104, 116.307503), // 设置地图中心点坐标
          });

          // 初始化几何图形
          var marker = new TMap.MultiMarker({
            map: this.map,
          });
          var polyline = new TMap.MultiPolyline({
            map: this.map,
          });
          var polygon = new TMap.MultiPolygon({
            map: this.map,
          });
          var circle = new TMap.MultiCircle({
            map: this.map,
          });
          var rectangle = new TMap.MultiRectangle({
            map: this.map,
          });
          var ellipse = new TMap.MultiEllipse({
            map: this.map,
          });

          this.editor = new TMap.tools.GeometryEditor({
            // TMap.tools.GeometryEditor 文档地址:https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocEditor
            map: this.map, // 编辑器绑定的地图对象
            overlayList: [
              // 可编辑图层 文档地址:https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocEditor#4
              {
                overlay: marker,
                id: 'marker',
              },
              {
                overlay: polyline,
                id: 'polyline',
              },
              {
                overlay: polygon,
                id: 'polygon',
              },
              {
                overlay: circle,
                id: 'circle',
              },
              {
                overlay: rectangle,
                id: 'rectangle',
              },
              {
                overlay: ellipse,
                id: 'ellipse',
              },
            ],
            actionMode: TMap.tools.constants.EDITOR_ACTION.DRAW, // 编辑器的工作模式
            activeOverlayId: this.activeId, // 激活图层
            snappable: true, // 开启吸附
          });
          // 监听绘制结束事件,获取绘制几何图形
          this.editor.on('draw_complete', (geometry) => {
            console.log('所有顶点坐标集合', geometry); // 每种图形返回值不一样,需要特殊处理
            this.locationList.push({ ...geometry, type: this.activeId });
            // 多边形处理
            if (this.activeId === 'polygon') {
              this.computeArea(geometry.paths, this.locationList.length - 1);
            }
            //... 其他类型的形状 面积 自行处理
          });
        },

        // 计算路径围成的多边形的面积
        computeArea(path, index) {
          const area = TMap.geometry.computeArea(path);
          this.locationList[index].area = area;
        },

        nextHandler() {
          wx.miniProgram.getEnv(function (res) {
            console.log(res.miniprogram); // true
            if (res.miniprogram) {
              wx.miniProgram.navigateTo({
                url: `/pages/test/test?lcation=${JSON.stringify(
                  this.locationList
                )}`,
              });
            }
          });
        },
      },
    });
  </script>
</html>


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

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

相关文章

将加速度计当作麦克风来听振动

我们都知道&#xff0c;用麦克风来捕捉声音时&#xff0c;最大的挑战是&#xff1a;背景噪音。这背景噪音有&#xff0c;车辆行驶中的风噪、车辆所处周围的环境的声音&#xff08;人声、车间其它声音&#xff09;、车辆其它部件正常工作的声音。 我们测用加速度计测振动时&…

Flink系列之:监控反压

Flink系列之&#xff1a;监控反压 一、反压二、Task 性能指标三、示例四、反压状态 Flink Web 界面提供了一个选项卡来监控正在运行 jobs 的反压行为。 一、反压 如果你看到一个 task 发生 反压警告&#xff08;例如&#xff1a; High&#xff09;&#xff0c;意味着它生产数…

CTF竞赛密码学题目解析

CTF&#xff08;Capture The Flag&#xff09;竞赛是一个有趣的挑战。密码学是CTF竞赛中的核心元素之一&#xff0c;通常涉及解密、破译密码、理解加密算法等技能。以下是30个题目及答案&#xff0c;新入行的可以看看鸭。 题目及答案 1. Caesar Cipher 描述&#xff1a;给出一…

【JavaEE】多线程(5) -- 阻塞队列

目录 1.阻塞队列是什么? 2.生产者消费者模型 3.标准库中的阻塞队列 4.阻塞队列的实现 1.阻塞队列是什么? 阻塞队列是⼀种特殊的队列. 也遵守 "先进先出" 的原则 阻塞队列能是⼀种线程安全的数据结构, 并且具有以下特性: 当队列满的时候, 继续⼊队列就会阻塞, …

论文阅读二——基于全脸外观的凝视估计

论文阅读二——基于全脸外观的凝视估计 基础知识主要内容文章中需要学习的架构AlexNet 代码复现 该论文是2017年在CVPR中发表的一篇关于 “gaze estimation” 的文章&#xff0c;其论文地址与代码地址如下&#xff1a; 论文地址 代码地址 论文特点&#xff1a;文章提出了一种…

IT和业务部门都想要的数据摆渡产品是这样的!

企业只要进行了网络隔离&#xff0c;就必然会需要数据摆渡相关产品&#xff0c;不管是免费的也好&#xff0c;专业收费的也好&#xff0c;总之都是需要将数据流转起来进行使用。 传统的数据摆渡产品也不少&#xff0c;比如FTP&#xff0c;甚至是U盘拷贝&#xff0c;在功能上来说…

Java数组(2)

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

Docker容器如何优雅地访问宿主机网络

# 前言 某些时候&#xff0c;我们会有在容器内容访问宿主机某个服务的需求&#xff0c;比如现在 openai 无法直接访问&#xff0c;需要给项目添加代理&#xff0c;我的 chatgpt-dingtalk (opens new window) 项目支持了通过环境变量指定代理地址。 添加方式如下&#xff1a; …

微信小程序(五)地图

一、引言 作者开发《目的地到了》需要满足用户选取地址作为目的地的需求&#xff0c;所以需要使用到地图。作者用的是腾讯地图&#xff0c;这里介绍下技术实现。 二、引包 引入腾讯地图的组件包微信小程序JavaScript SDK | 腾讯位置服务&#xff0c;根据经纬度调用里面的api才…

5款不可或缺的办公软件,好用且使用频率超高,几乎每个人都需要

在当今数字化时代&#xff0c;办公软件成为了现代职场必备的工具。这些软件可以大大提高我们的办公效率&#xff0c;简化工作流程&#xff0c;使我们更加高效地完成任务。今天给大家分享5款不可或缺的办公软件&#xff0c;它们不仅好用&#xff0c;而且使用频率极高&#xff0c…

【PWN】学习笔记(三)【返回导向编程】(中)

目录 课程回顾动态链接过程 课程 课程链接&#xff1a;https://www.bilibili.com/video/BV1854y1y7Ro/?vd_source7b06bd7a9dd90c45c5c9c44d12e7b4e6 课程附件&#xff1a; https://pan.baidu.com/s/1vRCd4bMkqnqqY1nT2uhSYw 提取码: 5rx6 回顾 管道符 | 把前一个指令的输出作…

【C++高阶(七)】C++异常处理的方式

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 异常处理的方式 1. 前言2. C语言处理异常的方式…

JVM-1-运行时数据区

程序计数器&#xff08;Program Counter Register&#xff09; 是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[1]&#xff0c;字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令&…

centos安装了curl却报 -bash: curl: command not found

前因 我服务器上想用curl下载docker-compress&#xff0c;发现没有curl命令&#xff0c;就去下载安装&#xff0c;安装完成之后&#xff0c;报-bash: curl: command not found 解决方法 [rootcentos ~]# rpm -e --nodeps curl warning: file /usr/bin/curl: remove failed: …

AIGC实战——条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)

AIGC实战——条件生成对抗网络 0. 前言1. CGAN架构2. 模型训练3. CGAN 分析小结系列链接 0. 前言 我们已经学习了如何构建生成对抗网络 (Generative Adversarial Net, GAN) 以从给定的训练集中生成逼真图像。但是&#xff0c;我们无法控制想要生成的图像类型&#xff0c;例如控…

Nat Med | Tau靶向反义寡核苷酸

今天给同学们分享一篇实验文章“Tau-targeting antisense oligonucleotide MAPTRx in mild Alzheimers disease: a phase 1b, randomized, placebo-controlled trial”&#xff0c;这篇文章发表在Nat Med期刊上&#xff0c;影响因子为82.9。 结果解读&#xff1a; 患者 从201…

防止反编译,保护你的SpringBoot项目

ClassFinal-maven-plugin插件是一个用于加密Java字节码的工具&#xff0c;它能够保护你的Spring Boot项目中的源代码和配置文件不被非法获取或篡改。下面是如何使用这个插件来加密test.jar包的详细步骤&#xff1a; 安装并设置Maven&#xff1a; 首先确保你已经在你的开发环境中…

关于#c语言#的问题:分析递归调用的过程◇画出调用过程各语句执行过程

关于#c语言#的问题&#xff1a;分析递归调用的过程◇画出调用过程各语句执行过程 当涉及到递归调用的过程时&#xff0c;可以通过绘制函数调用栈来分析和理解递归的执行过程。下面是一个示例的C语言递归函数和相应的调用过程&#xff1a; #include <stdio.h>void recurs…

数据结构 AVL树概念以及实现插入的功能(含Java代码实现)

为啥要有avl树 avl树是在二叉搜索树下的一种进阶形式,是为了防止二叉搜索树在极端情况下产生的链表化的场景,从而在二叉搜索树的基础上,加上了某些条件来阻止这种极端情况的产生,但不是保证完全平衡,而是放开了一定的条件,使得这种情况不那么难以满足.(条件:左右子树的高度差的…

【【UART 传输数据实验】】

UART 传输数据实验 通信方式在日常的应用中一般分为串行通信&#xff08;serial communication&#xff09;和并行通信&#xff08;parallel communication&#xff09;。 我们再来了解下串行通信的特点。串行通信是指数据在一条数据线上&#xff0c;一比特接一比特地按顺序传…