对于定位到地图的中心,一开始使用的是腾讯地图的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授权。
这里有两个问题:
- 为什么次次进去都会重新提示授权?
- 已经把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 -
---------- 最后贴一张小程序二维码(记录好的用餐体验) ---------