1.先用的百度的API(坑巨多):
getCurrentPosition() 方法
大概代码如下:
let geolocation = new BMap.Geolocation()
geolocation.getCurrentPosition(function(r) {
if (this.getStatus() == BMAP_STATUS_SUCCESS) {
// 检查 position 是否是默认值
_this.position.longitude = r.point.lng
_this.position.latitude = r.point.lat
} else if(this.getStatus() == BMAP_STATUS_PERMISSION_DENIED){
// alert('用户拒绝了定位权限');
}
})
坑1:
百度地图必须有一个baidu-map的html 标签 ,然后在@ready方法里面加载BMap对象..
当你的页面刚好有初始化异步方法(如init)时,并且异步方法的回调函数要用到BMap对象,
那么你只能在@ready方法里调用init,保证BMap对象可以访问
如果百度地图加载失败那么你的init方法就废了..是的,这标签只有ready 一个方法..
坑2:
定位弹框会让用户点"允许"和"不允许",
无论你点什么,this.getStatus()的值永远是0,也就是BMAP_STATUS_SUCCESS,并且永远会获取到位置..
坑3:
位置返回了基本的经纬坐标,但是中文地址位置经常就那么一两个字段有值..
2.后用H5的API:
navigator.geolocation.getCurrentPosition(showPosition,showError);
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
坑1:
只返回了经纬度,没有中文地址位置
与百度不同的是:
用户点不允许时getCurrentPosition 返回的就是不允许状态,符合逻辑,
并且没有影响到init方法的异步执行,没有像百度那样的@ready方法
但是他们都有一个通病
引用
https://blog.csdn.net/weixin_39906358/article/details/117817941
当请求iOS开始定位的时候,会弹出一个提示框,提示你是否"允许"定位,允许定位继续下一步,如果一不小心点了下"不允许"之后,会发现,下次进到这个h5之后再也不会提示请求定位权限的提示框了。"不允许"被缓存了下来。再次调用geolocation会报 error.PERMISSION_DENIED 错误
而且没有相应的api能重启提示框。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。