关于HTML 5中的地理定位

Google地图现在可以通过Firefox帮助精确定位我的位置。

我知道这是HTML 5兼容浏览器的一个新function,并且通过使用连接的WiFinetworking的某种function(我希望我没有做任何愚蠢的假设)来获取位置。

我想知道的是,整个过程如何正确运作:

  • 为什么只在HTML 5中?
  • 为什么/ Firefox如何要求我与Google地图分享我的位置?
  • 什么是一个可以依靠的正常精度?
  • 我如何在我的网站中实现这个function?

提前致谢!

它是如何工作的?

当您访问Firefox中的位置感知网站时,浏览器会询问您是否要共享您的位置。

如果您同意,Firefox会收集有关附近无线接入点和计算机IP地址的信息,并将这些信息发送给Google位置服务 (Firefox中的默认地理位置服务),以获得您所在位置的估算值。 该位置估计然后与请求的网站共享。 ( 来源 )

这些地点有多准确?

精确度因地点而异。 在某些地方,地理位置服务提供商可能能够提供几米之内的位置。 但是,在其他领域,这可能远不止于此。 所有地点均被视为估计数,因为不能保证所提供地点的准确性。 ( 来源 )

就我而言,Firefox报告说我离我的真实位置大约10公里。

如何在我的网站中使用此function?

你会做这样的事情:

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地理位置演示 (需要支持地理位置的浏览器,如Firefox 3.1b3)。

HTML5提供了一个API

这允许web浏览器(以及因此web应用程序的服务器端)以标准,统一的方式查询诸如速度(如果相关)的位置和相关信息。

主机及其networking浏览器提供计算/估计地理位置的“设备”

为了使这个API有用,需要底层主机和网页浏览器
a)允许分享这些信息(注意隐私问题)和
b)有些装备(无论是在本地还是通过他们所连接的networking)阅读或估算地理位置。

计算实际位置所涉及的技术和设备涉及以下的组合(当然不是全部适用),并且独立于HTML 5标准

  • GPS设备(现在有很多电话都有)
  • 手机networking级别的路由信息
  • IP地址/ ISP路由信息
  • Wifi路由器信息
  • 固定数据,手动input(对于位于固定位置的电脑)

因此…
单独的 HTML5无法确定地理位置:升级到较新的Web浏览器本身不足以在您的应用程序中获取地理位置function等。
– 地理定位数据可以在HTML5 API之外共享,从而允许GPS就绪或准备好地理位置的手机在其他API中公开地理定位数据。

HTML5地理定位API使用用户设备中的某些function,例如设备的全球定位系统(GPS),互联网协议(IP)地址,最近的移动电话塔以及来自用户的input来检索用户的位置。 根据用于检索位置的源的types,使用地理定位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!"); }