HTML 5 Geolocation如何工作?

| 我知道很多人都问过这个问题,但我认为我找不到合适的答案。我的问题是,当您在firefox中的桌面上运行HTML 5 Geolocation API并单击“共享位置”时,它将获取您的IP地址,但是它如何知道必须使用哪个无线点才能找到您的距离?我在家中运行该应用程序,准确度为50 m,但我隔壁去找有相同互联网提供商的邻居,而在他的桌面上,我收到的准确度为18 km?因此,如果有人可以向我解释这一点或向我指出在何处阅读此信息会很有帮助? 谢谢     
已邀请:
W3C Geolocation API建立在现有技术的基础上,并受到Google Gears Geolocation API的严重影响。实际上,Firefox的Geolocation实施使用Google的网络位置提供程序。 Google Gears Geolocation的工作原理是,向网络位置提供商服务器发送一组参数,这些参数可以提示用户的实际位置,默认情况下由Google(code.l.google .com)。其中一些参数是移动蜂窝塔及其信号强度的列表,以及检测到的Wi-Fi网络及其信号强度的列表。这些参数被封装到JSON消息中,并通过HTTP POST发送到网络位置提供程序。基于这些参数,网络位置提供程序可以推断出位置。 \“如果您允许网站通过此服务获取位置,则我们(google)会根据您设备的功能收集与您最近的wifi路由器的信息,与您最近的蜂窝塔的小区ID以及wifi或手机信号的强度。我们使用此信息将估算的位置返回到Firefox浏览器,然后Firefox浏览器将估算的位置发送到请求的网站。对于发送到我们(google)服务的每个请求,我们(google)还收集IP地址,用户代理信息和客户的唯一标识符。我们使用此信息来区分请求,而不是识别您的身份。\“ 资料来源:http://www.google.com/intl/zh-CN/privacy/lsf.html和http://en.wikipedia.org/wiki/W3C_Geolocation_API     
地理位置API使您可以与受信任的网站共享位置。网页上的JavaScript可以使用经度和纬度,而经纬度又可以将其发送回远程Web服务器,并可以进行精美的位置感知操作,例如查找本地商家或在地图上显示您的位置。 在调用getCurrentPosition()期间会发生什么?正如我在本章开始时提到的那样,地理位置支持是可选的。这意味着您的浏览器将永远不会强迫您向远程服务器显示当前的物理位置。用户体验因浏览器而异。在Mozilla Firefox中,调用地理位置API的getCurrentPosition()函数将导致浏览器在浏览器窗口顶部弹出“信息栏”。 对getCurrentPosition()的调用将立即返回,但这并不意味着您可以访问用户的位置。回调函数将用一个参数调用,一个具有两个属性的对象:coords和timestamp。时间戳就是计算位置的日期和时间。 (由于这一切都是异步发生的,因此您无法真正提前知道何时发生。用户阅读信息栏并同意共享他们的位置可能需要一些时间。配备专用GPS硬件的设备可能需要更多时间以连接到GPS卫星等。)coords对象具有诸如经度和纬度之类的属性,它们的确切含义是:用户在世界上的实际位置。 您可以从我获取上述信息的地方引用此链接: http://diveintohtml5.ep.io/geolocation.html     
HTML5地理位置API使用某些功能(例如全球定位系统(GPS),设备的Internet协议(IP)地址,最近的手机塔以及用户设备中的用户输入)来检索用户的位置。使用Geolocation API检索的用户位置几乎是准确的,具体取决于用于检索位置的来源类型。 这里有一个非常好的HTML5地理位置演示(http://html5demos.com/geo)。每当网站尝试使用以下提到的API之一来获取您的位置信息时,浏览器都会在调用API共享您的位置信息之前询问我您的许可。 地理位置API提供以下方法: getCurrentPosition(successCallback,errorCallback,选项) 用于检索用户的当前地理位置。 watchPosition(successCallback,errorCallback,选项) 该函数返回一个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!\");
}
    

要回复问题请先登录注册