Skip to content

在很多时候我们需要获取到用户当前的位置,比如地图网站就需要获取位置,包括很多租房网站,这些都要获取到用户当前的位置才能提供服务,我们可以通过 Geolocation 来获取用户的当前位置。

geolocation 是 window.navigator 上的一个属性,我们可以通过 window.navigator.geolocation 来获取到这个对象。

navigator 一般是和操作系统相关的功能,比如剪切板,比如 GPU 信息,这些都可以拿到,我们这里通过里面的 geolocation 拿到地理位置。

这个对象上有三个方法,分别是

  • clearWatch():传入一个 ID,可以用于清除监听位置变化
  • getCurrrentPostion():用于获取当前位置信息
  • watchPosition():可以实时监听当前设备的位置变化,返回一个 ID,当位置发生变化的时候会自动调用参数内部的回调函数

我们主要学习 getCurrrentPostion,由于获取位置本身是一个费时的操作,所以应该属于异步场景,所以该函数使用也是回调模式。当获取成功的时候会调用第一个参数的回调函数,并给回调函数传入位置对象。获取失败的时候会调用第二个参数的回调函数,并传入错误对象,第三个参数为配置对象,由于这个参数在不同浏览器中提供的都不一样,所以这里不过多介绍。

js
navigator.geolocation.getCurrentPosition(position => {
	console.log(position);
}, positionError => {
	console.log(positionError);
});

当然,用户的位置信息也属于隐私信息,所以当我们运行这个代码的时候,浏览器就会要求用户授权网站获取位置信息

![Pasted image 20240510183736](/notes-assets/05.WEBAPI/assets/Pasted image 20240510183736.png)

如果用户这里选择了阻止,那么就会出现错误,也就是会运行我们传入的第二个回调函数,否则就会运行第一个回调函数,positionError会输出如下信息

![Pasted image 20240510183950](/notes-assets/05.WEBAPI/assets/Pasted image 20240510183950.png)

当然,我们如果选择了允许,那么就获取到了用户的位置信息

![Pasted image 20240510184019](/notes-assets/05.WEBAPI/assets/Pasted image 20240510184019.png)

timestamp 就是获取用户位置信息的时间戳,而 coords 对象里面则是保存了用户的真实位置信息,当然我们发现这里有很多空,也就是没获取到,这里其实只是硬件不支持,比如 speed,就是用户的运动速度,我电脑肯定没有速度传感器,所以就获取不到 speed 这个属性,下面是这些属性的介绍:

  • latitude(纬度):表示设备当前位置的纬度坐标。它是一个浮点数,通常以度为单位表示。
  • longitude(经度):表示设备当前位置的经度坐标。也是一个浮点数,通常以度为单位表示。
  • altitude(海拔高度):如果可用,这个属性表示设备的当前海拔高度,通常以米为单位。这个属性在移动设备中可能不常用,因为它需要额外的传感器支持。
  • accuracy(精确性):表示纬度和经度坐标的精确度,通常以米为单位。较小的精确度值表示位置信息更准确。
  • altitudeAccuracy(海拔高度精确度):如果可用,这个属性表示海拔高度的精确度,通常以米为单位。与 altitude 属性一样,它在移动设备中可能不常用。
  • heading(方向):表示设备的当前方向,通常以度为单位。这个属性指示设备的方向,通常与地磁传感器相关。
  • speed(速度):表示设备的当前速度,通常以米每秒为单位。这个属性通常与 GPS 数据相关。

这些属性一起提供了有关设备位置和移动方向的详细信息。需要注意的是,并非所有属性在每个设备上都可用,因为它们依赖于设备的硬件和浏览器的支持。在使用这些属性时,应谨慎处理,以适应可能的缺失或不完整数据。

以笔记为镜,可以知得失