为什么移动Safari中的地理定位远不如原生应用中的准确?



我正在使用Geolocation API(通常称为"HTML5 Geolocation")来获取用户的当前位置。如果你移动,它会自动更新(每秒钟检查一次)。主要针对iphone(目前正在测试),但应该也适用于其他移动设备。您可以在这里看到一个示例:

http://jsbin.com/uyoyey/

当我(在室外)测试时,您可以在管道后的每条线上看到的精度约为3000(米)。这显然很糟糕。我iPhone上的本地地图应用程序要精确得多。大概在10到30米左右(根据地图和我所站的位置)。在另一个应用程序中检查长值和后期值也会得到更准确的数字。

当我现在切换回Safari时,精度跳到10到30,但在一秒钟后恢复到3000。

问题:

  1. 你能复制这个行为吗?
  2. 为什么这个位置那么远?
  3. 是否有通过地理定位和CLLocationManager(我认为是由本地应用程序使用)访问GPS-Data之间的差异?

谢谢!

更新1:


当我在其他地方(大城市)测试时,我得到了更准确的结果,但我现在想知道本地应用程序是否也使用运动跟踪来更新位置。这就解释了为什么地图应用程序可以跟踪我的脚步,而Safari却不能识别它们。

更新2 (03.08.11):
在与彼得-保罗·科赫的一封电子邮件中,他写道,Safari主要使用wifi进行地理定位,以延长电池寿命。这也许可以解释这些差异。我还是不太清楚到底是怎么回事。

Old:以下是在android 2.2, iOS4和iOS5上关闭wifi的情况下getCurrentPosition功能的测试结果。

在android浏览器和iOS 4 Safari上,我得到的GPS精度水平在1000米量级。但在iOS 5 Safari上,我可以将精度降至5米。似乎GPS在iOS 5上有所改进,但它只占市场的一小部分。总的来说,开发依赖精确GPS读取的web应用程序仍然不是很好。

我在测试中发现的东西- android浏览器GPS在大约70次调用getCurrentLocation后停止响应。这可能是设备特有的问题,但这是基于浏览器的GPS功能的另一个不可靠因素。

更新:我正在测试watchPosition函数调用,它在Android和iOS4上产生了更准确的结果。这是一条正确的路……示例代码:http://jsbin.com/ugebif/3

  1. 我不能,但只是因为懒惰:)

  2. 我不确定,但我怀疑Safari正在使用iPhone位置感知的非gps部分。

  3. 再一次,我不确定,但是Dive into HTML5提到HTML5地理定位API允许你传递一个PositionOptions对象到getCurrentPosition,并且这个对象有一个enableHighAccuracy属性。

    将其设置为true可能使Safari使用与CLLocationManager相同的高精度定位。(虽然我自己没有这方面的经验。)

最新更新