HTML5中的位置定位

05.08.2010 by jiezhou - 0 Comment, Posted in javascript

前段时间,在看W3C定制的HTML5草案时发现一个有趣东西——Geolocation API。
W3C对geolocation的解释是”defines an API that provides scripted access to geographical location information associated with the hosting device”。
Firefox自3.5后就开始支持这一特性了。最新版本的的Chromium也支持。
它是一个什么东西呢?其实就是一个浏览器定位功能。
详细资料这边有:http://dev.w3.org/geo/api/spec-source.html
下午根据W3C提供的API写了一个小程序页面。
http://blog.2332.cn/files/location/loc.html
测试结果把自己给震住了,通过浏览器既然可以将用户的位置标在地图上,而且误差不超过200米!!!

代码实现

代码的实现主要是靠下面这句:

navigator.geolocation.getCurrentPosition(successCallback, failureCallback,
    {maximumAge:30000, timeout:10000});

successCallback(position): 成功回调
failureCallback(error): 失败回调
params: 参数,如:{maximumAge:30000, timeout:10000} 表示:表示忽略10分钟前的定位缓存,定位超时为10秒

那么Firefox等浏览器是怎么进去定位的呢?

W3C草案所提出的Geolocation API是个访问位置信息(如经纬度)的高层接口,该接口与实现设备紧密相关。API本身对下面的位置信息一无所知。常见的位置信息来源主要包括全球定位系统(GPS)、根据网络信号如IP地址、RFID、WiFi及蓝牙MAC地址推断出的位置信息以及GSM/CDMA的cell ID。
在访问位置感知的站点时,Firefox会询问你是否要共享你的位置。
如果你同意,那么Firefox就会搜集附近的无线访问点以及你机器的IP地址等信息,然后将这些信息发送到默认的服务供应商(Google Location Services)来对你的位置进行计算,接下来所请求的站点就会获得你的位置信息。
如果你不同意,那么Firefox就什么都不会做。
说白了,就是浏览器会去搜索电脑附近的无线热点,然后将这些无线热点信息及电脑本身的IP地址、网卡Mac地址提交到Google的一个位置计算服务器,然后Google会将位置计算结果返回。
那么Google又怎么通过无线热点等信息计算出我们的位置的呢?
因为Google是一家很大型的公司,每天会很工作人员会开一辆车在城市的满大街乱跑,然后将所有的无线热点信息搜集起来,把那些固定、持久的无线热点信息保存到Google的位置数据库中。当浏览器请求解析时,它会去对比搜索对应的无线热点信息,然后将最近那个无线热点的坐标位置返回。Google这一做法,还真够强悍的。
但这样有一个限制条件,那就是,用户电脑并须支持WIFI无线上网功能,否则无法搜索WIFI热点。
我特地禁用了无线网卡,然后使用有线的本地连接再测试刚才自己的写的页面里,发现获取会超时,看来实现原理还真是这样子的。
(补充:普通有线网络也支持定位,但精度不是很准,wifi的定位精准也是根据各地情况不一样,小城市google收集的数据不全,所有精度也不高。)
值得欣慰的是,网站要想获取你的位置信息必须经过用户本人的同意。
要不然,上网就太危险了。一旦说错话,很容易被跨省的。。。