Skip to content

Geolocation

返回用户当前的位置,会首先调用浏览器自带的定位接口,如果失败或不支持则调用高精IP定位(需要开通权限,否则调用普通定位)接口,如果用户拒绝授权定位,则无法返回任何定位结果。

构造函数

构造函数描述
Geolocation()创建Geolocation对象实例

PositionOptions

此类为getCurrentPosition的可选参数,不能实例化。

属性类型描述
enableHighAccuracyBoolean是否要求浏览器获取最佳效果,同浏览器定位接口参数。默认为false
timeoutNumber超时事件,单位为毫秒。默认为10秒
maximumAgeNumber允许返回指定事件内的缓存结果,单位为毫秒。如果为0,则每次请求都获取最新的定位结果。默认为10分钟
SDKLocationBoolean是否开启SDK辅助定位

GeolocationResult

此类作为Geolocation的getCurrentPosition方法的回调函数参数,不可实例化。

属性类型描述
pointPoint定位坐标点
accuracyNumber定位精度,单位为米
addressAddressComponent根据定位坐标点解析出的地址信息,可能为空(3.0新增)

方法

方法返回值描述
getCurrentPosition(callback: Function, opts: PositionOptions)none返回用户当前位置。定位完成时(包括成功、失败、超时等情况),回调参数为GeolocationResult对象,否则为null
getStatus()StatusCode定位完成后的状态码。分为BMAP_STATUS_SUCCESS,BMAP_STATUS_UNKNOWN_LOCATION,BMAP_STATUS_PERMISSION_DENIED,BMAP_STATUS_TIMEOUT
enableSDKLocation()none开启SDK辅助定位,仅当使用环境为移动web混合开发,且开启了定位sdk辅助定位功能后生效
disableSDKLocation()none关闭SDK辅助定位

示例

ts
// 创建定位实例
const geolocation = new BMapGL.Geolocation();

// 配置定位参数
const options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0,
  SDKLocation: true
};

// 获取当前位置
geolocation.getCurrentPosition((result: BMapGL.GeolocationResult) => {
  if (result) {
    console.log('定位成功:', result.point);
    console.log('定位精度:', result.accuracy);
    if (result.address) {
      console.log('地址信息:', result.address);
    }
    
    // 设置地图中心点
    map.setCenter(result.point);
  } else {
    console.log('定位失败');
  }
}, options);

// 获取定位状态
const status = geolocation.getStatus();
switch (status) {
  case BMapGL.BMAP_STATUS_SUCCESS:
    console.log('定位成功');
    break;
  case BMapGL.BMAP_STATUS_UNKNOWN_LOCATION:
    console.log('未知位置');
    break;
  case BMapGL.BMAP_STATUS_PERMISSION_DENIED:
    console.log('定位权限被拒绝');
    break;
  case BMapGL.BMAP_STATUS_TIMEOUT:
    console.log('定位超时');
    break;
}

基于 MIT 许可发布