HTML5地理位置与Google Maps地理位置API的比较

28

我有些困惑,为什么我应该选择使用有限访问的Google Maps定位API而不是HTML5中免费且(显然)无限制的navigator.geolocation功能?

据我所知,谷歌版本的唯一优势是它对IE8等浏览器的更好支持。我错过了什么重要的东西吗?还是两者之间几乎没有区别?


进一步调查发现,在Chrome中使用navigator.geolocation实际上会调用Google API获取信息(由6年前的此答案支持)。这就引出了一个问题,它仍然受到限制吗?如果是,那么在什么时期内受到限制并且限制是多少?

3个回答

24

谷歌地图地理定位 API 是一个 HTTP 端点,接受用户提供的关于附近 Wifi 网络和蜂窝塔的 JSON 数据,并生成用户位置的估计值。

HTML5 的 navigator.geolocation 对象提供了浏览器 API,执行一组操作,然后生成用户位置的估计值。来自W3C 地理定位规范:

API 本身对底层的位置信息来源是不可知的。常见的位置信息来源包括全球定位系统 (GPS) 和从网络信号(如 IP 地址、RFID、WiFi 和蓝牙 MAC 地址以及 GSM/CDMA 小区 ID)推断出的位置,以及用户输入。

navigator.geolocation 函数可以利用浏览器应用程序中可用的任何信息,包括设备的 GPS 硬件(如果有的话)中的任何信息。当然,它也可以利用可以访问到的任何第三方 Web API(包括可能的 Google 地图地理定位 API)。没有指定必须或必须使用的方法或输入;浏览器可以尽其所能进行位置估计。具体实现决定了它的效果好坏,或者浏览器可能(如您所建议的)实际上直接使用 Google 的 API。

简而言之,谷歌地图 API 是一种询问“基于这些蜂窝和 WIFI 信息,告诉我我在哪里”的方法。HTML5 API 是告诉浏览器,“你可以访问互联网和所有可用于我的设备的物理输入;以某种方式找出我的位置。”

如果没有GPS,浏览器可能会将其地理定位工作外包给像Google这样的第三方服务,这并不让我感到惊讶。浏览器供应商通常只关注制造浏览器,而不是编写一个解决将蜂窝数据/Wifi数据转换为位置信息的强大服务的程序。此外,还需要大量的有关各种基站和Wifi SSID位置的地理空间数据。在本地保存所有信息会使浏览器变得臃肿,并且任何尝试由供应商远程托管信息的努力都实际上等同于建立与Google已知良好服务竞争的业务。


那么,Google API的优势实质上在于您确切地知道它是如何被实现的?而HTML5版本在其实现方面更加...模糊...但最终会返回一个相当有效的结果? - Liam
2
HTML5 API 可能会更多地利用本地物理来源(如 GPS)以获得更准确的信息,也可能不会,这取决于浏览器实现和硬件可用性(即您的设备是否真的有 GPS)。很难说这是否使它比 Web API 更好或更差。实现可能因浏览器(和硬件可用性)而异,而 Google 将为您提供一致的独立于浏览器的结果,所以我想这也是一个优点。 - apsillers
@Liam 我在结尾添加了一个简短的段落:地理定位是一个难以解决的问题,厂商们对此不感兴趣,而且这个问题需要大量关于基站和Wifi网络的真实空间数据。 - apsillers
有办法确定设备位置的精确度吗?假设设备在建筑物内,开启了权限并打开了GPS,他的位置会有多精确?几米范围内? - Wrapper
@Wrapper 我认为这个问题本身就很好,但简短的答案是(对于navigator.geolocation API),coords对象还有一个accuracy属性,用于表示坐标的可能误差,单位为米(即位置可能偏离的半径)。 - apsillers

7
HTML5 API会触发一个模态弹窗,询问用户是否同意,而Google Maps Geolocation API则会绕过此步骤。两种方法收集位置信息的方式非常相似,尽管HTML5有更深入的范围,取决于浏览器的实现方式。
例如,HTML5 - https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation 例如,Google Maps Geolocation - http://webkay.robinlinus.com/ 另请参考:https://developers.google.com/maps/articles/geolocation Maps API可能会为不支持HTML5的旧浏览器或非浏览器客户端(本机等)提供选项。
Maps API在免费每日配额之后将收费。
在大多数情况下,应优先考虑HTML5方法。

1
我只想提醒您,如果这是您所需的全部内容,那么不需要选择付费的Google服务-该服务的规范基本上已经内置在浏览器中。
然而,Google Maps API提供了比这更多的功能,例如逆地理编码和可用于地图的完整视觉工具功能集。
因此,获取用户的纬度/经度是“免费”的-不需要单独为该功能付费。

嗨凯尔,我有点晚参加派对。你能告诉我谷歌地图API与浏览器的准确性如何(假设使用最新的浏览器并启用了所有权限)?我的使用情况是,如果我有一个移动网络应用程序,并且在一个购物中心的房间里有5个用户在使用它,它能够获取到这5个用户的精确位置吗,误差在几米之内? - Wrapper
1
我不能确定地告诉你,不过我可以告诉你一般情况下在商场里GPS是无法使用的,你只能依靠Wi-Fi数据来进行最佳猜测。你所问的基本上是行不通的,除非你能够原生地编写手动Wi-Fi三角定位代码——这将是疯狂的,即使那样,在浏览器中也绝对不会发生。 - Kyle Baker

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