当前位置:   article > 正文

三分钟学会微信小程序地图定位

微信小程序地图

地理定位-wx.getLocation


掌握小程序中的定位api:getLocation和chooseLocation
分析:
用户进入这个页面时,就要获取当前位置。这个功能有现成的api。
getLocation
获取用户所在位置的经纬度。在小程序中调用这个接口时必须先在 app.json 中申请调用权限(开发环境可以省略)。

app.json

  1. {
  2. "requiredPrivateInfos": [
  3. "getLocation"
  4. ],
  5. "permission": {
  6. "scope.userLocation": {
  7. "desc": "你的位置信息将用于小程序位置接口的效果展示"
  8. }
  9. },
  10. }

  



这个弹层会出现一次,点击允许之后就不会在出现。

业务代码

  1. Page({
  2. onLoad() {
  3. this.getLocation()
  4. },
  5. async getLocation() {
  6. const res = await wx.getLocation() // 要提前申请权限
  7. console.log(res)
  8. },
  9. })



wx.getLocation返回的结果格式大致如下:

  1. accuracy: 65
  2. errMsg: "getLocation:ok"
  3. horizontalAccuracy: 65
  4. latitude: 30.88131
  5. longitude: 114.37509
  6. speed: -1
  7. verticalAccuracy: 65



腾讯位置服务—逆地址解析 QQMap.reverseGeocoder

 

思考

wx.getLocation 只能得到经纬度信息,如何根据经纬度获取到所在地的名称呢?


逆地址解析-reverseGeocoder
本接口提供由坐标 → 坐标所在位置的文字描述的转换,输入坐标返回地理位置信息和附近poi列表
文档地址:微信小程序JavaScript SDK | 腾讯位置服务
步骤
1导入 QQMapWX 并设置好 key


2 业务代码
在代码中补充getPoint方法:
1调用接口把经纬度转换成对应位置的文字
2保存文字到address

  1. //
  2. // 导入位置服务实例
  3. import QQMap from '../../../utils/qqmap'
  4. Page({
  5. onLoad() {
  6. // 获取用户经纬度
  7. this.getLocation()
  8. },
  9. // 获取用户的位置
  10. async getLocation() {
  11. // 调用小和序 API 获取用户位置
  12. const { latitude, longitude } = await wx.getLocation()
  13. this.getPoint(latitude, longitude)
  14. console.log('终点位置:', latitude, longitude)
  15. },
  16. getPoint(latitude, longitude) {
  17. // 逆地址解析(根据经纬度来获取地址)
  18. QQMap.reverseGeocoder({
  19. location: [latitude, longitude].join(','),
  20. success: ({ result: { address } }) => {
  21. // console.log(address)
  22. // 数据数据
  23. this.setData({ address })
  24. },
  25. })
  26. }
  27. })



3渲染页面
 

  1. <van-cell-group border="{{false}}" title="当前地点">
  2. <van-cell title="{{address}}" border="{{false}}">
  3. <text bind:tap="chooseLocation" class="enjoy-icon icon-locate">重新定位</text>
  4. </van-cell>
  5. </van-cell-group>



QQMap地点搜索—search


根据当前的定位,调用 QQMap.search() 找到周边的信息。
QQMap.search
搜索周边poi(Point of Interest),比如:“酒店” “餐饮” “娱乐” “学校” 等等 文档地址:微信小程序JavaScript SDK | 腾讯位置服务


调用了QQMap.search

  1. // house_pkg/pages/locate/index.ts
  2. // 导入位置服务实例
  3. import QQMap from '../../../utils/qqmap'
  4. Page({
  5. onLoad() {
  6. // 获取用户经纬度
  7. this.getLocation()
  8. },
  9. // 获取用户的位置
  10. async getLocation() {
  11. // 调用小和序 API 获取用户位置
  12. const { latitude, longitude } = await wx.getLocation()
  13. //
  14. this.getPoint(latitude, longitude)
  15. console.log('终点位置:', latitude, longitude)
  16. },
  17. getPoint(latitude, longitude) {
  18. // 省略其他....
  19. QQMap.search({
  20. keyword: '住宅小区', //搜索关键词
  21. location: [latitude, longitude].join(','), //设置周边搜索中心点
  22. page_size: 5,
  23. success: (result) => {
  24. console.log(result)
  25. // 过滤掉多余的数据
  26. const points = result.data.map(({ id, title, _distance }) => {
  27. return { id, title, _distance }
  28. })
  29. // console.log(points)
  30. // 渲染数据
  31. this.setData({ points })
  32. }
  33. })
  34. },
  35. })


视图渲染

  1. <van-cell-group border="{{false}}" title="附近社区">
  2. <van-cell
  3. wx:for="{{points}}"
  4. wx:key="id"
  5. title="{{item.title}}"
  6. link-type="navigateTo"
  7. url="/house_pkg/pages/building/index?point={{item.title}}"
  8. is-link
  9. />
  10. </van-cell-group>


重新定位-wx.chooseLocation
效果


api 会自动打开地图
申请权限
chooseLocation
获取用户指定位置的经纬度。在小程序中调用这个接口时必须要在 app.json 中申请调用权限
参考代码

  1. {
  2. "requiredPrivateInfos": [
  3. "chooseLocation"
  4. ]
  5. }

参考代码

  1. // 选择新的位置
  2. async chooseLocation() {
  3. // 调用小程序 API 获取新的位置
  4. const { latitude, longitude } = await wx.chooseLocation()
  5. // 获取新的位置附近的小区
  6. this.getPoint(latitude, longitude)
  7. console.log('起点位置:', latitude, longitude)
  8. },
  9. getPoint(latitude, longitude) {
  10. // 显示loading提示
  11. wx.showLoading({
  12. title: '正在加载...',
  13. })
  14. // 逆地址解析(根据经纬度来获取地址)
  15. QQMap.reverseGeocoder({
  16. location: [latitude, longitude].join(','),
  17. success: ({ result: { address } }) => {
  18. // console.log(address)
  19. // 数据数据
  20. this.setData({ address })
  21. },
  22. })
  23. QQMap.search({
  24. keyword: '住宅小区', //搜索关键词
  25. location: [latitude, longitude].join(','), //设置周边搜索中心点
  26. page_size: 5,
  27. success: (result) => {
  28. // console.log(result)
  29. // 过滤掉多余的数据
  30. const points = result.data.map(({ id, title, _distance }) => {
  31. return { id, title, _distance }
  32. })
  33. // console.log(points)
  34. // 渲染数据
  35. this.setData({ points })
  36. },
  37. fail: (err) => {
  38. console.log(err.message)
  39. },
  40. complete: () => {
  41. // 隐藏loading提示
  42. wx.hideLoading()
  43. },
  44. })
  45. },

模板

  1. <view class="locate">
  2. <van-cell-group border="{{false}}" title="当前地点">
  3. <van-cell title="{{address}}" border="{{false}}">
  4. <text bindtap="chooseLocation" class="enjoy-icon icon-locate">重新定位</text>
  5. </van-cell>
  6. </van-cell-group>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/967992
推荐阅读
相关标签
  

闽ICP备14008679号