前言

本教程是基于 “apifm-wxapi” 模块,教你快速实现小程序开发,所以你可能需要先了解以下知识点:

《创建 HelloWorld 项目》
《使用 “apifm-wxapi” 快速开发小程序》

功能说明

  1. 知道坐标,可以查询该坐标的地址
  2. 给定两个坐标,可以计算两点之间的距离(公里 / km)

特别说明

本案例中,使用到了微信小程序的2个官方接口:

  1. wx.getLocation()
  2. wx.chooseLocation()

为了保护用户隐私,微信有规定,必须要告诉用户使用定位的业务用途,以便帮助用户决策是否要允许小程序读取 TA 的定位信息:

https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#permission

所以,根据微信小程序官方的说明,本案例在 app.json 文件中加入了使用场景说明:

  1. "permission": {
  2. "scope.userLocation": {
  3. "desc": "微信规定必须要说明定位用途"
  4. }
  5. }

wxml代码

  1. <button type="primary" bindtap="queryAddress"> 读取当前地址坐标并查询地址 </button>
  2. <button type="warn" bindtap="selAddress"> 选地址计算距离 </button>

js代码

  1. const WXAPI = require('apifm-wxapi')
  2. Page({
  3. data: {
  4. latitude: undefined,
  5. longitude: undefined
  6. },
  7. onLoad: function (options) {
  8. },
  9. onShow: function () {
  10. },
  11. queryAddress(){ // 读取当前定位坐标
  12. const _this = this
  13. wx.getLocation({
  14. type: 'wgs84',
  15. success(res) {
  16. console.log(res)
  17. _this.setData(res)
  18. _this.mapQQAddress(res)
  19. }
  20. })
  21. },
  22. mapQQAddress(e){ // 坐标查地址
  23. const location = e.latitude + ',' + e.longitude
  24. WXAPI.mapQQAddress(location, 1).then(res => {
  25. console.log('地址查看:', res)
  26. if (res.code == 0) {
  27. wx.showModal({
  28. title: '成功',
  29. content: res.data.result.address,
  30. showCancel: false
  31. })
  32. }
  33. })
  34. },
  35. selAddress(){ // 选择一个地址,读取坐标后计算距离
  36. const _this = this
  37. if (!this.data.latitude || !this.data.longitude) {
  38. wx.showToast({
  39. title: '请先读取当前地址',
  40. icon: 'none'
  41. })
  42. return
  43. }
  44. wx.chooseLocation({
  45. success: (e) => {
  46. console.log(e)
  47. WXAPI.mapDistance(_this.data.latitude, _this.data.longitude, e.latitude, e.longitude).then(res => {
  48. console.log(res)
  49. if (res.code == 0) {
  50. wx.showModal({
  51. title: '成功',
  52. content: '距离:' + res.data + '公里',
  53. showCancel: false
  54. })
  55. }
  56. })
  57. }
  58. })
  59. }
  60. })

总结

本案例主要使用了 apifm-wxapi 的以下方法:

  1. WXAPI.mapDistance(lat1, lng1, lat2, lng2)
  2. WXAPI.mapQQAddress(location, coord_type)

coord_type 参数: 1 GPS坐标 2 sogou经纬度 3 baidu经纬度 4 mapbar经纬度 5 [默认]腾讯、google、高德坐标 6 sogou墨卡托

关于 apifm-wxapi 更多的使用方法:

《apifm-wxapi使用说明》

本案例Demo代码下载:

《apifm-wxapi使用Demo程序》

期待你的进步!
感谢!