谷歌地图现在可以在 Firefox 的帮助下精确定位我的街道位置。
我知道这是兼容 HTML 5 的浏览器的一项新功能,并且该位置是通过使用连接的 WiFi 网络的某种功能来获取的(我希望我没有做出任何愚蠢的假设)。
我想知道的是整个过程是如何运作的:
- 为什么只在 HTML 5 中?
- Firefox 为什么/如何要求我与 Google 地图分享我的位置?
- 可以指望的正常精度是多少?
- 如何在我的网站中实现此功能?
提前致谢!
谷歌地图现在可以在 Firefox 的帮助下精确定位我的街道位置。
我知道这是兼容 HTML 5 的浏览器的一项新功能,并且该位置是通过使用连接的 WiFi 网络的某种功能来获取的(我希望我没有做出任何愚蠢的假设)。
我想知道的是整个过程是如何运作的:
提前致谢!
它是如何工作的?
当您在 Firefox 中访问位置感知网站时,浏览器会询问您是否要共享您的位置。
如果您同意,Firefox 会收集有关附近无线接入点和您计算机的 IP 地址的信息,并将通过将此信息发送到Google 位置服务(Firefox 中的默认地理定位服务)来估计您的位置。然后与请求的网站共享该位置估计。(来源)
这些位置有多准确?
准确度因地点而异。在某些地方,地理定位服务提供商可能能够提供几米以内的位置。然而,在其他领域,它可能远不止于此。由于无法保证所提供位置的准确性,所有位置均被视为估计值。(来源)
就我而言,Firefox 报告说我离我的真实位置大约 10 公里。
如何在我的网站中使用此功能?
你会做这样的事情:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
alert(position.coords.latitude + ", " + position.coords.longitude);
// Use the latitude and location as you wish. You may set a marker
// on Google Maps, for example.
});
}
else {
alert("Geolocation services are not supported by your browser.");
}
您可以在此处查看在线演示:Firefox HTML 5 Geolocation Demo(需要可识别地理位置的浏览器,例如 Firefox 3.1b3。)
要使此 API 有用,需要底层主机和 Web 浏览器
a) 允许共享此类信息(注意隐私问题)和
b) 在一定程度上配备(本地或通过它们连接的网络) ) 来读取或估计地理位置。
计算实际位置所涉及的技术和设备涉及以下组合(当然并非全部适用),并且独立于 HTML 5 标准:
因此... -仅
HTML5无法确定地理位置:升级到更新的网络浏览器本身不足以在您的应用程序等中获取地理位置功能。
- 地理位置数据可以在 HTML5 API 之外共享,从而允许 GPS -ready 或 GeoLocation-ready 手机在其他 API 中公开地理定位数据。
HTML5 Geolocation API使用某些功能,例如全球定位系统 (GPS)、设备的互联网协议 (IP) 地址、最近的移动电话塔和用户输入,在用户的设备中检索用户的位置。使用 Geolocation API 检索的用户位置几乎是准确的,具体取决于用于检索位置的源类型。
这里有一个非常好的 HTML5 地理位置演示 ( http://html5demos.com/geo )。每当网站尝试使用以下提到的 API 之一获取您的位置时,浏览器会在调用 API 以共享您的位置之前询问您的许可。
Geolocation 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!");
}