微信小程序腾讯位置服务

news/2024/7/20 0:55:32 标签: 微信小程序, 小程序

腾讯位置服务

网址 : 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. 小程序示例 - 简化官方文档

    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时,就需要加载左上角城市名称。
//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": "赶紧给我地址,不然的话小心手机爆炸"
        }
    },
//app.js
App({
    onLaunch: function () {
        wx.cloud.init({
            env: 'cloud1-3gb10u4tf5483bd9'
        })
    },
    globalData:{
        cityname:"北京市"
    }
})
点击首页城市,跳转到选择城市页面 citylist
// 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下, 引入

//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: '定位失败,点击重试'
                  })
            }
        }
   })
},

渲染城市列表

data: {
    map:map,
    cityname:'未选择',
    letter:'A'
},
<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>
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();
    },
影院页面
// 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})
          }
      })
  },

<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: 获取用户地址信息

{
  "pages": ["pages/index/index"],
  "requiredPrivateInfos": [
    "getFuzzyLocation",   // 会出现冲突
    "getLocation",
    "onLocationChange",
    "startLocationUpdateBackground"
    "chooseAddress"
  ]
}

http://www.niftyadmin.cn/n/5325475.html

相关文章

阿里巴巴中国站按图搜索1688商品(拍立淘) API(1688.item_search_img)在电商中的前景

一、引言 随着移动互联网的快速发展和普及&#xff0c;越来越多的消费者开始通过手机等移动设备进行购物。在这个背景下&#xff0c;电商企业需要不断创新和改进&#xff0c;以满足消费者的需求和提供更好的购物体验。其中&#xff0c;按图搜索商品的技术成为了电商领域的一个…

人脸识别为何老是不过?是什么原因导致的?

人脸识别可能无法通过的原因有很多&#xff0c;以下是可能的一些原因&#xff1a; 1. 非常规面部表情&#xff1a;如果你做出了与常规面部表情不同的表情&#xff0c;如张大嘴巴或瞪大眼睛等&#xff0c;可能会干扰人脸识别系统的准确性。 2. 光线条件&#xff1a;人脸识别系统…

操作系统复习篇

目录 一、引论 1.1、操作系统的目标 方便性&#xff1a; 有效性&#xff1a; 可扩充性&#xff1a; 开放性&#xff1a; 1.2、操作系统的作用 用户与计算机硬件系统之间的接口&#xff1a; 计算机系统资源的管理者&#xff1a; 实现对计算机资源的抽象&#xff1a; 1…

龙蜥操作系统上安装MySQL:步骤详解与常见问题解决

目录 博客前言 一.下载MySQL 1.官网下载 2.上传文件到龙蜥操作系统中 ​编辑二.安装MySQL 1.检查操作系统中的默认数据库并移除 2.创建文件夹解压 3.开始安装 4.启动服务 ​编辑 5.登录修改密码&#xff0c;进行授权 三.第三方工具连接&#xff08;naviact&#xff…

数组笔试题详解

文章目录 数组笔试题解析总结: 数组笔试题解析 我们可以通过做题来加深我们对数组及相关知识的理解,下面的笔试题解答正确的关键在于下面这点,一定要牢记: 数组名是首元素地址,两种情况除外: 1.sizeof(数组名) , 这是这是计算整个数组的大小,单位是字节; 2.&数组名 , 得出…

1116: 删除元素(数组)

题目描述 输入一个递增有序的整型数组A有n个元素&#xff0c;删除下标为i的元素&#xff0c;使其仍保持连续有序。注意&#xff0c;有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…

微信小程序 - 视图与逻辑 介绍

文章目录 视图与逻辑一、页面导航1、页面导航 - 声明式导航1.1 导航到tabBar页面1.2 导航到非tabBar页面1.3 后退导航 2、页面导航 - 编程式导航2.1 导航到tabBar页面2.2 导航到非tabBar页面2.3 后退导航 3、页面导航 - 导航传参3.1 声明式导航传参3.2 编程式导航传参3.3 在 on…

基于鸿蒙HarmonyOS 元服务开发一款公司运营应用(ArkTS API 9)

前言 最近基于Harmony OS最新版本开发了一个作品&#xff0c;本文来详细讲解一下&#xff0c;如何我是如何开发这个作品的。以及如何使用OpenHarmony&#xff0c;基于ArkTS&#xff0c;API 9来开发一个属于自己的元服务。 废话不多说&#xff0c;我的作品名称叫做Company Oper…