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

news2025/1/11 9:47:49

目录

一、前言

二、实现思路

三、结束标绘具体代码

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 = [];
    //在双击事件中 生成polygon
    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.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.coloradmin.cn/o/1282195.html

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

相关文章

文件夹备份如何执行更好?三种常见方法

如何有效地进行将公司文件夹备份呢&#xff1f;对于绝大多数上班族而言&#xff0c;电脑已成为工作和生活中不可或缺的工具。在电脑中存储着诸多至关重要的文件和数据&#xff0c;包括公司的机密文件、个人的重要工作文档&#xff0c;甚至可能是珍贵的生活照片和视频等。这些文…

排序算法介绍(二)冒泡排序

0. 简介 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排…

产品经理面试问题(四)

今天和大家免费分享产品经理常见的面试题目&#xff0c;含回答思路分析和回答事例。 【资源下载】 这个模板可以在 Axure高保真原型哦 小程序里免费下载 打开小程序后&#xff0c;在文档模板模块&#xff0c;搜索产品经理面试题目&#xff0c;获取下载地址 更多原型模板、视…

〖大前端 - 基础入门三大核心之JS篇㊸〗- DOM事件对象的方法

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

Python实战之手写一个搜索引擎

文章目录 一、前言二、工作流程三、数据模块四、索引模块五、搜索模块关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职…

淘宝API接口申请指南

一、申请条件数据接口 已注册淘宝账号并完成实名认证&#xff1b;拥有良好的淘宝信用记录&#xff1b;符合淘宝API接口的相关规定。 二、申请流程 登录淘宝账号&#xff0c;进入“卖家中心”页面&#xff1b;点击“我要开店”-“申请应用”&#xff0c;选择“淘宝API”&…

外卖平台推荐算法的优化与实践

目录 引言 一、推荐算法的原理 二、推荐算法的挑战 三、实际案例分析 四、优化推荐算法的策略 五、结论 引言 在当今数字化社会&#xff0c;外卖平台成为了人们生活中不可或缺的一部分。为了提供更加个性化、高效的服务&#xff0c;外卖平台使用推荐算法成为了一项关键技…

分享78个节日PPT,总有一款适合您

分享78个节日PPT&#xff0c;总有一款适合您 78个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1FKJZsOEsWIQHOPxZ3ddcUw?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

高效且实用的表单配置方式:低代码表单上传文件后即刻回显

在现代业务处理流程中&#xff0c;表单上传文件功能的实现已经变得日益重要。而对于用户在上传文件后能够即时看到文件名称的需求&#xff0c;更是对于表单设计的一个基本期望。为了满足这一期望&#xff0c;JVS低代码表单提供了一种高效且实用的配置方式&#xff0c;使得文件名…

光环云与亚马逊云科技成功举办“合作伙伴成长峰会:赋能与共赢”活动

光环云作为由光环新网和西云数据所提供的亚马逊云科技中国区域推广计划的授权增值推广商&#xff0c;致力于帮助中国企业更加方便、高效、安全地享受亚马逊云科技云服务&#xff0c;加速数字化转型。 2023年11月29日&#xff0c;光环云携手亚马逊云科技和商礼科技成功举办“合…

数据库管理-第122期 配置Halo数据库(202301204)

数据库管理-第122期 配置Halo数据库&#xff08;202301204&#xff09; 在120期完成了HaloDB的安装&#xff0c;那么紧接着就需要对数据库进行具体配置。 1 数据库配置 这里首先说一下我这里数据库的给的硬件配置&#xff1a;2个CPU&#xff0c;16GB内存 1 配置数据库访问控…

LabVIEW远程监控

LabVIEW远程监控 远程监控的应用场景 从办公室远程监控工厂车间的测试设备。 在世界另一端的偏远地区监控客户现场的发电设备。 从公司远程监控外场的产品。 技术更新与方法 自2018年以来&#xff0c;NI对基于Web的应用程序支持大幅增长。一些最初的方法&#xff08;如Lab…

用CHAT如何写教研室工作总结?

问CHAT&#xff1a;写一份教研室工作总结 CHAT回复&#xff1a;以下是一个教研室工作总结的大纳&#xff0c;具体内容需要根据你们教研室的实际情况进行填充和修改。 教研室XXXX年度工作总结 1. 引言&#xff1a;简要介绍本年度工作总结的目的和主题。 2. 教育教学工作&…

MDK ARM环境下的伪指令的测试

目录 测试目标&#xff1a; 测试代码&#xff1a; 1. start.s 2. align.s 测试结果&#xff1a; 1 .ldr伪指令的测试结果: 2 .align伪操作测试结果: 结果分析&#xff1a; 测试目标&#xff1a; 熟悉ARM处理器的伪指令&#xff0c;本次实验主要来练习ldr伪指令和align…

自动化之旅成功的“秘诀”

原创 | 文 BFT机器人 引言 近年来&#xff0c;随着机器人技术的蓬勃发展&#xff0c;各行各业都向自动化方向进军&#xff0c;自动化已逐渐成为行业发展的必需品&#xff0c;贯穿各行业的各个环节&#xff0c;为各行业的发展提供助力。 然而&#xff0c;自动化是一把双刃剑。在…

【C++11(一)】右值引用以及列表初始化

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C11 1. 前言2. 统一的列表初始化3. initializer…

C++ Easyx 让圆球跟随鼠标移动

目录 下载Easyx 检验 绘制窗口 画圆 响应事件的处理 清除原先绘图 渲染缓冲区 逻辑 代码托管 下载Easyx 在Easyx官网下载大暑版: 检验 写如下代码: 编译运行&#xff0c;如果控制台出现2023字样&#xff0c;代表配置成功: 绘制窗口 进入Eaxy官方网站&#xff0c;点…

【Java 基础】18 I/O流

文章目录 1.基本概念2.字节流3.字符流4.标准输入输出5.最佳实践 I/O流&#xff08;Input/Output 流&#xff09;是计算机程序中不可或缺的一部分&#xff0c; 往大了说所有的操作都是IO。Java 提供了强大而灵活的 I/O 框架&#xff0c;支持各种数据的 读取和 写入操作。 1.基…

Pandas操作数据库

一&#xff1a;Pandas读取数据库数据 二&#xff1a;Pandas读取海量数据 三&#xff1a;Pandas向数据库存数据 四&#xff1a;Pandas写入海量数据

docker 可视化工具操作说明 portainer

官网地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下载并安装容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…