教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

Geolocation API如何获取用户当前位置

更新时间:2022年03月31日15时34分 来源:传智教育 浏览次数:

GeolocationAPI的使用非常简单,“navigator.geolocation”对象提供了可以公开访问地理位置的方法,其中navigator为浏览器内置对象。检测浏览器是否支持定位API,只需要检测geolocation是否存在于navigator中即可。对于移动Web开发者,大多数情况只需要获取用户的当前位置,此时我们可以使用getCurrentPosition()方法来获取当前位置的坐标值。getCurrentPosition()被调用时会发起一个异步请求,浏览器会调用系统底层的硬件(如GPS)来更新当前的位置信息,当信息获取到之后会在回调函数中传入position对象。

position对象包含两个属性,一个是coords(坐标),它是一个Coordiante对象,包含当前位置信息;另一个是timestamp,表示获取到位置的时间戳。

coordiante对象包含包括经纬度在内的一系列信息具体如下所示。

latitude:一个十进制表示的纬度坐标。

longitude:一个十进制表示经度的坐标。

altitude:海拔高度(以米为单位,如果是5,表示精确到5米范围)。

accuracy:当前经纬度信息的精度(以米为单位)。

altitudeAccuracy:当前海拔高度的精度。

heading:代表当前设备的朝向,该值是以弧度为单位,指示了按顺时针方向相对

于正北的度数(例如:heading为270的时候表示正西方)。接下来,用通过一个案例来演示如何使GeolocationAPI获取当前位置。代码如demo3-6所示。

demo3-6.html

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>Title</title>
   <script>
         function getMyPosition(){
           if(window.navigator.geolocation){
               //获取当前位置..
               alert("正在获取您的位置.");
               //如果获取位置成功,会调用名字为successPosition 的方法.
               navigator.geolocation.getCurrentPosition
               (successPosition,errorPosition);
            }else{
               alert("您当前的浏览器不支持..");
            }
       }
       function successPosition(position){
          var jd=position.coords.longitude;//经度
          var wd=position.coords.latitude;//纬度
          alert(jd+","+wd);
        }
        //如果没有获取到位置,就会调用这个方法
        function errorPosition(){
                alert("获取位置失败.");
        }
        getMyPosition();
    </script>
</head>
<body>
</body>
</html>

因为Geolocation获取当前定位除了浏览器的支持,还需要硬件设备的支持,上述代码在不支持该操作的设备上运行的结果如图3-8和图3-9。

普通PC提示对话框
图3-8普通PC提示对话框1
普通PC提示对话框2
图3-9普通PC提示对话框2

现在我们在Mac电脑上用浏览器打开demo3-6,结果如图3-10和图3-11所示。

Mac提示对话框
图3-10Mac提示对话框1
Mac提示对话框
图3-11Mac提示对话框2

在移动端用浏览器打开demo3-6,结果如图3-12和图3-13所示。

Geolocation API移动提示对话框
图3-12移动提示对话框1

图3-13移动提示对话框2

以上内容演示了Geolocation获取当前位置的过程,值得一提的是,该案例获取的是当前位置的地理坐标,所以位置变化会导致坐标变化。

多学一招:监视移动设备的位置变化

接下来要介绍一个名词LBS,LBS是基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标)。

在正文中演示的getCurrentPosition()方法只在调用时会得到位置信息,在LBS应用中,检测用户位置变化是非常常见的需求。一个做法是通过循环调用的方式去检测位置变化。

例如,设置了一个10秒作为获取位置的间隔,这样做的缺点是:编程人员无法知道用户当前的速度,如果在飞机高铁上,10秒可能已经走了很长一段距离,这样提供给用户的位置信息可能是延迟的,如果将间隔设置的很短,又会非常耗电耗能,如果用户长时间没动,那这些查询都是无用的。

为了解决这个问题,Geolocation还提供了watchPosition()方法,可以让系统通知编程人员用户的位置发生了变化。

watchPosition()方法和getCurrentPosition方法在调用上类似,但方法功能与getCurrentPosition的区别是非常明显的。调用该函数时会返回一个watch ID,这个ID和setInterval()函数返回的ID类似,可以用于清除此次的监视操作。

watchPosition()方法也接受相同的三个参数,success、error回调以及一个PositionOptions对象。





猜你喜欢:

HTTP模块常用的API有几个?

matplotlib是什么?matplotib的3中API介绍

Web API和API有什么关系?

API服务网关实现之APISIX安装和部署

传智教育前端与移动开发培训课程

0 分享到:
和我们在线交谈!