uni-app 实现考勤打卡功能

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

复制代码
      <map id="map" style="width: 100%; height: 100%" :latitude="myLatitude" :longitude="myLongitude" :circles="circles" :markers="markers"> </map>
属性名 类型 说明
longitude Number 中心经度
latitude Number 中心纬度
markers Array 标记点
circles Array

1、显示地图中的圆形标识
通过配置表格中的circles就能实现地图上的圆形标识

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

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 标记点id Number marker点击事件回调会返回此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] = point1
  let [x2, y2] = point2
  let 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

相关推荐
LXA080919 小时前
UniApp 小程序中使用地图组件
小程序·uni-app·notepad++
QuantumLeap丶21 小时前
《uni-app跨平台开发完全指南》- 07 - 数据绑定与事件处理
vue.js·ios·uni-app
2501_915909061 天前
Flutter 应用怎么加固,多工具组合的工程化实战(Flutter 加固/Dart 混淆/IPA 成品加固/Ipa Guard + CI)
android·flutter·ios·ci/cd·小程序·uni-app·iphone
xiaaaa.z1 天前
macos HbuildX 使用cli脚本创建uniapp 运行时报错“cli项目运行依赖本地的Nodejs环境,请先安装并配置到系统环境变量后重试。”
macos·uni-app
2501_915909061 天前
深入理解HTTPS和HTTP的区别、工作原理及安全重要性
安全·http·ios·小程序·https·uni-app·iphone
Q_Q5110082852 天前
python+uniapp基于微信小程序的垃圾分类信息系统
spring boot·python·微信小程序·django·flask·uni-app·node.js
你的眼睛會笑2 天前
uniapp 鸿蒙元服务 真机调试流程指南
华为·uni-app·harmonyos
2501_915921432 天前
查看iOS App实时日志的正确方式,多工具协同打造高效调试与问题定位体系(2025最新指南)
android·ios·小程序·https·uni-app·iphone·webview
雯0609~2 天前
uni-app:实现快递的节点功能
uni-app
前端小菜鸟也有人起2 天前
uniapp集成爱山东获取用户信息
uni-app