微信小程序-根据经纬度判断范围(计算距离)的方法

背景

接着上篇, 我们已经获取到了用户当前的位置坐标, 也知道了打卡的范围, 那么我们就需要计算用户的坐标跟某个地点的坐标之间的距离, 来判断用户是否在打卡范围内.

方法封装

function getCoordinateScopeStatusData(
  referenceCoordinate,
  currentCoordinate,
  scopeNum,
  callback
) {
  var scopeNumber = scopeNum || 500;

  var checkInfo = {
    status: false,
  };

  var distanceValue = getDistanceByCoordinate(
    currentCoordinate,
    referenceCoordinate
  );

  checkInfo.status = true;
  checkInfo.scope_status = distanceValue < scopeNumber;
  checkInfo.cur_coordinte = currentCoordinate;

  callback && callback(checkInfo);

  return distanceValue
}

function getDistanceByCoordinate(location_1, location_2) {
  // longitude(经度) and latitude(纬度)
  var lon_1 = location_1.longitude;
  var lat_1 = location_1.latitude;
  var lat_2 = location_2.latitude;
  var lon_2 = location_2.longitude;
  var radEarth = 6378137;

  var radLat1 = (lat_1 * Math.PI) / 180.0;
  var radLat2 = (lat_2 * Math.PI) / 180.0;
  var radLon1 = (lon_1 * Math.PI) / 180.0;
  var radLon2 = (lon_2 * Math.PI) / 180.0;

  var difRadLat = radLat1 - radLat2;
  var difRedLon = radLon1 - radLon2;

  var distance =
    2 *
    Math.asin(
      Math.sqrt(
        Math.pow(Math.sin(difRadLat / 2), 2) +
        Math.cos(radLat1) *
        Math.cos(radLat2) *
        Math.pow(Math.sin(difRedLon / 2), 2)
      )
    );
  distance = distance * radEarth;
  distance = Math.round(distance * 10000) / 10000;
  return distance; // 返回(m)
}

module.exports = getCoordinateScopeStatusData

如何使用?

const checkDistance = require('../scripts/tool/checkDistance');

// ...
// 判断打卡范围
checkClockRange() {
  // 需要计算距离的目标坐标
  const referenceCoordinate = {
    latitude: xxxxxx,
    longitude: xxxxxx
  }
  // 用户的坐标
  const currentCoordinate = {
    latitude: xxxxxx,
    longitude: xxxxxx
  }
  // 两点之间的距离
  const currentRange = checkDistance(referenceCoordinate, currentCoordinate);

  return currentRange <= this.data.punchRange;  // this.data.punchRange为打卡的范围(单位: m)
}

🎉🎉
欢迎大家一起讨论学习😊~

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java HttpClient是一种用于发送HTTP请求和接收HTTP响应的开源Java库。它提供了一种简单而灵活的方法来与服务器进行通信,并支持HTTP协议的各种功能,如GET请求、POST请求、Cookie管理等。通过使用Java HttpClient,我们可以方便地与其他应用程序或服务器进行数据交互。 微信投票是指利用微信平台进行投票活动的一种方式。用户可以通过微信公众号或小程序参与投票,并在投票过程中选择自己心仪的选项。微信提供了丰富的开发接口和功能,使得开发者可以快速搭建投票系统,并与用户实时互动。通过合理地使用微信开放平台的相关接口,我们可以实现从投票的创建、选项的展示到结果的统计等一系列投票过程的控制和管理。 User-Agent(用户代理)是HTTP请求头的一部分,用于告知服务器发送请求的客户端类型。在使用Java HttpClient发送HTTP请求时,我们可以通过设置User-Agent头部来模拟不同的客户端类型,以实现自定义的请求行为。例如,我们可以设置User-Agent为移动设备模式,以便服务器返回适配于移动设备的响应。 经纬度是用于表示地球上位置的坐标系统。通过使用经纬度,我们可以确定地球上任何地点的具体位置。在实际应用中,经纬度常用于地图服务、定位服务等。在Java中,可以使用各种第三方库或者服务提供商的API来获取地点的经纬度信息。同时,我们可以通过将经纬度信息与其他数据结合使用,实现一些特定的功能,比如根据用户经纬度提供附近的商家信息等。 总之,Java HttpClient可以用于与服务器进行HTTP通信,微信投票可以在微信平台上进行投票活动,User-Agent可以在发送HTTP请求时模拟不同客户端类型,经纬度是用于确定地球上位置的坐标系统。这些概念在不同的场景和应用中具有重要意义,并且可以通过Java编程来实现相应的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值