微信小程序腾讯位置服务

腾讯位置服务

网址 : https://lbs.qq.com

  • 逆地址解析可以实现位置

先读入门及使用限制

登录 - 手机号登录

  1. 申请开发者密钥(key):申请密钥
  2. 开通webserviceAPI服务:控制台 ->应用管理 -> 我的应用 ->添加key-> 勾选WebServiceAPI -> 保存
    (小程序SDK需要用到webserviceAPI的部分服务,所以使用该功能的KEY需要具备相应的权限)
  3. 下载微信小程序JavaScriptSDK,微信小程序JavaScriptSDK v1.1 JavaScriptSDK v1.2
    下载JavaScriptSDK1.2;
    SDK叫做应用程序开发工具包, JavaScriptSD是一个js脚本文件, 里面有很多js代码, 我们可以直接进行调用,然后直接操作腾讯位置服务
  4. 安全域名设置,在小程序管理后台 -> 开发 -> 开发管理 -> 开发设置 -> "服务器域名" 中设置request合法域名,添加https://apis.map.qq.com


  1. 小程序示例 - 简化官方文档

    javascript 复制代码
    var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
    var qqmapsdk = new QQMapWX({
        key: '申请的key'
    });
    //这个是搜索位置,我们需要的是当前位置的城市名称
    //使用逆地址解析 - 获取当前位置的逆地址解析
     qqmapsdk.search({
             keyword: '酒店',
             success: function (res) {
                 console.log(res);
             },
    // 逆地址解析用于通过经纬度,获取该位置的中文描述
    qqmapsdk.reverseGeocoder({
        success: function (res) {
            console.log(res);  // 获取逆地址解析的结果
        }
    })

实现首页左上角城市名称的显示

  1. 解压JavaScriptSDK v1.2.zip. 将qqmap-wx-jssdk.js放入项目根目录下的 /libs 文件夹下(如果没有则手动创建)。
  2. onLoad时,就需要加载左上角城市名称。
javascript 复制代码
//index.js
page({
	data:{
        cityname:'',  //用于绑定城市名称
    },
   loadCurrentCity(){
        let QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
        let qqmapsdk= new QQMapWX({
            key: '7NGBZ-6STYU-QP6VR-B6JKP-VT36F-2RBTB'
        })
        qqmapsdk.reverseGeocoder({
            success: (res)=> {//成功后的回调
                console.log("逆地址解析结果:",res);
                let cityname = res.result.address_component.city;
                console.log("逆解析地址:",cityname);
                //箭头函数,不影响this指向问题
                this.setData({cityname})
                //将数据保存到全局
                getApp().globalData.cityname=cityname
            },
            fail:(err)=>{
                console.warn(err);
            }
       })
    },
  onLoad(){
	this.loadCurrentCity();
  },
  onShow(){
        // 获取globalData中的城市名称,更新左上角即可
        let cityname = getApp().globalData.cityname
        console.log('首页onShow获取城市:'+cityname)
        this.setData({cityname})
    }
})
//设置完成之后, 将缓存全部清除,然后重新编译
//会出现报错 - 去app.json中配置位置信息
"permission": {
        "scope.userLocation": {
            "desc": "赶紧给我地址,不然的话小心手机爆炸"
        }
    },
javascript 复制代码
//app.js
App({
    onLaunch: function () {
        wx.cloud.init({
            env: 'cloud1-3gb10u4tf5483bd9'
        })
    },
    globalData:{
        cityname:"北京市"
    }
})
点击首页城市,跳转到选择城市页面 citylist
html 复制代码
// index.wxml
<!-- 自动定位城市开始 -->
    <view class="city-entry">
        <navigator url="/pages/citylist/citylist">
          <text class="city-name">{{cityname}}</text>
          <text class="city-entry-arrow"></text>
        </navigator>
    </view>
    <!-- 自动定位城市结束 -->

将map.js保存到libs下, 引入

javascript 复制代码
//citylist.js
loadCurrentCity(){
    let QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
    let qqmapsdk= new QQMapWX({
        key: '7NGBZ-6STYU-QP6VR-B6JKP-VT36F-2RBTB'
    })
    qqmapsdk.reverseGeocoder({
        success: (res)=> {//成功后的回调
            console.log("逆地址解析结果:",res);
            let cityname = res.result.address_component.city;
            console.log("逆解析地址:",cityname);
            //箭头函数,不影响this指向问题
            this.setData({cityname})
            getApp().globalData.cityname=cityname
        },
        fail:(err)=>{
            console.warn(err);
            if(err.status==1000){
                this.setData({
                    cityname: '定位失败,点击重试'
                  })
            }
        }
   })
},

渲染城市列表

javascript 复制代码
data: {
    map:map,
    cityname:'未选择',
    letter:'A'
},
html 复制代码
<view class="city-left">
      <scroll-view 
          scroll-y="true" 
          style="height:100vh"
          scroll-with-animation="true"
          enable-back-to-top="true"
 		 scroll-into-view="{{letter}}"
>
          <view class="city-group-item" wx:for="{{map}}" wx:key="index">
            <view class="city-group-title" id="{{index}}">{{index}}</view>
            <view class="city-fullname" wx:for="{{item}}" wx:key="id" wx:for-index="i" wx:for-item="c">
              <text bindtap="handleTapCity" data-c="{{c.fullName}}">{{c.fullName}}</text>
            </view>
        </view>   
      </scroll-view>
    </view>
    <view class="city-right">
      <view class="py-item" wx:for="{{map}}" wx:key="index">
        <text bindtap="handleTapLetter" data-l="{{index}}">{{index}}</text>
      </view>      
    </view>
javascript 复制代码
handleTapLetter(e){
        let l = e.target.dataset.l; //获取data-l属性的值
        console.log(l);
        this.setData({letter:l})
    },
    handleTapCity(e){
        let name = e.target.dataset.c;
        console.log(name);
        let app = getApp();
        app.globalData.cityname = name;
        wx.navigateBack();
    },
影院页面
javascript 复制代码
// theatre.js
data: {
    cityname:'',
    moviesList:[]
  },
onShow(){
      //获取globalData.cityname
      let cityname = getApp().globalData.cityname;
      console.log(cityname)
      this.setData({cityname})
      //加载当前城市的影院列表
      let QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
      let qqmapsdk= new QQMapWX({
          key: '7NGBZ-6STYU-QP6VR-B6JKP-VT36F-2RBTB'
      })
      qqmapsdk.search({
          keyword:'电影院',
          region:cityname,
          //page_size:20,  //每页20条,最多20条
          success:(res)=>{
              //默认10条
              console.log('加载影院列表:',res)
              //对res.data进行处理
              res.data.forEach(item=>{
                  item._dis = (item._distance/1000).toFixed(2)
              })
              this.setData({moviesList:res.data})
          }
      })
  },
html 复制代码
<view class="item mb-line-b" wx:for="{{moviesList}}" wx:key="index">
  <view class="title-block">
    <view class="title line-ellipsis">{{item.title}}</view>
    <view class="location-block">
        <view class="flex line-ellipsis">{{item.address}}</view>
        <view class="distance">{{item._dis}}km</view>
    </view>
    <view class="label-block">
      <text class="allowRefund">电话:</text>
      <text class="vipTag">{{item.tel?item.tel:'暂无'}}</text>
    </view>
  </view>
</view>
地图引入问题

自 2022 年 7 月 14 日后发布的小程序,使用以下8个地理位置相关接口时,需要声明该字段,否则将无法正常使用。2022 年 7 月 14 日前发布的小程序不受影响。

申明需要使用的地理位置相关接口,类型为数组。目前支持以下项目:
getFuzzyLocation: 获取模糊地理位置
getLocation: 获取精确地理位置
onLocationChange: 监听试试地理位置变化事件
startLocationUpdate: 接收位置消息(前台)
startLocationUpdateBackground: 接收位置消息(前后台)
chooseLocation: 打开地图选择位置
choosePoi: 打开 POI 列表选择位置
chooseAddress: 获取用户地址信息

json 复制代码
{
  "pages": ["pages/index/index"],
  "requiredPrivateInfos": [
    "getFuzzyLocation",   // 会出现冲突
    "getLocation",
    "onLocationChange",
    "startLocationUpdateBackground"
    "chooseAddress"
  ]
}
相关推荐
丁总学Java10 小时前
微信小程序,点击bindtap事件后,没有跳转到详情页,有可能是app.json中没有正确配置页面路径
微信小程序·小程序·json
说私域12 小时前
基于开源 AI 智能名片、S2B2C 商城小程序的用户获取成本优化分析
人工智能·小程序
mosen86812 小时前
Uniapp去除顶部导航栏-小程序、H5、APP适用
vue.js·微信小程序·小程序·uni-app·uniapp
qq229511650212 小时前
微信小程序的汽车维修预约管理系统
微信小程序·小程序·汽车
尚梦19 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
小飞哥liac1 天前
微信小程序的组件
微信小程序
stormjun1 天前
Java基于微信小程序的私家车位共享系统(附源码,文档)
java·微信小程序·共享停车位·私家车共享停车位小程序·停车位共享
paopaokaka_luck1 天前
基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)
java·spring boot·小程序·毕业设计·mybatis·1024程序员节
Bessie2341 天前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
shenweihong1 天前
javascript实现md5算法(支持微信小程序),可分多次计算
javascript·算法·微信小程序