HTML 5 地理定位是如何工作的?

6
我知道很多人都问过这个问题,但我认为我没有找到一个合适的答案。我的问题是,当您在Firefox桌面上运行HTML 5地理位置API并单击共享位置时,它会获取您的IP地址,但它如何知道要使用哪些无线点,以便找到您的距离呢? 我在家里运行应用程序,获得50米的准确度,但我去隔壁邻居家,他使用相同的互联网服务提供商,在他的桌面上,我却获得了18公里的准确度? 如果有人可以向我解释这个问题,或者指导我阅读相关信息,将非常有帮助。
谢谢。

2
可能是HTML5地理位置特性如何工作?的重复问题。 - robertc
可能是HTML5地理位置如何工作?的重复问题。 - Jeshurun
3个回答

0

地理位置 API 允许您与可信任的网站共享您的位置。页面上的 JavaScript 可以获取纬度和经度,并将其发送回远程 Web 服务器,从而可以执行诸如查找本地企业或在地图上显示您的位置等高级位置感知操作。

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

调用getCurrentPosition()方法将立即返回,但这并不意味着你可以访问用户的位置。回调函数将带有一个参数,一个具有两个属性(coords和timestamp)的对象:timestamp是计算位置的日期和时间。 (由于所有这些都是异步发生的,你事先无法知道何时会发生。 用户可能需要一些时间来阅读信息栏并同意共享他们的位置。 带有专用GPS硬件的设备可能需要更长时间才能连接到GPS卫星,等等。) coords对象具有像纬度和经度这样的属性,它们正是它们听起来的意思:用户在世界上的物理位置。

您可以参考我获取以上信息的链接: http://diveintohtml5.ep.io/geolocation.html


0

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

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

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

来源:http://www.google.com/intl/zh-CN/privacy/lsf.htmlhttp://zh.wikipedia.org/wiki/W3C_Geolocation_API

0

HTML5地理位置API使用某些功能来获取用户的位置,例如全球定位系统 (GPS)、设备的Internet Protocol(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!");
}

你的演示页面在桌面浏览器上无法正常运行,我怀疑它已经过时了。如果你有更新的版本,请提供给我。 - Skyler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接