腾讯位置服务简介

在微信小程序开发中,我们时常需要获取用户的地理位置信息,而使用 wx.chooseLocation()、wx.getLocation() 等 API 虽然能够很方便的让用户选择地理位置、获取用户当前的地理位置,但是这些 API 返回的数据中只包含经纬度及高度等数据,并没有包含省市区、省市区编码、街道、门牌等信息。

这时候我们可以使用 腾讯位置服务 将返回的经度、纬度信息进行逆地址解析,转换成详细地址。

通过腾讯位置服务专为微信小程序开发设计的 JavaScript SDK,开发者可以很方便地接入腾讯位置服务,

使用腾讯位置服务实现地址解析、逆地址解析、路线规划和距离计算等功能。

使用步骤

  1. 申请开发者密钥(key):申请密钥

  2. 开通 webserviceAPI 服务:控制台 => 应用管理 => 我的应用 => 添加 key => 勾选 WebServiceAPI => 保存

  3. 下载微信小程序 JavaScript SDK

  4. 安全域名设置

    • 小程序管理后台 => 开发 => 开发管理 => 开发设置 => “服务器域名” 中设置 request 合法域名
    • 添加域名 https://apis.map.qq.com

详细步骤

  1. 申请密钥:密钥申请,微信扫码进行登录,选择绑定已有账号、或者注册新账号 (需要绑定手机、验证邮箱)
  2. 控制台 => 应用管理 => 我的应用 => 创建应用 => 添加 key => 创建完成

  1. 下载微信小程序 JavaScriptSDK ,将 .js 文件放到小程序的 libs 目录下
  2. 进行安全域名设置,或者点击微信开发者工具中的暂时不校验域名

LBS 逆地址解析

使用步骤

  1. 在项目中引入 SDK 核心类
  2. onLoad 中实例化 API 核心类,同时配置创建的 key
  3. 使用实例方法 reverseGeocoder 方法进行逆地址解析,将提供的坐标转换为详细的地址位置信息

官方文档-基础示例:Hello World

官方文档-逆地址解析:reverseGeocoder

示例代码

  1. 引入 SDK 核心类

    // var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
    import QQMapWX from '../../../../../libs/qqmap-wx-jssdk.min'
    
  2. 实例化 API 核心类

    // 引入SDK核心类,js文件根据自己业务,位置可自行放置
    import QQMapWX from '../../../../../libs/qqmap-wx-jssdk.min'
    
    Page({
    
      onLoad: function () {
    
        // 实例化API核心类
        this.qqmapsdk = new QQMapWX({
          key: '申请的key'
        })
    
      }
    
      // coding...   
    }
    
  3. 使用 reverseGeocoder 方法进行逆地址解析,将提供的坐标转换为所在位置的文字描述的转换

    // LBS 地址逆解析
    // 地理定位
    async onLocation() {
      // 获取 纬度 、精度
      // const { latitude, longitude } = await wx.getLocation()
      // console.log(location)
    
      // 获取经、纬度、位置名称
      let { latitude, longitude, name } = await wx.chooseLocation()
    
      // 使用 reverseGeocoder 方法进行逆地址解析
      this.qqmapsdk.reverseGeocoder({
        // 传入经、纬度
        location: {
          latitude,
          longitude
        },
    
        // 逆地址解析成功后执行
        success: (res) => {
          // 获取选择的
          const { street_number } = res.result.address_component
    
          // province 省  city 市  district 区
          const {
            province, // 省
            city, // 市
            district, // 区
            adcode, // 行政区划代码
            city_code, // 城市代码,由国家码+行政区划代码(提出城市级别)组合而来,总共为9位
            nation_code // 国家代码
          } = res.result.ad_info
    
          this.setData({
            // 省级: 前两位有值,后4位置0,如,河北省: 130000
            provinceCode: adcode.replace(adcode.substring(2, 6), '0000'),
            provinceName: province,
    
            // 市前面多个国家代码,需要进行截取
            cityCode: city_code.slice(nation_code.length),
            cityName: city,
    
            // 东莞市、中山市、修州市、嘉关市 因其下无区县级,
            districtCode: district && adcode,
            districtName: district,
    
            // 详细地址
            address: name,
            fullAddress: [province, city, district, address].join('')
          })
        }
      })
    }