前言

小程序实操,距离计算总结。

思路

一共有两种方法,各有利弊:

1.利用小程序的wx.getLocation 方法得到用户的经纬度,然后用已知的商家的经纬进行计算;

2.利用腾讯地图位置服务calculateDistance直接计算;

先熟悉下两个单词:

longitude:经度;

latitude:纬度;

下边是两种方法的具体实现

一、获取用户的位置信息,再进行计算(wx.getLocation)

1.小程序提供了获取用户位置信息的api,所以我们能直接获取到经纬度;

2.在腾讯位置服务坐标拾取器,获取商家的具体经纬度(例:北京故宫博物院116.397027(经度),39.917990(纬度));

3.利用公式进行两点的经纬度计算,需注意:小程序默认坐标系是wgs84,您需设置为gcj02再试;

代码:

Page({data:{},onLoad: function() {var _this = this;_this.findXy() //查询用户与商家的距离},findXy() { //获取用户的经纬度var _this = thiswx.getLocation({type: 'gcj02',success(res) {_this.getDistance(res.latitude, res.longitude, 39.917990,116.397027)}})},Rad: function(d) { //根据经纬度判断距离return d * Math.PI / 180.0;},getDistance: function(lat1, lng1, lat2, lng2) {// lat1用户的纬度// lng1用户的经度// lat2商家的纬度// lng2商家的经度var radLat1 = this.Rad(lat1);var radLat2 = this.Rad(lat2);var a = radLat1 - radLat2;var b = this.Rad(lng1) - this.Rad(lng2);var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));s = s * 6378.137;s = Math.round(s * 10000) / 10000;s = s.toFixed(2) + '公里' //保留两位小数console.log('经纬度计算的距离:' + s)return s})}

二、利用腾讯地图的位置服务

1、先到腾讯位置服务注册登录,申请key、引入依赖。
下图的第三步配置是要在小程序的后台那里设置,记得不要找错地方了。如图:

2、配置完成了之后,小程序重新编译一下

3、求两点距离文档:腾讯位置-两点求距

4、读完可知,我们只需要商家的经纬度即可,我们在小程序里实验一下

// 引入SDK核心类
var QQMapWX = require('../../utils/qqmap-wx-jssdk.js');Page({onLoad: function() {var _this = this;_this.findShop() //查询用户与商家的距离},findShop() { //拿到商家的地理位置,用到了腾讯地图的api// 实例化API核心类var _that = thisvar demo = new QQMapWX({key: '你申请到的key' // 必填});// 调用接口demo.calculateDistance({to: [{latitude: 39.917990, //商家的纬度longitude: 116.397027, //商家的经度}],success: function(res) {let hw = res.result.elements[0].distance //拿到距离(米)if (hw && hw !== -1) { //拿到正确的值//转换成公里hw = (hw / 2 / 500).toFixed(2) + '公里'} else {hw = "距离太近或请刷新重试"}console.log('腾讯地图计算距离商家' + hw);}});}
})

可能会出现的错误:
{status:199,message:‘此key未开启webservice功能’}

此时需要打开腾讯位置服务-key配置,设置一下刚才申请key的详情页面,把下列选项全部勾上,把你小程序的appid也写上,webservice域名白名单设置为空即可。

保存完,重新编译再试

作者:大师兄

链接:https://segmentfault.com/a/1190000017401316

来源:SegmentFault

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3分钟搞定微信小程序类美团用户商家距离计算相关推荐

  1. 微信小程序类美团用户商家距离计算

    前言 小程序实操,距离计算总结. 思路 一共有两种方法,各有利弊: 1.利用小程序的wx.getLocation 方法得到用户的经纬度,然后用已知的商家的经纬进行计算; 2.利用腾讯地图位置服务cal ...

  2. 一分钟搞定微信小程序定位(wx.getLocation)功能

    欢迎大家来到我的一分钟系列,跟大家安利一分钟系列主要让大家快速完成一个功能少踩不必要的坑,先完成功能再悟其中的原理. 这期主要为大家提供微信小程序的定位功能.换不多说,直接上干货. 首先微信官方提供的 ...

  3. 5分钟搞定微信小程序搜索功能

    一.废话不多说,先看效果: 附赠一个时间选择器: 看了效果图,当然要看看如何敲代码实现了~ 二.代码附上: 1.目录结构 2.全部代码: app.js //app.js App({globalData ...

  4. 终于搞定微信小程序canvas分享海报

    canvas drawer 做微信小程序中最好用的 canvas 绘图组件之一. 当前环境下,大家都非常需要分享到朋友圈这个功能,但是实现起来各有心酸(坑比较多),所以才有了如下的 canvas 绘图 ...

  5. 用Markdown,3分钟搞定微信公众号文章排版!

    用Markdown,3分钟搞定微信公众号文章排版! 还在使用第三方编辑器排版微信公众号文章?OUT了!只要你掌握本文推荐的3大操作流程,就可以熟练.高效的做好微信公众号文章排版,3分钟搞定!并且可以一 ...

  6. 机智云无需代码就能搞定IoT小程序开发和管理

    基于机智云Aiot开发平台的新版开发者中心,无需代码就能搞定IoT小程序开发和管理.在信息技术不断更新升级的今天,与其紧密结合的物联网技术已经深入千家万户,给予人们更好的生活体验,也在不断的优化甚至是 ...

  7. 一篇搞懂微信小程序以及和其他对比

    一篇搞懂微信小程序以及和其他对比** 前两年的文章了,现在小程序肯定是有变化的,作为自己的随记 一.产品定位及功能分析** 微信小程序是一种全新的连接用户与服务的方式,他可以在微信内被便捷的获取和传播 ...

  8. 5.DIY可视化-拖拽设计1天搞定主流小程序-公告管理

    1.DIY可视化-拖拽设计1天搞定主流小程序-公告管理 公告管理-本教程均在第一节中项目启动下操作 1.DIY可视化-拖拽设计1天搞定主流小程序-公告管理 2.创建数据表 执行: php think ...

  9. 微信小程序+SpringBoot实现用户登录

    微信小程序+SpringBoot实现用户登录 前言 微信小程序越来越吃香了(前话就这么多,嘿嘿) 前端 那就开始吧,登录界面就如此了 wxml内容如下,这是格式化后粘贴过来的,emmm,怪像那回事. ...

最新文章

  1. Django REST framework的各种技巧——1.基础讲解
  2. 领域设计基本理论知识总结(转)
  3. Python中包(package)的调用方式
  4. 性能测试培训: 监控CPU之python
  5. DriverMessageBean配置详解
  6. 【免费毕设】课程指导平台的开发(源代码+lunwen)
  7. 企业数字化转型必备利器之微服务扩展
  8. 《梦断代码》阅读笔记03
  9. 推荐 OS X 下最方便实用的六款解压缩软件
  10. Abaqus取消汉化(汉译英,英译汉)
  11. 太完整了!塞班java软件下载
  12. android 按钮救星,按键救星下载-按键救星专业版(Button Savior Pro) 安卓版v2.1.1-PC6安卓网...
  13. c语言二进制转十六进制代码,C语言--二进制转十六进制
  14. 细数处女座的101个特质
  15. 数据分析 线性回归分析 方差分析表
  16. 干货丨应聘Java开发工程师的基本要求是什么?
  17. 管理感悟:一种招聘考试的想法
  18. 年轻人逃离一线城市:外地人生存环境愈发严峻
  19. 【Linux学习笔记】38:有关Linux进程家族树
  20. HLS:矩阵乘法单元设计与SDK测试

热门文章

  1. 麒麟810处理器_配置7nm处理器麒麟810,重磅新机荣耀9X开箱图赏
  2. JavaScript 进阶第一章(分支结构)
  3. js弹出消息对话框(alert)的几种方式
  4. win 10 库 在哪
  5. CF896C Willem, Chtholly and Seniorious【珂朵莉树】
  6. oracle 优化逻辑读过高(实战详解:逻辑读与arraysize关系)
  7. reticulate:在R中使用Python
  8. 考生必看:攻克托福听力三点详解
  9. InheritableThreadLocal——父线程传递本地变量到子线程的解决方式及分析
  10. ZJOI 2017 DAY2 NGU