uniapp之h5获取用户精确位置信息

时隔5个月了……
背景:新公司前段时间有个业务,需要或许用户的精确位置信息,兼容小程序、h5、内嵌app中的h5

提示:这里主要描述h5的实现

尝试一:使用uni.getLocation

uni.getLocation({
    type: 'gcj02',
    altitude: true
    success: function (res) {
        console.log('当前位置的经度:' + res.longitude);
        console.log('当前位置的纬度:' + res.latitude);
    }
});

代码部署的环境是https的,其中小程序上没有什么问题,但在h5上获取的位置信息有偏差,业务需要计算距离,有偏差这种情况肯定是不行的。

尝试二:使用腾讯地图api

需要将文件引入https://mapapi.qq.com/web/mapComponents/geoLocation/v/geolocation.min.js
使用该方法的时候进入页面有授权弹框

qq.maps.Geolocation(key, referer)

因为有h5内嵌的情况,自测时候试了下在设置中关闭app授权的场景(单浏览器中也有这种情况),问题就来了,长时间没有success或者fail的返回,页面的接口又强依赖位置情况。咱们要不害怕问题。

尝试三:使用腾讯地图api + getLocation

两个位置的方法配上flag字段,默认优先拿腾讯地图返回的数据,然后调uni.getLocation的方法,主要是为了处理app或浏览器不授权的情况,如果先拿到腾讯api返回的数据则后面的方法不重新赋值,否则要做一次重新赋值(保证拿精确的位置信息)。
现在我们的问题就解决了,可以提测了……
哒咩哦
要先进行流程自测,然后正常走……咦,使用uni.chooseLocation的地方,图片怎么白掉了,报了

TypeError: i.LatLng is not a constructor

遇到问题咱们不要慌
经过定位发现uni.chooseLocation跟引入的geolocation.min.js文件有冲突,如果在当前页面刷新地图可正常展示,所以就有个下面一个方案:在h5中使用uni.chooseLocation之前先将页面刷新一下。
如果不想走刷新可以试着用地图选点组件替代uni.chooseLocation的实现。
目前没有想到第三种方法……

以上,谢谢观看o( ̄▽ ̄)ブ

你可能感兴趣的:(uniapp之h5获取用户精确位置信息)