HTML 5 地理位置如何工作



我知道很多人问过这个问题,但我认为我没有找到正确的答案。我的问题是,当您在Firefox的桌面上运行HTML 5地理位置API并单击共享位置时,它会获取您的IP地址,但是它如何知道必须使用哪些无线点才能找到您的距离?我在家里运行该应用程序,我得到了 50 m 的准确度,但我去隔壁的邻居,他有相同的互联网提供商,在他的桌面上,我收到 18 公里外的精度?因此,如果有人可以向我解释这一点或指出我在哪里阅读这些信息会非常有帮助?

谢谢

W3C Geolocation API建立在现有技术之上,并深受Google Gears Geolocation API的影响。事实上,Firefox的地理位置实现使用了Google的网络位置提供商。

Google

Gears Geolocation的工作原理是向网络位置提供商服务器发送一组参数,这些参数可以提示用户的物理位置,默认情况下,该服务器由Google(code.l.google.com)提供。一些参数是移动蜂窝塔及其信号强度的列表,以及检测到的Wi-Fi网络及其信号强度的列表。这些参数封装到 JSON 消息中,并通过 HTTP POST 发送到网络位置提供程序。 根据这些参数,网络位置提供程序可以推断出位置。

"如果您允许网站通过此服务获取您的位置,我们(谷歌)将根据您设备的功能收集离您最近的 wifi 路由器的信息、离您最近的手机信号塔的手机 ID 以及您的 wifi 或手机信号的强度。我们使用这些信息将估计位置返回给 Firefox 浏览器,Firefox 浏览器将估计位置发送到请求网站。对于发送到我们(谷歌)服务的每个请求,我们(谷歌)还会收集您客户的IP地址,用户代理信息和唯一标识符。我们使用这些信息来区分请求,而不是识别您的身份。

资料来源 : http://www.google.com/intl/en/privacy/lsf.html 和 http://en.wikipedia.org/wiki/W3C_Geolocation_API

地理位置 API 允许您与受信任的网站共享您的位置。页面上的 JavaScript 可以使用纬度和经度,而 JavaScript 又可以将其发送回远程 Web 服务器,并执行一些花哨的位置感知操作,例如查找本地企业或在地图上显示您的位置。

在调用getCurrentPosition()期间会发生什么?正如我在本章开头提到的,地理位置支持是可选的。这意味着您的浏览器永远不会强迫您向远程服务器透露您当前的物理位置。用户体验因浏览器而异。在 Mozilla Firefox 中,调用地理位置 API 的 getCurrentPosition() 函数会导致浏览器在浏览器窗口顶部弹出一个"信息栏"。

对getCurrentPosition()的调用将立即返回,但这并不意味着您可以访问用户的位置。回调函数将使用单个参数调用,该参数具有两个属性的对象:坐标和时间戳。时间戳就是计算位置的日期和时间。(由于这一切都是异步发生的,因此您无法提前真正知道何时会发生。用户可能需要一些时间才能阅读信息栏并同意共享其位置。具有专用 GPS 硬件的设备可能需要更多时间才能连接到 GPS 卫星。等等。coords 对象具有纬度和经度等属性,这些属性正是它们听起来的样子:用户在世界中的物理位置。

您可以参考此链接,从我获取上述信息的地方:http://diveintohtml5.ep.io/geolocation.html

HTML5 地理位置 API 在用户设备中使用某些功能(例如全球定位系统 (GPS)、设备的互联网协议 (IP) 地址、最近的移动电话信号塔和用户的输入来检索用户的位置。使用地理位置 API 检索的用户位置几乎准确,具体取决于用于检索位置的源类型。

这里有一个非常好的HTML5地理定位演示(http://html5demos.com/geo)。每当网站尝试使用以下提到的 API 之一获取您的位置时,浏览器都会在调用 API 共享您的位置之前征求我的许可。

地理位置 API 提供以下方法:

  • getCurrentPosition(successCallback, errorCallback, options)

    用于检索用户的当前地理位置。

  • watchPosition(successCallback, errorCallback, options)

    该函数返回一个 watchId,并使用更新的坐标调用 successCallback。当用户移动时,它继续返回更新的位置(如汽车中的GPS)。

  • clearWatch(watchId)

    停止基于提供的 watchId 的 watchPosition() 方法。

示例代码:

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(userPositionSuccess, userPositionError);
} else {
  alert("Your browser does not support geolocation.");
}
function userPositionSuccess(position) {
  alert("Latitude: " + position.coords.latitude + " Longitude: " + position.coords.longitude);
}
function userPositionError() {
  alert("There was an error retrieving your location!");
}

相关内容

  • 没有找到相关文章

最新更新