Skip to content

useBrowserLocation ^0.0.33

用于获取用户所在的城市位置信息 (根据浏览器原生定位或者结合安卓定位 SDK 辅助定位),相比 Ip 定位获取的信息更丰富,但稳定性并不高,有时候很精准,有时候飘半个中国。

ts
import { useBrowserLocation } from 'vue3-baidu-map-gl'

注意

  1. 由于 Chrome、iOS10 以上系统等已不再支持非安全域的浏览器定位请求,为保证定位成功率和精度,请尽快升级您的站点到 HTTPS。
  2. iOS15 系统浏览器默认关闭位置请求,需要用户设置手机为允许/询问后方可获取精确的定位,定位权限的开启方式请参见 iOS15 定位问题。
  3. 由于浏览器原生定位成功率并不高,可以尝试 Ip 定位安卓 SDK 定位进行辅助,如果定位精准在城市级别,可联系百度地图提供 ak 以提高定位精准度。

示例

用法

ts
const { get, location, isLoading, isError, status } = useBrowserLocation(options, cal)

TIP

该 hooks 依赖于 BMapGL,所以需要在 Map 组件初始化完毕调用 get 方法后数据才可用

参数

参数描述类型默认值
options浏览器定位配置项UseBrowserLocationOptions-
cal定位成功后的回调函数(location: Ref<Location>) => void-

UseBrowserLocationOptions

属性描述类型默认值
enableSDKLocation是否启用安卓定位 SDK 辅助定位,适用于安卓 WebView 页面,详见booleanfalse
enableHighAccuracy是否要求浏览器获取最佳效果,同浏览器定位接口参数booleanfalse
timeout超时时间number10000
maximumAge允许返回指定事件内的缓存结果,单位为毫秒。如果为0,则每次请求都获取最新的定位结果。默认为10分钟number600,000

返回值

返回值描述类型
isLoading是否在获取中boolean
location定位信息Location
get获取定位方法,需要在Map组件initd事件触发后才可调用() => void
isError是否定位出错boolean
status定位状态Status

Location

属性描述类型
accuracy定位精度number
point经纬度点{ lng: number lat: number }
address定位地址Address

Status

status描述
BMAP_STATUS_SUCCESS定位成功
ERR_POSITION_TIMEOUT定位超时
ERR_POSITION_UNAVAILABLE定位不可用
ERR_PERMISSION_DENIED没有权限,定位被拒绝

Address

属性描述类型
country国家string
city城市string
city_code城市 codestring
district行政区string
province省份string
street街道string
street_number城市 codestring

TS 类型定义参考

ts
import { Ref } from 'vue'
import { type Point } from 'vue3-baidu-map-gl'

interface UseBrowserLocationOptions {
  /**
   * 是否开启SDK辅助定位,仅当使用环境为移动web混合开发,且开启了定位sdk辅助定位功能后生效
   */
  enableSDKLocation?: boolean
  /**
   * 是否要求浏览器获取最佳效果,同浏览器定位接口参数。默认为false
   */
  enableHighAccuracy?: boolean
  /**
   * 超时事件,单位为毫秒。默认为10秒
   */
  timeout?: number
  /**
   * 允许返回指定事件内的缓存结果,单位为毫秒。如果为0,则每次请求都获取最新的定位结果。默认为10分钟
   */
  maximumAge?: number
  /**
   * 是否开启SDK辅助定位
   */
  SDKLocation?: boolean
}
declare type Status =
  | 'BMAP_STATUS_SUCCESS'
  | 'ERR_PERMISSION_DENIED'
  | 'ERR_POSITION_UNAVAILABLE'
  | 'ERR_POSITION_TIMEOUT'
interface Location {
  accuracy: number
  point: Point
  address: {
    country: string
    city: string
    city_code: string
    district: string
    province: string
    street: string
    street_number: string
  }
}
export declare function useBrowserLocation(
  options?: UseBrowserLocationOptions,
  cal?: (location: Ref<Location>) => void
): {
  get: () => void
  isLoading: Ref<boolean>
  isError: Ref<boolean>
  status: Ref<Status | undefined>
  location: Ref<Location>
}

Released under the MIT License.