使用地理定位

本文内容来自HTML5权威指导

使用地理定位

地理定位(Geolocation)API可以获取关于用户当前地理位置的信息。它不是HTML5规范的一部分,但经常被归组到HTML5相关的新功能中。

通过全局属性navigator.geolocation访问地理定位功能。
Geolocation对象

名称说明返回
getCurrentPosition(callback,errorCallback, options)获取当前位置void
watchPosition(callback,error, options)开始监控当前位置数值
clearWatch(id)停止监控当前位置void

getCurrentPosition方法提供了一个成功的回调函数
当位置信息变得可用时,浏览器就会调用指定函数,并传入一个提供位置详情的Position对象,有如下的属性:

  • coords返回当前位置的坐标,为Coordinate
  • timestamp返回获取坐标信息的时间

Coordinates对象的属性

  • latitude返回十进制表示的纬度
  • longitude返回十进制表示的经度
  • altitude返回用米表示的海拔高度
  • accuracy返回用来表示的坐标精度
  • altitudeAccuracy返回用来表示的海拔精度
  • heading返回用度表示的行进方法
  • speed返回用米/秒表示的行进速度

如下的代码:

    <table border="1">
        <tr>
            <th>Longitude:</th><td id="longitude">-</td>
            <th>Latitude:</th><td id="latitude">-</td>
        </tr>
        <tr>
            <th>Altitude:</th><td id="altitude">-</td>
            <th>Accuracy:</th><td id="accuracy">-</td>
        </tr>
        <tr>
            <th>Altitude Accuracy:</th><td id="altitudeAccuracy">-</td>
            <th>Heading:</th><td id="heading">-</td>
        </tr>
        <tr>
            <th>Speed:</th><td id="speed">-</td>
            <th>Time Stamp:</th><td id="timestamp">-</td>
        </tr>
    </table>
    <script>        
        navigator.geolocation.getCurrentPosition(displayPosition);

        function displayPosition(pos) {
            var properties = ["longitude", "latitude", "altitude", "accuracy",
                              "altitudeAccuracy", "heading", "speed"];

            for (var i = 0; i < properties.length; i++) {
                var value = pos.coords[properties[i]];
                document.getElementById(properties[i]).innerHTML = value;
            }
            document.getElementById("timestamp").innerHTML = pos.timestamp;
        }
    </script>

safari中会弹出如下的提示:

这里写图片描述

点允许后则就可以显示数据

这里写图片描述

处理地理定位选项
可以给getCurrentPosition方法提供第二个参数,指定一个函数,在获取位置发生错误时调用它,会获得一个PositionError对象,属性如下:

  • code返回代表错误类型的代码
  • message返回描述错误的字符串

code属性有3个可能的值

  • 1用户未授权使用地理定位功能
  • 2不能确定位置
  • 3请求位置的尝试已超时

如下:

navigator.geolocation.getCurrentPosition(displayPosition, handleError);
function handleError(err) {
                document.getElementById("errcode").innerHTML = err.code;
                document.getElementById("errmessage").innerHTML = err.message;
            }

指定地理定位选项
可以给getCurrentPosition方法提供第三个参数,是一个PositionOptions对象,可以允许部分控制位置信息的获取方法,这个对象定义的属性:

  • enableHighAccuracy告诉浏览器我们希望得到可能的最佳结果,布尔值
  • timeout限制请求位置的时间,设置多少毫秒后会报告一个超时错误
  • maximumAge告诉浏览器我们愿意接受缓存过的位置,只要它不早于指定的毫秒数

        var options = {
            enableHighAccuracy: false,
            timeout: 2000,
            maximumAge: 30000
        };
    
        navigator.geolocation.getCurrentPosition(displayPosition,
                                                 handleError, options);
    

监控位置
可以用watchPosition方法不断得获取关于位置的更新,这个方法的参数和getCurrentPosition方法相同。

        var options = {
            enableHighAccuracy: false,
            timeout: 2000,
            maximumAge: 30000
        };

        var watchID = navigator.geolocation.watchPosition(displayPosition,
                                                 handleError,
                                                 options);

        document.getElementById("pressme").onclick = function(e) {
            navigator.geolocation.clearWatch(watchID);
        };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值