Geolocation
Geolocation是一个获取用户的浏览器所在设备的位置的一组开发api,简单点的来说就是获取地理位置信息 —— 经度(Longitude)和纬度(Latitude)。
如何使用
Geolocation
对象是存在于浏览器对象 Navigator
中,所以调用的时候需要使用 navigator.geolocation
来获得。
navigator.geolocation
会返回一个 Geolocation
对象,该对象有如下三个方法:
-
getCurrentPosition
: 获取设备当前位置。 -
watchPosition
: 位置改变监听器 -
clearWatch
: 清除位置监听器
getCurrentPosition
navigator.geolocation.getCurrentPosition(success, error, options)
success:成功获取位置后的回调函数,参数是一个 Position 对象。
error:获取位置失败时的回调函数,参数是一个 PositionError 对象。可选。
options:设置 获取/监听 位置方法参数的对象,有如下3个配置项。可选。enableHighAccuracy<Boolean>: 是否使用最高精度。默认值: false。使用高精度会导致更多电量的损耗和较慢的响应时间。
timeout<long>: 在多少毫秒内返回一个位置。默认值是Infinity。
maximumAge<long>: 缓存位置的时间限制。默认值:0。
// 如何获取位置信息
const Geolocation = navigator.geolocation;
const getCbFuc = (data) => {console.log(data)};
const positionOptions = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 5000,
};
Geolocation.getCurrentPosition(getCbFuc , getCbFuc , positionOptions);
获取位置成功后会返回Position对象,里面存储着当前的位置信息,如下图:属性 | 定义 |
---|---|
coords.accuracy | 位置精度 |
coords.altitude | 海拔 |
coords.altitudeAccuracy | 海拔精度 |
coords.heading | 方向,正北为0°,移动设备可用 |
coords.latitude | 纬度 |
coords.longitude | 经度 |
coords.speed | 速度 |
timestamp | 响应的时间戳 |
watchPosition 和 clearWatch
navigator.geolocation.watchPosition(success, error, options);
// id -> 需要被终止的位置监听器的标识
navigator.geolocation.clearWatch(id)
watchPosition
和 getCurrentPosition
一样,接收同样的参数并返回相同的位置对象,不同的是在调用watchPosition
方法后,会返回此监听器的 id
,如果设备位置发生改变,则会继续返回新的位置信息,这就实现了位置的监听,如果想终止监听,则使用 clearWatch
方法终止对应的监听器即可。如下图:
番外 -- 个人理解和思考
H5这个方法为前端开发者提供了位置定位功能,但此方法要在https协议下才可以使用,其次,对于此定位方法 Gps > IP,在没有装载 Gps 模块的设备,例如大多数PC,请求此方法,就要通过 IP 请求地址,但这种方法并不是浏览器可以实现的,如果要想获取地址,就得上传到服务器的查询和计算位置信息,而大多数浏览器都是使用谷歌提供的API来查询,Emm...,所以,该翻的墙还是要翻,不能因为一堵墙阻止我们学习的道路。
各位,共勉!!