iPhone4 のモバイル Safari と iOS6 の iPhone5 で奇妙な動作に直面しています。
私がしたいこと
を使用して、ブラウザ内のユーザーの位置を高精度で追跡する
geolocation.watchPosition({ enableHighAccuracy: true, maximumAge: 0, callback })
私が直面している問題
通常、デバイスが屋外にあり、晴天の下で移動している場合、GPS 位置の精度と更新周期は非常に良好です。
コールバックに渡されたcoords
オブジェクトは 5 メートルの精度を持ち、正しいヘディング値が与えられ、コールバックが移動すると少なくとも 500 ミリ秒ごとに起動されます。
しかし、同じ条件で(可能な限り)テストしても、監視位置が正確にならない場合があります。
また、更新期間ははるかに長く、ほぼ 30 秒です。
基本的に、この場合、位置の正確な追跡に HTML ジオロケーションは使用できません。
観察
これは、GPS センサーが「ホットスタンバイ」になっていないときに発生するようです。つまり、別のネイティブ アプリによってしばらく (どのくらいの時間かは不明) 使用されていないことを意味します。
ページをリロードし、GPS アクセスを再度許可し、watchPosition を再初期化しても何も変わりませんが、依然として精度が低く、更新が遅くなります。
渡されたオプションを変更し
watchPosition
ても何も起こらないようです。手動修正 1:
- サファリを閉じる
- Maps や GMaps などの別のネイティブ アプリを開く
- ネイティブ アプリでの位置を特定する
- サファリを開く
- GPS 位置はすぐに正確になり、位置の更新は 500 ミリ秒間隔で再起動され、非常に正確です (リロードは必要ありません)。
手動修正 2:
- サファリを閉じる
- 設定パネルを開く
- Wi-Fiを無効にする
- サファリを開く
- 繰り返しますが、問題は修正されました(リロードなし)
結論
coords
問題が発生したときに、コールバックのオブジェクトを調べたところ、次のことがわかりました。
渡された場所はデバイスの実際の位置から遠く離れていますが (> 1km)、accuracy
渡された場所ははるかに小さくなっています (多くの場合 165 メートル)。はheading
決して与えられません。
iPhone の WiFi が無効になっている場合、設定パネルに、WiFi を有効にすると位置特定の精度が向上するというヒントが表示されます (地理コード化された WiFi ネットワークのデータセットでサポートされている AGPS のため)。しかし、モバイル サファリで GPS を使用したい場合、これは正しくありません。実際、それは逆です。
モバイルサファリは、場所を特定するために次のようなことをしているように思えます。
デバイスで GPS が既に有効化されているか、使用されている場合、GPS センサーを使用します (高速で正確な位置更新)。
以前に GPS がアクティブではなく、WiFi が有効になっている場合、デバイスは WiFi データベースのみを使用して位置を取得します。(更新が非常に遅く、正確ではありません)。あるWiFiロケーションから別のWiFiロケーションに更新するだけです. たとえば、連邦道路を運転している場合、現在地はほとんど隣の住宅地にマッピングされているため、これは非常にはっきりとわかります。
以前は GPS がアクティブではなく、WiFi が無効になっている場合にのみ、モバイル サファリは GPS を使用してデバイスの位置を特定します (これも高速かつ正確です)。
質問
誰でも私の問題と私の観察を確認できますか? 以前の iOS バージョンでジオロケーションを使用していましたが、これまでこの問題に直面したことはありませんでした。
これはモバイル サファリの既知のバグですか?これが修正される可能性はありますか? それとも、よりwatchPosition
良い結果を得るために のより良い構成が欠けているだけですか?