HTML 5 中关于地理定位的内容

28

在Firefox的帮助下,Google地图现在可以以街道精度定位我的位置。

我知道这是HTML 5兼容浏览器的新功能,位置是通过使用连接的WiFi网络的某种特性获取的(希望我没有做出任何愚蠢的假设)。

我想知道的是整个过程的确切工作方式:

  • 为什么只有在HTML 5中才能使用?
  • 为什么/如何Firefox要求我与Google Maps分享我的位置?
  • 人们通常可以依靠什么样的精度?
  • 我如何在我的网站上实现此功能?

提前感谢!


5
已经四月一日了吗?:) 街道精度?在一台静止的电脑上?你一定在开玩笑。 - Pekka
2
没有办法,这似乎是真的存在。http://arstechnica.com/old/content/2008/10/google-gears-enhances-geolocation-with-wifi-positioning.ars - Pekka
1
@Pekka:我告诉过你!=)而且我甚至不知道是否安装了Gears。 - Alix Axel
2
似乎不是特定于HTML的,但是HTML 5似乎提供了一个接口:http://html5demos.com/geo。请参阅此处的w3c规范:http://dev.w3.org/geo/api/spec-source.html。 - Pekka
3个回答

35

它是如何工作的?

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

如果您同意,Firefox会收集附近无线接入点和您计算机的IP地址的信息,并通过将此信息发送到Google Location Services(Firefox中默认的地理位置服务)来获取您的位置的估计值。然后将该位置估计值与请求的网站共享。 (Source)

这些位置有多精确?

精度因地而异。在某些地方,地理位置服务提供商可能能够提供几米以内的位置。但在其他地区可能会更多。所有位置都应被视为估计值,因为无法保证所提供位置的准确性。(Source)

在我的情况下,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)。


1
我知道这只是一个例子,但请不要像那样弹出alert();消息。有很多网站会弹出“您需要安装最新的Flash / Silverlight /任何其他内容”之类的消息,这既愚蠢又让人非常烦恼,尤其是当我使用不支持它们的设备时。 - Olly Hodgson
6
@Olly:我完全同意。然而,在这种情况下,我认为alert()方法是一种伪代码函数。每个人都知道alert()的含义,因此它提高了可读性的效果……我希望每个人都明白,它永远不应该像这样使用(或者可能根本不应该使用!)。 - Daniel Vassallo
@DanielVassallo,那么Firefox实现的w3c的“地理位置API”使用的是“Google的位置服务”?.. 而且,Chrome也必须使用相同的服务。 因此,所有人都在使用“Google的位置服务”?? - Vivek Chandra

14

HTML5提供了一个API,可以让Web浏览器(以及Web应用程序的服务器端)以一种标准、统一的方式查询位置和相关信息,例如速度(如果相关)。


主机及其Web浏览器提供“设备”,计算/估计地理位置本身

为了使用这个API,需要底层主机和Web浏览器
  a) 允许共享此类信息(注意隐私问题)
  b) 能够在本地或通过连接到的网络上读取或估计地理位置。

计算实际位置涉及以下组合的技术和设备(当然不是所有都适用),并且与HTML 5标准无关:

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

因此......
- 单独使用HTML5无法确定地理位置:仅升级到新的Web浏览器还不足以在应用程序中获得地理位置功能等。
- 地理位置数据可以在HTML5 API之外共享,从而使支持GPS或GeoLocation的手机在其他API中公开地理位置数据。


0

HTML5地理定位API使用一些特定的功能,例如全球定位系统(GPS)、设备的Internet协议(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!");
}

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