getLocation 和 getFuzzyLocation(微信小程序心得)

        对于定位到地图的中心,一开始使用的是腾讯地图的moveToLocation,处理map渲染完,自动定位(带动画moveToLocation)到地图的中心位置。(需求)

this.mapCtx = wx.createMapContext('myMap');

// 配合wx.getLocation

that.mapCtx.moveToLocation({
    longitude,
    latitude,
    success(res) {
        that.reverseGeocoder(latitude, longitude);
        that.setData({ chooseLocation: undefined });
    }
});

      审核上线的时候发现,getLocation怎么申请不下来,于是换成了getFuzzyLocation, 模糊定位。切换之后,发现一个新问题,每次进入小程序都要重新确认两次,一次提示是getLocation授权,一次提示getFuzzyLocation授权。

         这里有两个问题:

  1. 为什么次次进去都会重新提示授权?
  2. 已经把getLocation换掉了,怎么还有提示?

        经过一番查阅,第一点清楚了,getSetting里的权限,getLocation和getFuzzyLocation只能生效一个。合理!

        用排除法,先去掉app.json中的userLocation的permission后,弹了一次模糊定位的授权之后,直接提示需要去配置scope.userLocation的permission,说明有隐形的getLocation。

        排查隐形的getLocation的时候,自然联想到wx.chooseLocation,但手动定位并没有在初始化的过程中调用。

        就去试了试moveToLocation,去掉之后,真的正常了!不再弹两次,正常记录权限的获取。找到元凶了,moveToLocation中调用了getLocation。

        不能用moveToLocation,怎么定位地图的中心呢?查询社区后发现:很简单!直接设置map组件的latitude 和 longitude 属性就可以了。

<map
latitude = "{{ latitude }}"
longitude = "{{ longitude }}"
></map>

        不过,直接设置属性和使用moveToLocaiton有个小区别,前者不带动画,后者带有动画啦。

        最后,技术方案就成了:使用模糊定位替代精确定位,直接设置map的经纬度坐标字段,配合wx.chooseLocation手动精确定位。(场景:初始化地图,定位到自身坐标附近的位置)

        至此,getLocaiton 和 getFuzzyLocaiton的问题解决。        

 - to be continue -

---------- 最后贴一张小程序二维码(记录好的用餐体验) ---------

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值