uniapp微信小程序解决绘制polygon结束时的问题

目录

一、前言

二、实现思路

三、结束标绘具体代码

1、在地图展示工具栏处判断工具按钮是否展示v-if="item.isshow"

2、data声明的工具按钮中新增结束标绘按钮

3、在按钮的点击事件中新增结束标绘的判断

4、判断绘制的线段个数是否大于等于三条,当满足条件后展示结束标绘按钮

5、结束标绘的事件


一、前言

继上一篇uniapp微信小程序地图实现绘制polygon(保姆级教程 全网最全!!!)在微信开发者工具上操作是没有问题,但是我发现在用手机进行预览的时候,双击事件并没有生效,或者严格意义上来说我点击地图的两次单击事件的时间差并不满足判断要求的500ms。

结合实际情况考虑了下用户在手机端操作地图时,根据两次单击事件的间隔时间来判断是否结束绘制有点强人所难,所以我在这里更改了结束绘制的形式。

先给大家看下最终的效果:

二、实现思路

在这里我判断了下polyline的长度,因为一个面至少是由三个线段组成的,判断polyline的长度大于等于3,将结束标绘的按钮展示在地图左侧工具栏上,然后点击结束标绘,将之前结束绘制的代码移入到这个方法里边,具体方法可以参见:uniapp微信小程序地图实现绘制polygon(保姆级教程 全网最全!!!)

三、结束标绘具体代码

1、在地图展示工具栏处判断工具按钮是否展示v-if="item.isshow"

<!-- 展示地图信息  标绘位置情况 -->
<view class="myMap"><u-divider text="地图展示"></u-divider><map id="mymap" class="myMap_map" @tap="mapAction" :longitude="mapData.longitude" :latitude="mapData.latitude" :scale="mapData.scale" :polygons="mapData.polygons":markers="mapData.markers" :polyline="mapData.polyline"><cover-view class="myMap_map__cover-view"><cover-view class="myMap_map__cover-view_mapControls"><!-- 显示绘制的控件--><cover-view class="myMap_map__cover-view_mapControls_drawControl" :class="item.check ? 'myMap_map__cover-view_mapControls_checkdrawControl' : '' " @click="mapEdit(item)" v-for="(item,index) in mapControls" :key="index" v-if="item.isshow"><cover-image class="myMap_map__cover-view_mapControls_drawControl_drawicon" :src="item.icon"></cover-image><cover-view class="myMap_map__cover-view_mapControls_drawControl_drawText">{{ item.label }}</cover-view></cover-view></cover-view></cover-view></map>
</view>

2、data声明的工具按钮中新增结束标绘按钮

//地图控件
mapControls:[// 标绘位置{id:'drawPolygon',check:false,isshow:true,icon:'/static/mapview/drawIcon.png',method:'drawPolygons',label:'标绘位置'},// 结束标绘{id:'endDraw',check:false,isshow:false,icon:'/static/mapview/endDraw.png',method:'endDraws',label:'结束标绘'},// 清除{id:'cleanPolygon',check:false,isshow:true,icon:'/static/mapview/cleanPolygon.png',method:'cleanPolygons',label:'清除'}
],

3、在按钮的点击事件中新增结束标绘的判断

mapEdit(item){switch(item.id){// 绘制面case 'drawPolygon':item.check = !item.check;this.drawPolygons();break;//结束绘制case 'endDraw':item.check = !item.check;this.endDraws();break;//清除case 'cleanPolygon':this.cleanPolygons();break;default:break;}
},

4、判断绘制的线段个数是否大于等于三条,当满足条件后展示结束标绘按钮

//点击地图事件
mapAction(e){if(this.taptimestame.firsttime == null){//第一次定位,给firsttime赋值this.taptimestame.firsttime = e.timeStamp;}else if(this.taptimestame.lasttime == null){//第二次定位,给lasttime赋值this.taptimestame.lasttime = e.timeStamp;}else{this.taptimestame.firsttime = this.taptimestame.lasttime;this.taptimestame.lasttime = e.timeStamp;}//判断是否已经点击标绘位置,如果点击标绘位置后开始定位if(this.mapControls[0].check){this.mapData.markers.push({id:this.mapData.markers.length+1,longitude:e.detail.longitude,latitude:e.detail.latitude,iconPath:'/static/mapview/square.png',height:this.mapData.infoheight,width:this.mapData.infowidth})if(this.mapData.markers.length >=2){this.pointsData = [];for(let i=0;i<this.mapData.markers.length;i++){this.pointsData.push({latitude:this.mapData.markers[i].latitude,longitude:this.mapData.markers[i].longitude})}this.mapData.polyline.push({points:this.pointsData,color:'#00AF99',width:1,})if(this.mapData.polyline.length >=3){//当线段的数量为三个的时候,可以点击结束标绘 将结束标绘展示出来 this.mapControls[1].isshow = true;}}}
}

5、结束标绘的事件

//结束标绘
endDraws(){this.pointsData = [];//在双击事件中 生成polygonfor(let i=0;i<this.mapData.markers.length;i++){this.pointsData.push({latitude:this.mapData.markers[i].latitude,longitude:this.mapData.markers[i].longitude})}this.mapData.polygons.push({points:this.pointsData,strokeWidth:1,strokeColor:'#00AF99',fillColor:'#00AF9930'})//最后将点、线段的数据清空this.mapData.markers = [];this.mapData.polyline = [];this.mapControls[0].check = false;//隐藏结束标绘按钮this.mapControls[1].isshow = false;this.mapControls[1].check = false;
},

写到最后,如果大家觉得写的不错,一键三连白,点赞、收藏加关注。大家的点赞就是我不断分享的动力!!!

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

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

相关文章

Python小案例:打印10以内的素数

解析 1、利用循环控制范围&#xff08;1,100&#xff09; 2、通过循环判断素数 3、利用标记法进行打印素数 代码 #求1——100之间的素数 for i in range(2,101):is_primeNum Truefor j in range(2,i):if i%j 0:# print(f"{i}不是素数")is_primeNum Falseif is_…

LeedCode刷题---双指针问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 双指针简介 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是左右指针。 对撞指针:一般用于顺序结构中&…

手机充电器市场分析:预计2028年将达到82亿美元

在5G时代飞速发展的今天&#xff0c;随着科技的进步、应用的发展以及人们对以智能手机、平板电脑、智能穿戴设备为代表的智能终端设备追求越来越高的品质和功能&#xff0c;智能终端设备产品的更新换代的速度越来越快&#xff0c;这也将给全球智能终端充储电产品市场带来更大的…

Mybatis相关API(Sqlsession和sqlsessionFactroy)

代码 private static SqlSessionFactory sqlSessionFactory;static { ​try { // 获得核心配置文件String resource "mybits-config.xml"; // 加载核心配置文件InputStream inputStream Resources.getResourceAsStream(resource…

在OSPF中使用基本ACL过滤路由信息示例

1、ACL的基本原理。 ACL由一系列规则组成&#xff0c;通过将报文与ACL规则进行匹配&#xff0c;设备可以过滤出特定的报文。设备支持软件ACL和硬件ACL两种实现方式。 2、ACL的组成。 ACL名称&#xff1a;通过名称来标识ACL&#xff0c;就像用域名代替IP地址一样&#xff0c;更…

SQL数据库知识点总结归纳

前后顺序可以任意颠倒,不影响库中的数据关系 关系数据库的逻辑性强而物理性弱,因此关系数据库中的各条记录前后顺序可以任意颠倒,不影响库中的数据关系 一名员工可以使用多台计算机(1:m),而一台计算机只能被一名员工使用(1:1),所以员工和计算机两个实体之间是一对多…

【专题】【中值定理-还原大法】

1&#xff09;构造辅助函数 2&#xff09;罗尔定理&#xff1a; 闭区间连续&#xff0c;开区间可导 F&#xff08;a&#xff09;F&#xff08;b&#xff09; 3&#xff09;F‘&#xff08;ξ&#xff09;0&#xff0c;原命题得证 极限保号性&#xff1a;

FacetWP WordPress网站高级筛选过滤插件(含所有扩展)

点击阅读FacetWP WordPress网站高级筛选过滤插件原文 FacetWP WordPress网站高级筛选过滤插件向电子商务网站、资源库、搜索页面等添加分面搜索。FacetWP 的过滤元素&#xff08;称为 facets&#xff09;动态调整以适应用户输入。这有助于防止出现“未找到结果”&#xff0c;从…

hive数据库查看参数/hive查看当前环境配置

文章目录 一、hive查看当前环境配置命令 在一次hive数据库执行命令 set ngmr.exec.modecluster时&#xff0c;想看一下 ngmr.exec.mode参数原先的值是什么&#xff0c;所以写一下本篇博文&#xff0c;讲一下怎么查看hive中的参数。 一、hive查看当前环境配置命令 set &#…

『亚马逊云科技产品测评』活动征文|基于亚马逊EC2云服务器安装Prometheus数据可视化监控

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器&#xff08;Elastic Compute Cloud&#xff09;是亚马…

二、设置三台虚拟机的内存、MAC地址、IP地址

目录 1、配置内存 2、配置MAC地址 2.1 配置node2的MAC地址

【Spark 基础】-- 序列化和反序列化

一、前言 关于序列化和反序列化的定义,在这篇文章中有详细介绍,此处简要说明: 序列化:将对象写入到 IO 流中 反序列化:从 IO 流中恢复对象 我们也可以借助下图来理解序列化和反序列化的过程。 二、Spark 的序列化器 Spark 提供了 2 个序列化库 (Java serializati…

Notepad++ 安装TextFx插件失败

据说TextFx插件是Notepad常用插件之一&#xff1b;有很多格式化代码的功能&#xff1b;下面安装一下&#xff1b; 插件管理里面看一下&#xff0c;没有这个TextFx&#xff1b; 根据资料&#xff0c;先安装NppExec&#xff1b; 然后下一个5.9老版本的Notepad&#xff0c;如下图…

二叉树(判断是否为平衡二叉树)

题目&#xff08;力扣&#xff09;&#xff1a; 观察题目&#xff0c;发现最重要的条件就是&#xff0c;两颗子树的高度差的绝对值不超过1&#xff0c;我们就可以用递归将所有左子树和右子树都遍历一个&#xff0c;求出他们的高度差&#xff0c;若差值 > 1&#xff0c;则返回…

分布式搜索引擎elasticsearch(一)

5.1 初始elasticsearch elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 5.1.1正向索引 5.1.2elasticsearch采用倒排索引: 文档(document):每条数据就是一个…

Word 在页眉或页脚中设置背景颜色

目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 如何在word的页眉页脚中设置背景色&#xff1f; 二、解决方案 打开 Word 文档并进入页眉或页脚视图。在 Word 2016 及更高版本中&#xff0c;你可以通过在“插入”选项卡中单击“页眉”或“页脚”按钮来进入或者…

883重要知识点

&#xff08;1&#xff09;程序结构分三种&#xff1a;顺序结构&#xff0c;选择结构&#xff0c;循环结构。 &#xff08;2&#xff09;该程序都要从main&#xff08;&#xff09;开始&#xff0c;然后从最上面往下。 &#xff08;3&#xff09;计算机的数据在电脑中保存以二…

SASE:网络与安全的未来之路

随着数字化时代的到来&#xff0c;企业和个人对网络连接和安全性的需求日益增长。传统的网络架构已经无法满足这些需求&#xff0c;因此&#xff0c;新兴的网络和安全框架SASE&#xff08;Secure Access Service Edge&#xff09;应运而生。本文将介绍什么是SASE&#xff0c;并…

layui+ssm实现数据批量删除

layuissm实现数据的批量删除 //数据表格table.render({id: adminList,elem: #adminList,url: ctx "/admin/getAdminList", //数据接口cellMinWidth: 80,even: true,toolbar: #toolbarDemo,//头部工具栏limit: 10,//每页条数limits: [10, 20, 30, 40],defaultToolba…

1. 了解继承的概念,掌握派生类的定义。2. 掌握派生类构造方法的执行过程。3. 掌握方法的重载与覆盖。4. 掌握抽象类的概念及上转型对象的使用

1、定义一个抽象类Shape&#xff0c;类中封装属性name指定图形名称&#xff0c;定义用于求面积的抽象方法。定义3个子类&#xff1a;圆形类Circle、梯形类Trapezoid和三角形类Triangle&#xff0c;都继承Shape类&#xff0c;子类中各自新增属性&#xff0c;定义构造方法、设置属…