vue 微信公众号获取定位经纬度 腾讯地图逆地址解析为具体地址

最近做项目需要用到 微信公众号获取定位,并将定位转换为具体地址的需求,找了挺多,最后整理下,分享给大家~ 

我这里使用的是腾讯地图,也可以使用其他的如百度、高德等。

思路是,先使用微信开放文档的获取定位接口进行获取定位(这里的定位是经纬度),然后使用腾讯地图将经纬度定位转换为具体所在的地址。

前提准备

1、首先先申请一个腾讯地图key

网址为:申请腾讯地图的开发者key  https://lbs.qq.com/console/mykey.html?console=mykey,申请完以后是这样

 

2、项目安装 wx依赖

npm install weixin-js-sdk --save-dev

接下来就是代码操作

1、先要引入wx和腾讯地图

在项目的index.html页面引入腾讯地图

<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=自己的key"></script> <!-- 腾讯地图 -->

 在需要获取定位的页面引入wx

//引入微信
import wx from 'weixin-js-sdk'

2、接下来就是获取微信定位

在获取微信定位的时候,要先通过config接口注入权限验证配置,获取配置信息里面的内容是后端接口给出的,所用的接口域名一定要备案。

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用

	wx.config({
	  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
	  appId: '', // 必填,公众号的唯一标识
	  timestamp: , // 必填,生成签名的时间戳
	  nonceStr: '', // 必填,生成签名的随机串
	  signature: '',// 必填,签名
	  jsApiList: [] // 必填,需要使用的JS接口列表
	});

具体代码如下:(在<script></script>标签中)

data () {
      return {
        configContent: [],
        address: []
      }
    },
mounted () {
      this.setWxjs()
    },
setWxjs () {
        let url = encodeURIComponent(window.location.href.split('#')[0])
        this.$axios.get('这里是后端提供的接口?url=' + url).then(res => {
          if (res.data.code === 0) {
            this.configContent = res.data.data
            this.signWX()
          }
        })
      },
signWX () {
        let _this = this
  
        wx.config({
          debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: this.configContent.appId, // 必填,公众号的唯一标识
          timestamp: this.configContent.timestamp, // 必填,生成签名的时间戳
          nonceStr: this.configContent.nonceStr, // 必填,生成签名的随机串
          signature: this.configContent.signature, // 必填,签名
          jsApiList: ['checkJsApi', 'openLocation', 'getLocation', 'updateAppMessageShareData', 'updateTimelineShareData'] // 必填,需要使用的JS接口列表
        })
        wx.checkJsApi({
          jsApiList: ['getLocation'],
          success: function (res) {
            // alert(JSON.stringify(res));
            if (res.checkResult.getLocation === false) {
              alert('你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!')
              return false
            }
          }
        })
        wx.ready(function () {
          wx.getLocation({
            type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
            success: function (res) {
              // 获取经纬度
              var latLng = new qq.maps.LatLng(res.latitude, res.longitude)
              getAddr.getAddress(latLng)
            },
            cancel: function (res) {
              alert('用户拒绝授权获取地理位置')
            }
          })
        })
        wx.error(function (res) {
          console.log('微信js-sdk 配置失败000' + res.errMsg)
          // alert('微信js-sdk 配置失败000' + res.errMsg)
        })
        // 调取腾讯地图
        var getAddr = new qq.maps.Geocoder({
          complete: function (res) {
            _this.address = res.detail
            var allAddress = res.detail.addressComponents
            // _this.address = res.detail.nearPois
            var address = res.detail.address
            // alert('地址:' + JSON.stringify(_this.address))
            console.log('地址:', address, allAddress.province, allAddress.city, allAddress.district)
            // alert('地址:' + address + allAddress.province + allAddress.city + allAddress.district)
          }
        })
      }

以上就是关于微信获取定位经纬度,并通过腾讯地图调用逆地址解析的方法将微信获取到的经纬度转换为具体的地址,如北京市朝阳区,有哪里理解的不对的地方,欢迎指正~

### 实现 Vue3 微信小程序中通过腾讯地图 API 获取用户定位Vue3 开发的微信小程序中集成腾讯地图以实现定位功能,可以通过以下方式完成: #### 1. **申请腾讯地图密钥** 需要先前往腾讯云官网注册账号并创建应用,获取腾讯地图的 `Key`。此 Key 将用于后续调用腾讯地图的相关接口[^1]。 #### 2. **引入腾讯地图 SDK** 在项目中的合适位置(通常是公共目录下),下载并引入腾讯地图的小程序插件 `qqmap-wx-jssdk.js` 文件。可以在某个 `.vue` 文件中这样操作: ```javascript import QQMapWX from '@/libs/qqmap-wx-jssdk.js'; ``` 上述代码片段展示了如何正确加载腾讯地图JavaScript 插件[^3]。 #### 3. **请求用户地理位置权限** 使用 `uni.authorize` 方法向用户请求地理定位权限。如果用户拒绝授权,则可以引导其手动开启设置页面来重新授予权限。 ```javascript // 请求授权 uni.authorize({ scope: 'scope.userLocation', success() { console.log('用户已同意授权'); }, fail() { // 用户未授权,跳转至设置页 uni.showModal({ title: '提示', content: '需要您授予地理位置权限才能正常使用本功能', confirmText: '去设置', cancelText: '取消', success(modalRes) { if (modalRes.confirm) { uni.openSetting(); } } }); } }); ``` 以上方法确保了用户的隐私安全,并遵循了微信小程序对于敏感数据访问的规定。 #### 4. **获取当前设备的位置信息** 调用微信小程序自带的 `getLocation` 接口获取当前位置的经纬度。随后可通过这些坐标进一步查询具体地址或其他相关内容。 ```javascript const getLocationData = () => { return new Promise((resolve, reject) => { uni.getLocation({ type: 'wgs84', // 返回 GPS 坐标,默认gcj02 geocode: true, success(res) { resolve(res); }, fail(err) { reject(err); } }); }); }; ``` 这里采用了基于 `Promise` 的封装形式简化异步处理逻辑[^4]。 #### 5. **地理编码转换为实际地址** 利用之前导入的 `QQMapWX` 对象实例化服务类,并传入初始化参数——即前面提到过的腾讯地图秘钥 (`key`) 。接着执行反向地理编解码过程将原始坐标映射成人类可读的文字描述。 ```javascript const qqmapsdk = new QQMapWX({ key: '您的腾讯地图KEY' }); async function getFormattedAddress(latlng) { try { const result = await new Promise((res, rej) => { qqmapsdk.reverseGeocoder({ location: latlng, success(result) { res(result.result.address); // 地址详情字符串 }, fail(error) { rej(error.errMsg || error.message); } }); }); return result; } catch (e) { throw e; } } ``` 这段脚本实现了从经纬度详细街道名称之间的相互转化。 --- ### 总结 综上所述,在 Vue3 构建的微信小程序里借助腾讯地图 API 完成精确定位主要分为五个阶段:首先是取得合法有效的腾讯地图钥匙;其次是把官方提供的 JS 库嵌入工程结构之中;再次是妥善管理好必要的运行许可声明;第四步则是精确捕获目标地点的确切空间座标数值;最后一步便是运用专业的算法工具把这些抽象的数据转变为我们日常生活中熟悉的实体参照物表述出来^。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值