微信公众号获取定位
坑: 再微信公众号内使用百度地图api获取经纬度,然后再解析地址信息,ios正常,安卓手机只能获取到使用ip定位获取的经纬度。
虽然百度地图API获取定位在公众号里只能使用IP进行定位,但是在浏览器里,安卓和IOS 定位都是使用浏览器定位
百度地图获取定位的流程
解决方案
ios使用百度api定位,安卓手机使用腾讯地图定位
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
//ios系统 调用百度定位
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(e) {
if(this.getStatus() == BMAP_STATUS_SUCCESS){
// this.getStatus()这个getStatus 的值我打印出来明明是数字,
//不知道为啥这么判断,百度地图给了一个映射关系
// 百度 geolocation 的经纬度属性不同,此处是 point.lat
_this.parseLocation(e.point) // 解析地址
} else {
console.log('failed' + this.getStatus());
}
});
} else{
//安卓和Pc 调用腾讯定位
var geolocation = new qq.maps.Geolocation("YMZBZ-EGARS-BQ2O3-6MABE-IN4Q5-U4FGQ", "PXC");
geolocation.getLocation(_this.showPosition, _this.showErr, {timeout: 8000})
}
// 定位成功的回调
showPosition(position){
// var adCode = position.adCode;//邮政编码
// var nation = position.nation;//中国
// var city = position.city; //城市
// var addr = position.addr; //详细地址
// var lat = position.lat; //
// var lng = position.lng; //火星坐标 //TODO 实现业务代码逻辑
let params = {
lng: position.lng,
lat: position.lat,
address: position.city + position.addr,
}
this.collectPositon(params) // 向后端发送地址信息
},
// 失败回调
showErr(err){
console.log('定位失败');
},
// 根据经纬度解析地址
parseLocation(position){
let _this = this
// 创建地理编码实例
let myGeo = new BMap.Geocoder();
// 根据坐标得到地址描述
myGeo.getLocation(position, function(result){
if (result){
alert(result.address);
// 向后端发送地址信息
let params = {
address: result.address,
}
_this.collectPositon(Object.assign(position, params))
}
});
},
问题
- 通过百度地图api进行定位,
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(e) {
if(this.getStatus() == BMAP_STATUS_SUCCESS){
// 百度 geolocation 的经纬度属性不同,此处是 point.lat
_this.parseLocation(e.point) // 解析地址
} else {
console.log('failed' + this.getStatus());
}
});
this.getStatus()这个getStatus 的值我打印出来明明是数字, 不知道为啥这么判断,这个还没仔细研究百度地图给了一个映射关系,百度地图获取定位的接口
还有一个是ios直接使用腾讯地图api进行定位,应该也是可行的,因为我们的项目之前用的百度地图,所以就没有换。
参考链接1
参考链接2