地理定位(Geolocation)API让我们可以获取关于用户当前地理位子的信息(或者至少是正在运行浏览器的系统的地理位置)它不是HTML5规范的一部分,但经常被归组与HTML5相关的新功能中,例如获取的方法有,获取当前位置的方法使用getcurrentposition方法,提供一个位置信息可用时要调用的函数
处理地理定位错误,向getCurrentPosition方法传递第二个参数,制定一个发生错误时要调用的函数
使用地理定位
我们通过全局属性navigator.geolocation访问地理定位功能,它会返回一个Geolocation对象.
getCurrentPosition(callback,errorCallback,options) 获取当前位置,使用watchposition(callback,error,options) 开始监控当前位置,clearWatch(id)停止监控当前位置.
获取当前位置,getCurrentPostion方法能获取当前的位置,不过位置信息不是由函数自身返回的.我们需要提供一个成功的回调函数,它会在位置信息可用时出发(这这样做考虑到了请求位置和信息的变得可用之间可能会有延迟)
<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style>
table {border-collapse:collapse;}
th,td{padding:4px}
th {text-algin:right}
</style>
</head>
<body>
<table border="1">
<tr>
<th>longutyde:</th><td id="longitude">-</td>
<th>lattitude:</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 displayPostion(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>
</body>
</html>
这个例子中的脚本调用了getCurrentPosition,并传递displayPosition 函数作为该方法的参数.党委制信息变得可用时,浏览器就会调用指定函数,并传入一个提供位置详情的position对象(详情会显示在一个table元素的单元格里)position对象非常简单
对于position对象一个有两个属性
coords 用与返回当前位置的坐标 coordinates类型
timestamp 返回获取坐标信息的时间 字符串
不是所有coordinates对象的数据值都时刻可用.浏览器获取位置信息的机制没有统一的规定,所使用的技术也有很多.移动设备越来越多的配置了GPS,加速度计和电子罗盘设备,这就以为着那些平台会拥有精确和完整的数据.
我们仍然可以为其他设备获取位置信息:浏览器使用的一种地理定位服务会尝试根据网络信息确定位置.如果你的系统力有Wifi适配器,那么信号方位内的网络就会与一份网络目录进行对比,这份目录是街道级景观调查(如谷歌街景服务)结果的一部分.如果没有WIFI,也可以用ISP所提供的ip地址获的大概的位置.
通过网络信息推断出的位置有着不同的精度,但它可以做到惊人的准确度.当我开始测试这项功能时,我很惊讶它报告的位置方位是如此之窄.事实上,他是如此的精确,以至于我得把屏幕截图里的坐标替换成帝国大厦的位置,因为通过真是的位置信息(来源于我家及附近的wifi网络)你可以很轻松地找到我的房子,看到我车道上的汽车照片.这东西实在很可怕,所以当文档使用地理定位功能时,所有浏览器会做的第一件事就是询问用户是否对其授权.
如果用户允许此请求,浏览器就能获得位置信息,并在信息可用时调用回调函数.
我用来书写的电脑没有安装任何类型的定位专用硬件:没用GPS,电子罗盘,高度计或者加速度计.因为这个原因,可用的数据只有纬度,经度和这些值的精度.chrome浏览器估计我的位置在报告位置的69米(大约是75码)范围内,相对于实际情况算是低估了.