微信小程序通过startLocationUpdate,onLocationChange获取当前地理位置信息,配合腾讯地图解析获取到地址

先创建个getLocation.js文件

复制代码
//获取用户当前所在的位置
const getLocation = () => {
    return new Promise((resolve, reject) => {
        let _locationChangeFn = (res) => {
            resolve(res) // 回传地里位置信息
            wx.offLocationChange(_locationChangeFn) // 关闭实时定位
            wx.stopLocationUpdate(_locationChangeFn); // 关闭监听 不关闭监听的话,有时获取位置时会非常慢
        }
        wx.startLocationUpdate({
            success: (res) => {
                wx.onLocationChange(_locationChangeFn)
            },
            fail: (err) => {
                // 重新获取位置权限
                wx.openSetting({
                    success(res) {
                        res.authSetting = {
                            "scope.userLocation": true
                        }
                    }
                })
                reject(err)
            }
        })
    })
}

module.exports = {
    getLocation
}

在App.vue文件里引入封装的getLocation.js文件

复制代码
<script>
import getLocation from "./pages/common/getLocation.js";
import { addUserTrail } from "@/api/promote.js";
var QQMapWX = require("./common/qqmap-wx-jssdk.js");//引入腾讯地图逆解析地址
var qqmapsdk;
export default {
  data() {
    return {
        latitude:'',
        longitude:''
    };
  },
  onLaunch: function () {
    setInterval(function () {//定时任务判断登录的角色在调用getLocation.js
      if (uni.getStorageSync("ROLE_NAME") !== null &&
        uni.getStorageSync("ROLE_NAME") !== "" &&
        uni.getStorageSync("ROLE_NAME") === "BD") {
        getLocation.getLocation().then((res) => {
          console.log('当前所在位置的经纬度为:')
          console.log(res.latitude,res.longitude)
          const addUserTrailBody = {
            latitude: null,
            longitude: null,
            address: "",
          };
          addUserTrailBody.latitude = res.latitude;
          addUserTrailBody.longitude = res.longitude;
          addUserTrail(addUserTrailBody);
        });
      }
    }, 90000);
  },

  methods: {
    getMapAddress() {
      const that = this;
      const tMap = new QQMapWX({
        key: "xxx", //腾讯地图开发者密钥key
      });
      uni.getLocation({
        type: "wgs84",
        isHighAccuracy: true,
        success: (res) => {
          console.log(res);
        },
        fail: () => {
          console.log("获取经纬度失败");
        },
          complete: () => {
          tMap.reverseGeocoder({//逆解析
            location: {
              latitude: that.latitude,
              longitude: that.longitude,
            },
            success: function (res) {
              console.log("解析地址成功", res);
              console.log("当前地址:", res.result.address);
              const addUserTrailBody = {//拿到地理位置传递下
                latitude: null,
                longitude: null,
                address: "",
              };
              addUserTrailBody.latitude = res.latitude;
              addUserTrailBody.longitude = res.longitude;
              addUserTrailBody.address = res.address;
              addUserTrail(addUserTrailBody);
              uni.setStorage({
                key: "local",
                data: res.result.address,
                success() {
                  console.log("用户地址信息已缓存");
                },
              });
            },
            fail: function (res) {
              uni.showToast({
                title: "定位失败",
                duration: 2000,
                icon: "none",
              });
              console.log(res);
            },
            complete: function (res) {
              //无论成功失败都会执行
              console.log("获取定位信息");
              return;
              uni.openLocation({
                latitude: that.latitude,
                longitude: that.longitude,
                success: function () {
                  console.log("success");
                },
              });
            },
          });
        },
      });
    },    
  },
};
</script>

要在manifest.json文件里配置下内容

复制代码
"permission": {
    "scope.userLocation": {
    "desc": "你的位置信息将用于定位效果展示"
    }
},
"requiredPrivateInfos": [
   "getLocation",
    "onLocationChange",
    "startLocationUpdate",
    "chooseLocation"
],
    "requiredBackgroundModes": [
        "location"
]
相关推荐
云起SAAS17 小时前
倒班日历助手抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·倒班日历助手
sheji341619 小时前
【开题答辩全过程】以 基于微信小程序的失物认领系统为例,包含答辩的问题和答案
微信小程序·小程序
qq_256847888619 小时前
08cms房产多城市版最新v8.7含小程序及装修网的安装及配置方法整理出来希望能帮到大家
小程序·08cms房产系统源码·08cms装饰网门户系统·08cms 房产门户系统源码
风月歌20 小时前
python项目之摄影竞赛小程序
python·mysql·小程序·毕业设计·源码
云云只是个程序马喽20 小时前
2026年短剧系统开发搭建全流程教程(小程序+APP自营/红果模式/广告联盟/海外多语言)
小程序
计算机毕设指导620 小时前
基于微信小程序的网络安全知识科普平台系统【源码文末联系】
java·spring boot·安全·web安全·微信小程序·小程序·tomcat
天***88962 天前
小程序婚纱店摄影楼预约婚庆礼展示,小程序开发定制,会员下单档期系统
小程序
说私域2 天前
开源AI智能名片链动2+1模式商城小程序下短视频电商变现与广告变现的对比研究
人工智能·小程序
天***88962 天前
美业医疗美容院小程序,预约会员管理养生馆诊所肌护肤理疗系统,附源码交付
小程序
2501_915909063 天前
手机崩溃日志导出的工程化体系,从系统级诊断到应用行为分析的多工具协同方法
android·ios·智能手机·小程序·uni-app·iphone·webview