2022-05-02
近期在使用人人商城进行二开时,使用的是自己编写通过js调用微信授权获取用户经纬度,计算出附近一定距离内的商家位置并进行排序。但是距离一直不精确,偏差还很大,经过几次折腾还是使用人人商城系统的高德地图和百度地图的授权获取位置
但是这里有一个小坑,需要留意,这里是完整的框架自带授权获取经纬度
/*高德地图定位*/
// var map = new AMap.Map('amap-container');
// window.modal = modal;
// map.plugin('AMap.Geolocation', function () {
// var geolocation = new AMap.Geolocation({
// enableHighAccuracy: true,//是否使用高精度定位,默认:true
// timeout: 5000, //超过10秒后停止定位,默认:5s
// maximumAge: 0, //定位结果缓存0毫秒,默认:0(10min)
// });
// map.addControl(geolocation);
// geolocation.getCurrentPosition(function (status, result) {
// if (status == 'complete') {
// modal.setCookie('lat', result.position.lat, 0.1);
// modal.setCookie('lng', result.position.lng, 0.1);
// modal.location.lat = result.position.lat;
// modal.location.lng = result.position.lng;
// // modal.initMerch()
// modal.initTabbar();
// } else {
// /*FoxUI.toast.show("位置获取失败!"+result.message);
// return*/
// /*百度地图定位*/
// var geoLocation = new BMap.Geolocation();
// window.modal = modal;
// geoLocation.getCurrentPosition(function (result) {
// if (this.getStatus() == BMAP_STATUS_SUCCESS) {
// modal.setCookie('lat', result.point.lat, 0.1);
// modal.setCookie('lng', result.point.lng, 0.1);
// modal.location.lat = result.point.lat;
// modal.location.lng = result.point.lng;
// // modal.initMerch()
// modal.initTabbar();
// } else {
// FoxUI.toast.show("位置获取失败!");
// return
// }
// }, {enableHighAccuracy: true});
// }
// });
// });
如果直接使用那么你获取到的经纬度还是有很大的偏差需要你去手动处理,框架原生的判断在你两个script继承地图插件中都获取或者配置KEY的情况下,是走不到百度地图的授权这的,需要留意这一块。
我的解决办法:直接将百度地图的定位授权提出来,只使用这一个,
var geoLocation = new BMap.Geolocation();
window.modal = modal;
geoLocation.getCurrentPosition(function (result) {
if (this.getStatus() == BMAP_STATUS_SUCCESS) {
modal.setCookie('lat', result.point.lat, 0.1);
modal.setCookie('lng', result.point.lng, 0.1);
modal.location.lat = result.point.lat;
modal.location.lng = result.point.lng;
// modal.initMerch()
modal.initTabbar();
if (location.href.indexOf("#") == -1) {
location.href = location.href + "#";
location.reload();
}
} else {
FoxUI.toast.show("位置获取失败!");
return
}
}, {enableHighAccuracy: true});
在你后台逻辑编写上获取距离上就会相对的比,高德地图和直接调用微信的授权获取的经纬度要精确得多,位置偏差相对再能接受范围内。
然后计算距离目前网上很多直接使用的地球弧度啊这些,挺好用的,你动态获取的话速度贼慢(怕是:已经实际操作过)所以就用弧度吧。
这里只是一些对于人人商城定位授权的一些见解,有什么不足和有疑问的地方感谢大家提出宝贵意见。