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