uni-app微信小程序获取用户地理位置信息

uni-app 小程序项目无法直接获取到地理位置,只能通过获取到的经纬度,调用第三方地图Api获取。

这里根据腾讯位置服务官网给出的开发指南进行操作,微信小程序获取地理位置需要进行的操作

这里开发的是微信小程序,所以选择腾讯地图

下面进行操作演示

1.申请密钥

申请开发者密钥(key)输入即可

2.开通webserviceAPI服务

控制台 -> key管理 -> 设置(使用该功能的key)

 

3.下载微信jssdk文件

进入官网,点此下载即可

下载后,获取文件

如下方官网示例代码,引入qqmap-wx-jssdk.js 文件

下面是代码获取位置示例:

// 引入SDK核心类
var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
var qqmapsdk;
Page({
    onLoad: function () {
        // 实例化API核心类
        qqmapsdk = new QQMapWX({
            key: '申请的key'
        });
    },
    onShow: function () {
        // 调用接口
        qqmapsdk.search({
            keyword: '酒店',
            success: function (res) {
                console.log(res);
            },
            fail: function (res) {
                console.log(res);
            },
        complete: function (res) {
            console.log(res);
        }
    });
})

这里是代码配置位置

4.manifest.json配置

manifest.json- 微信小程序配置 - 填写微信小程序AppID、选择位置接口,填写申请原因

 

上面是配置,下面这一部分是转载的代码

/**
 * @Author: licheng
 * @Date: 2019/12/21 6:06 下午
 * @Description:
 */
import QQMapWX from "../static/js/qqmap-wx-jssdk.min.js";

const getCity = () => {
  return new Promise((resolve, reject) => {
    // 获取授权信息
    uni.getSetting({
      success: res => {
        // console.log(res);
        if (res.authSetting && res.authSetting.hasOwnProperty("scope.userLocation")) {
          if (res.authSetting["scope.userLocation"]) {
            getCityInfo();
          } else {
            uni.showModal({
              title: "提示",
              content: "请重新授权获取你的地理位置,否则部分功能将无法使用",
              success: (res) => {
                if (res.confirm) {
                  uni.openSetting({
                    success: () => getCityInfo()
                  });
                } else {
                  reject("请授权获取你的地理位置,否则部分功能将无法使用!");
                }
              },
            });
          }
        } else {
          getCityInfo();
        }
      }
    });

    // 获取地理位置信息
    const getCityInfo = () => {
      // 腾讯地图Api
      const qqmapsdk = new QQMapWX({ key: "这里填写腾讯地图的秘钥" });
      // 授权
      uni.authorize({
        scope: "scope.userLocation",
        success: () => {
          uni.getLocation({
            type: "gcj02", //  wgs84: 返回GPS坐标,gcj02: 返回国测局坐标
            success: res => {
              const {latitude, longitude} = res;
              const location = {latitude, longitude};
              qqmapsdk.reverseGeocoder({
                location,
                success: res => resolve(res.result)
              });
            }
          });
        },
        fail: () => reject("请授权获取你的位置,否则部分功能将无法使用!"),
      });
    };
  });
};

export default getCity;

这一段实现的是需要用户授权才能继续进行下去的功能。不是简单的获取地理位置。

 

简单的只获取位置,但是用户不授权也既可以继续运行的,参考如下:

getAddress() {
	uni.getLocation({
		success: res => {
			this.lat = res.latitude;
			this.lng = res.longitude;

			qqmapsdk.reverseGeocoder({
				location: {
					latitude: res.latitude,
					longitude: res.longitude
				},
				success: res => {
					let adInfo = res.result.ad_info;
					let region = [adInfo.province, adInfo.city, adInfo.district];
					this.region = region;
				}
			});
		}
	});
},

 

 

重点。。。

这个是最重要的,之前没看到腾讯位置服务官网的开发指南,导致走了不少弯路

配置位置:微信公众平台进入->开发->开发管理->开发设置

说这个重要的原因是之前不知道,导致小程序拿不到位置信息,线上报错

经过很多排查发现是  qqmapsdk.reverseGeocoder()在运行时报错

最后才找到这个问题。

 

 

报错信息

这里地理位置在开发者工具上测试发现 uni.openSetting()在开发者工具上不能实现且无报错,最后是挨个打印发现的,经过检查及测试发现需要在真机上测试方可。

最后测试经过这个流程,获取地理位置正常!

 

 

参考:uni-app 小程序项目获取地理位置

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值