当前位置: 首页 > news >正文

uni-app 实现考勤打卡功能

一、在页面中引入地图组件

      <map id="map" style="width: 100%; height: 100%" :latitude="myLatitude" :longitude="myLongitude" :circles="circles" :markers="markers"> </map>
属性名类型说明
longitudeNumber中心经度
latitudeNumber中心纬度
markersArray标记点
circlesArray

1、显示地图中的圆形标识
在这里插入图片描述通过配置表格中的circles就能实现地图上的圆形标识

// 地图上圆形区域标识
const circles = ref([{latitude: '',longitude: '',color: '#69BFBE6A',fillColor: '#69BFBE6A',radius: 100,strokeWidth: 2,},
])
属性说明类型必填备注
latitude纬度Number浮点数,范围 -90 ~ 90
longitude经度Number浮点数,范围 -180 ~ 180
color描边的颜色String8位十六进制表示,后两位表示alpha值,如:#000000AA;#00000为十六进制
fillColor填充颜色String8位十六进制表示,后两位表示alpha值,如:#000000AA;#00000为十六进制
radius半径Number
strokeWidth描边的宽度Number
level压盖关系,默认为 abovelabelsStringfalse微信小程序

2、在地图中添加标记点,气泡提示框

在这里插入图片描述
配置markers展示标记点以及提示气泡

// 地图上气泡提示
const markers: any = ref([{id: 1,latitude: '',longitude: '',width: 10,height: 17,// iconPath: 'https://dianliu.oss-cn-hangzhou.aliyuncs.com/static/map/company.png',callout {content: '已进入打卡范围',color: '#FFFFFF',fontSize: 12,borderColor: '#69BFBE',bgColor: '#69BFBE',padding: 5,borderRadius: 3,display: 'ALWAYS',textAlign: 'center',}},
])
属性说明类型必填备注
latitude纬度Number浮点数,范围 -90 ~ 90
longitude经度Number浮点数,范围 -180 ~ 180
id标记点idNumbermarker点击事件回调会返回此id。建议为每个marker设置上Number类型id,保证更新marker时有更好的性能。最大限制9位数
title标注点名String点击时显示,callout存在时将被忽略
iconPath显示的图标String项目目录下的图片路径,支持相对路径写法,以’/'开头则表示相对小程序根目录;也支持临时路径
width标注图标宽度Number默认为图片实际宽度
height标注图标高度Number默认为图片实际高度
callout自定义标记点上方的气泡窗口Object支持的属性见下表,可识别换行符。

二、小程序获取定位信息

可以通过小程序提供的方法获取到当前的定位
官方链接:https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdateBackground.html

const getLocation = () => {uni.showLoading({title: '定位中...',mask: true,})return new Promise((resolve, reject) => {const _locationChangeFn = (res: any) => {console.log('location change', res)uni.hideLoading()wx.offLocationChange(_locationChangeFn)}wx.startLocationUpdate({success: (res: any) => {wx.onLocationChange(_locationChangeFn)resolve(res)},fail: (err: any) => {reject()},})})
}

这个方法也可以获取到定位信息,但是不能频繁的获取

 uni.getLocation({type: 'wgs84',altitude: true,success: function (res) {// res  获取到的定位信息},})

在手机上进行测试时可能会无法定位,这是我们就需要在manifest.json文件配置下图中红框中的内容

在这里插入图片描述

三、打卡签到

此时我们拿到了自己所在位置经纬度以及签到地经纬度可以通过计算得到两点之间的距离,再通过与我们地图圆形区域半径进行比较,便可以判断用户是否进入打卡区域。

计算方法:

// 计算距离
const getDistance = (point1: any[], point2: any[]) => {let [x1, y1] = point1let [x2, y2] = point2let Lat1 = rad(x1) // 纬度let Lat2 = rad(x2)let a = Lat1 - Lat2 //	两点纬度之差let b = rad(y1) - rad(y2) //	经度之差let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(b / 2), 2)))//	计算两点距离的公式s = s * 6378137.0 //	弧长等于弧度乘地球半径(半径为米)s = Math.round(s * 10000) / 10000 //	精确距离的数值console.log(s)distance.value = s
}

原文链接:https://blog.csdn.net/qq_57399113/article/details/127588698

http://www.lryc.cn/news/189884.html

相关文章:

  • Jenkins发布失败记录
  • 【算法|双指针系列No.6】leetcode LCR 179. 查找总价格为目标值的两个商品
  • python flask接口字段存在性校验函数(http接口字段校验)(返回提示缺少的字段信息)validate_fields()
  • Linux文件-内存映射mmap
  • linux 查看当前正在运行的端口和监听的端口的工具及命令
  • 保护互联网数据安全:关键方法与最佳实践
  • 分布式数据库HBase(林子雨慕课课程)
  • 矩阵求导的本质与分子布局、分母布局的本质
  • 【广州华锐互动】VR建筑施工事故体验:提高工人安全意识和责任感
  • HSRP热备份路由器协议的解析和配置
  • kotlin实现ArrayDeque
  • java时间格式化
  • ArduPilot开源飞控之AP_Baro_SITL
  • 基于Java的病人跟踪治疗管理系统设计与实现(源码+lw+部署文档+讲解等)
  • RCD吸收电路的工作原理及参数计算方法详解
  • leetcode做题笔记169. 多数元素
  • FATFS f_printf 如何支持写入浮点数据。
  • postman忘记密码提交没响应
  • 初学vue,想自己找个中长期小型项目练练手,应该做什么?
  • 【牛客面试必刷TOP101】Day11.BM63 跳台阶和 BM67 不同路径的数目(一)
  • [NOIP 2022] 建造军营 题解
  • 射频识别技术(RFID)在智能制造模具管理中的应用
  • 奖品定制经营商城小程序的作用是什么
  • 深度学习常用脚本总结
  • hive数据表创建
  • 查看本机Arp缓存,以及清除arp缓存
  • Unity MRTK Hololens2眼动交互
  • 接口自动化测试 —— 协议、请求流程
  • JDK安装详细教程
  • vulnhub_Fowsniff靶机渗透测试