本文内容来自HTML5权威指导
使用地理定位
地理定位(Geolocation)API可以获取关于用户当前地理位置的信息。它不是HTML5规范的一部分,但经常被归组到HTML5相关的新功能中。
通过全局属性navigator.geolocation
访问地理定位功能。
Geolocation
对象
名称 | 说明 | 返回 |
---|---|---|
getCurrentPosition(callback,errorCallback, options) | 获取当前位置 | void |
watchPosition(callback,error, options) | 开始监控当前位置 | 数值 |
clearWatch(id) | 停止监控当前位置 | void |
getCurrentPosition
方法提供了一个成功的回调函数
当位置信息变得可用时,浏览器就会调用指定函数,并传入一个提供位置详情的Position
对象,有如下的属性:
coords
返回当前位置的坐标,为Coordinatetimestamp
返回获取坐标信息的时间
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);
};