iOS6 Mobile Safari:geolocation.watchPosition的准确性和更新周期

时间:2013-03-05 21:28:32

标签: javascript ios html5 geolocation mobile-safari

我在iOS6上的iPhone4和iPhone5上的移动Safari上面临一种奇怪的行为。

我想做什么

使用

精度跟踪用户在浏览器中的位置
geolocation.watchPosition({ enableHighAccuracy: true, maximumAge: 0, callback })

我正面临的问题

通常情况下,当设备在室外,晴朗的天空和移动时,GPS位置的准确性和更新周期非常好。

传递给回调的coords对象的精确度为5米,给出了正确的标题值,并且在移动时至少每500毫秒触发一次回调。

但是:即使我在相同的条件下(尽可能地)测试它,有时看到的位置也不会准确。

此外,更新周期更长,差不多30秒。

基本上,在这种情况下,HTML地理位置不能用于准确跟踪位置。

观察

  • 这似乎发生了,当GPS传感器未处于“热备用”状态时,我的意思是它在一段时间内没有使用(不确定多长时间)由另一个原生应用程序使用。

    < / LI>
  • 重新加载页面,重新允许GPS访问并重新初始化watchPosition不会改变任何内容,仍然会导致准确性不佳和更新缓慢。

  • 更改传递给watchPosition的选项似乎没有做任何事情。

  • 手动修复1:

    • 关闭Safari
    • 打开另一个原生应用,例如Google地图或GMaps
    • 确定原生应用中的位置
    • 打开Safari
    • GPS位置立即准确,位置更新在500ms周期内再次触发,并且非常准确(无需重新加载)。
  • 手动修复2:

    • 关闭Safari
    • 打开设置面板
    • 禁用Wi-Fi
    • 打开Safari
    • 同样,问题已解决(没有重新加载)

结论

当问题发生时,我查看了回调的coords对象并检测到以下内容:

即使通过的位置远离设备的实际位置(> 1km),通过的accuracy也要小得多(通常在165米处)。永远不会给出heading

当iPhone上的WiFi被禁用时,设置面板中会显示启用WiFi将提高确定位置的准确性(因为地理编码WiFi网络数据支持AGPS)。但据我所知,如果你想在手机游戏中使用GPS,那么是真的。事实上,它恰恰相反。

在我看来,移动safari做了这样的事情来确定位置:

  • 如果GPS已经在设备上激活/使用,它会使用GPS传感器(快速准确的位置更新)

  • 如果GPS之前未启用且启用了WiFi,则设备会使用其WiFi数据库来获取该位置。 (非常慢的更新,不准确)。它只是从一个WiFi位置更新到另一个。你可以清楚地看到这一点,例如如果你在联邦道路上开车,因为你的位置大多被映射到下一个住宅区。

  • 以前GPS未激活且WiFi 禁用移动版Safari将使用GPS确定设备的位置(同样,快速准确)。

问题

有人可以证实我的问题和观察结果吗? 我在之前的iOS版本中使用过地理位置,但之前从未遇到过这个问题。

这是一个已知的移动野生动物园的错误,是否有机会解决这个问题?或者我错过了watchPosition的更好配置以获得更好的结果?

2 个答案:

答案 0 :(得分:0)

很多人都描述过类似的问题,包括我自己。在本次讨论中,我已经在第5页及以后(作为alstorp)描述了我的问题https://discussions.apple.com/thread/4313850?start=45&tstart=0 阅读并查看它是否与您的问题相符。

问题在于,据我所知,Apple尚未证实这一点。他们正在努力修复它吗?它真的在他们身边吗?这真的是个bug吗?因此我们不知道何时/是否会被修复......

有没有人在iOS 6中没有基于浏览器的地理定位问题? (即使在不同情况下进行多次测试后)。

您是否广泛测试过您的修补程序?我的经验是,这种类型的修复在某些情况下有所帮助,但不是所有时间(或长时间)。如果它们可靠地为您工作将会非常有趣......

(同时查看IOS6 geolocation watchPosition Callbacks fail iOS 6 breaks GeoLocation in webapps (apple-mobile-web-app-capable)

答案 1 :(得分:0)

  

有人可以证实我的问题和观察结果吗?我在之前的iOS版本中使用过地理位置,但之前从未遇到过这个问题。

我尝试了watchPosition(onGeoSuccess,onGeoFail,{enableHighAccuracy:true});在我的网络应用程序中使用我的iPhone(iOS 7.0.2)。

随着WiFi的准确性非常糟糕,有时一英里。随着WiFi关闭精度接近完美,偶尔会有几百英尺的差异。

我还没有测试看看是否有助于让GPS在捕获点之间运行,或者如果最好将它关闭,直到你处于下一个捕获点并让watchPosition()函数稳定下来。