HTML5 中 Geolocation 获取地理位置的原理是什么?

时间:2012-9-13     作者:smarteng     分类: 编程


具体的 API 是 Navigator.geolocation.getCurrentPosition。这个的原理是什么,为什么走了代理还能知道我在北京?用的是 Chrome 卓面版,没走 Wifi,是插的网线。

薛天禄

Geolocation API 的数据来源可能是 GPS、IP 地址、RFID、WiFi、蓝牙 MAC 地址、GSM/CDMA 卡 ID 等。

因为 Geolocation API 是运行在你本地设备上的。所以,在使用 VPN 或代理的情况下,Geo API 仍能获得你准确的 IP 地址信息(除非因为某些因素浏览器获取不到这些信息)。

刚刚测试了下,在使用美国 VPN 的情况下,Safari 仍能获取我准确的地理位置信息。

下面是 W3C 文档的描述:

The Geolocation API defines a high-level interface to location information associated only with the device hosting the implementation, such as latitude and longitude. The API itself is agnostic of the underlying location information sources. Common sources of location information include Global Positioning System (GPS) and location inferred from network signals such as IP address, RFID, WiFi and Bluetooth MAC addresses, and GSM/CDMA cell IDs, as well as user input. No guarantee is given that the API returns the device's actual location.

张宁

这个API里面有一个参数告诉浏览器是否启用高精度设备,所谓的高精度设备包含但不局限于前面所提到的 GPS 和 WIFI,值为 true 的时候,浏览器会尝试启用这些设备,默认指为 true,在这种情况下,浏览器会尽可能地进行更为精确的查询,简单地说,如果用户有可用的 GPS 设备,会返回 GPS 设备的查询结果,IP 是最后的选择,对于移动设备来说,网络接入点(基站)或许成为另一个选择。以大多数人的情况,桌面版的Chrome一般是调用了Wifi数据来定位。