我在 iOS6 上的 iPhone4 和 iPhone5 上的移动 Safari 上遇到了奇怪的行为。
我想做的事
高精度跟踪用户在浏览器中的位置,使用
geolocation.watchPosition({ enableHighAccuracy: true, maximumAge: 0, callback })
我面临的问题
正常情况下,当设备在户外、晴空和移动时,GPS位置的准确性和更新周期都非常好。
传递给回调的coords
对象具有 5 米的精度,给出了正确的航向值,并且在移动回调时至少每 500 毫秒触发一次。
但是:有时观察的位置永远不会准确,即使我在相同的条件下(尽可能)测试它。
此外,更新周期要长得多,几乎 30 秒。
基本上,在这种情况下,HTML 地理位置不能用于准确跟踪位置。
观察
这似乎发生了,当 GPS 传感器未处于“热待机”状态时,我的意思是它没有被另一个本机应用程序使用一段时间(不确定多长时间)。
重新加载页面,重新允许 GPS 访问和重新初始化 watchPosition 并没有改变任何东西,仍然是错误的准确性和缓慢的更新。
更改传递给的选项
watchPosition
似乎没有任何作用。手动修复1:
- 关闭 Safari
- 打开另一个本机应用程序,例如地图或 GMaps
- 确定在本机应用程序中的位置
- 打开 Safari
- GPS 位置立即准确,在 500 毫秒内再次触发位置更新,并且非常准确(无需重新加载)。
手动修复2:
- 关闭 Safari
- 打开设置面板
- 禁用 Wi-Fi
- 打开 Safari
- 再次,问题已修复(无需重新加载)
结论
当问题发生时,我查看coords
了回调的对象并检测到以下内容:
即使经过的位置距离设备的实际位置很远(> 1km),accuracy
经过的位置也要小得多(通常在 165 米处)。heading
从来没有给出。
当 iPhone 上的 WiFi 被禁用时,设置面板中会显示启用 WiFi 将提高确定您的位置的准确性(因为 AGPS 由地理编码 WiFi 网络的数据集支持)。但据我所知,如果您想在移动 safari 中使用 GPS,这不是真的。事实上,它的作用恰恰相反。
在我看来,移动 Safari 会做这样的事情来确定位置:
如果 GPS 已在设备上激活/正在使用,则使用 GPS 传感器(快速准确的位置更新)
如果 GPS 之前未激活并且启用了 WiFi,则设备仅使用其 WiFi 数据库来获取位置。(更新很慢,不准确)。它只是从一个 WiFi 位置更新到另一个位置。您可以非常清楚地看到这一点,例如,如果您在联邦道路上行驶,因为您的位置大多会映射到下一个住宅区。
仅当 GPS 之前未激活且 WiFi 已禁用时,移动 Safari 才会使用 GPS 来确定设备的位置(再次,快速且准确)。
问题
谁能证实我的问题和我的观察?我在早期的 iOS 版本中使用过地理定位,但以前从未遇到过这个问题。
它是移动 safari 的已知错误吗,有机会修复吗?还是我只是错过了更好的配置watchPosition
以获得更好的结果?