Androidの位置情報精度を改善して検証する方法

※本ページにはプロモーション(広告)が含まれています。
Androidの位置情報精度を改善して検証する方法

端末で位置がふわふわして期待どおりに動かず困っている気持ち、よくわかります。

この記事を読むと現場で手早くできる測定手順とトラブルの切り分け方がわかり位置精度を着実に良くできるようになります。

項目内容
現場で使える手順スマホで実際に計測してぶれを可視化する段階的な手順を紹介します。
ログと設定のチェック方法端末設定やセンサーログの見方を具体的に示して問題箇所を素早く見つけられるようにします。
開発者目線の対処例アプリ側でできる補正や影響のある要因の切り分け方と簡単なコード例を紹介します。

手順は図や実例を使って丁寧に説明しますので気軽に試してみてください。

Android博士

焦らず落ち着いて一つずつ確認すれば必ず改善の糸口が見つかりますから安心して最後までやってみてくださいね。

目次

Android端末で位置情報の精度を実測して問題を見つける方法

Android端末で位置情報の精度を実測して問題を見つける方法

位置情報がふらつくとアプリの動きが不思議になって戸惑いますよね。ここではAndroid端末で実際に位置精度をはかり原因を見つける流れをやさしく案内します。

端末で直接はかる方法とエミュレータで再現する方法があり、それぞれ手早く確認できるポイントがあります。まずはどの方法で試すか決めて、順番にチェックしていくと効率が良くなります。

  • 実機で位置情報をログしてaccuracyを観察する。
  • エミュレータで緯度経度やGPXを注入して再現する。
  • 屋外と屋内で条件を変えて結果を見比べる。

Android実機で精度を測る手順

Android実機で精度を測る手順

実機での確認は最も現実に近いテストです。まず端末の位置情報設定を高精度にしてからアプリを起動し、位置情報のaccuracyを定期的にログするようにしておくと変化がつかみやすくなります。

屋外で受信が良い状態と建物内の狭い場所での結果を比べると原因を切り分けられます。ログに時間情報を付けておくと衛星の捕捉状況や環境ノイズの影響が見えてきます。

端末の位置情報設定を高精度に切り替えてアプリでaccuracyをログする

手順
位置情報を高精度に切り替える

設定から位置情報を開き位置の方法で高精度を選んでください。これでWiFiやモバイル回線も位置取得に使われます。

手順
アプリでaccuracyをログする

Location.getAccuracy()の値を秒ごとなど定期的にログに出すようにします。ログは時間とともにどう変わるかを見ると分かりやすいです。

手順
屋外と屋内でデータを取る

それぞれ数分ずつ記録して平均とばらつきを確認してください。問題のある場面を切り出して原因を考えていきます。

MacのAndroidエミュレータで精度を測る手順

MacのAndroidエミュレータで精度を測る手順

Mac上のAndroidエミュレータは位置の注入が手軽で再現性の高いテストができます。AndroidStudioのEmulatorから位置を送ってアプリのaccuracyを確認すると条件を固定して試せるので原因のあたりを付けやすくなります。

GPXやKMLを読み込んで移動軌跡を流すと移動時のふらつきも試せます。仮想環境で複数パターンを試してから実機で確かめる流れが効率的です。

EmulatorのExtended Controlsで位置を注入してアプリのaccuracyを確認する

手順
ExtendedControlsを開く

Emulatorの右上メニューからExtendedControlsを開きます。ここで位置に関する設定画面を表示できます。

手順
位置を注入する

緯度経度を手入力するかGPXファイルを読み込んで適用ボタンを押してください。これでエミュレータに指定の位置が送られます。

手順
アプリ側でaccuracyを確認する

位置を注入しながらアプリのログに出るaccuracyを見て変化を確認してください。複数地点や軌跡で繰り返すと傾向が見えてきます。

AndroidアプリでFusedLocationProviderと実践的フィルタで精度を改善する方法

AndroidアプリでFusedLocationProviderと実践的フィルタで精度を改善する方法

位置情報のブレはアプリではよくある悩みです。FusedLocationProviderを使うとGPSやWiFi,携帯ネットワークの情報をうまく組み合わせて位置を取得できますが、そのままだとノイズやジャンプが残りやすいです。

ここでは優しいフィルタと現場で使える設定パターンを紹介します。優先度と更新間隔の調整,受信位置の精度チェック,短期的な平滑化を組み合わせることで実用的に精度を上げられます。

  • 優先度を必要に応じて厳しくする(PRIORITY_HIGH_ACCURACYなど)。
  • foregroundとbackgroundで更新間隔を変える(例1000〜5000msと長め)。
  • 受信したLocationのaccuracyとtimestampで悪いものを捨てる。
  • 移動時は加重平均やバッファを使って平滑化する。

優先度と更新間隔を設定する実践パターン

優先度と更新間隔を設定する実践パターン

優先度と更新間隔は精度と電池消費の主な切り替えスイッチです。高精度にするとGPSを頻繁に使うため電池消費が増えますが、歩行追跡やナビでは精度向上の恩恵が大きいです。

よく使うパターンは前景ではintervalを1000〜5000msにしてPRIORITY_HIGH_ACCURACYを使い、バックグラウンドではintervalを長くしてPRIORITY_BALANCED_POWER_ACCURACYやPRIORITY_LOW_POWERに落とすことです。

アプリのLocationRequestでPRIORITY_HIGH_ACCURACYとintervalをコードで設定する

手順
LocationRequestを作る

LocationRequest.createでインスタンスを作成します。ここで優先度とintervalを設定する下地を作ります。

手順
優先度を設定する

setPriorityにPRIORITY_HIGH_ACCURACYを指定してGPSを優先するようにします。

手順
intervalを調整する

setIntervalで希望の更新間隔,setFastestIntervalで最短間隔を指定して電池と応答性のバランスを取ります。

取得結果をフィルタして安定させるパターン

取得結果をフィルタして安定させるパターン

受け取った位置はそのまま使うと突然のジャンプやノイズが気になります。まずはaccuracyやtimestampで粗いフィルタをかけて明らかに悪い値を取り除くのが有効です。

そのうえで短期的な平滑化を入れると安定します。単純な移動平均や重み付き平均で効果が出やすく,必要に応じてカルマンフィルタなどを使うと滑らかになります。

受け取ったLocationのaccuracyとtimestampで誤差の大きい位置を破棄する実装

  1. accuracyが50mより大きいものは破棄する。
  2. 受信時刻が現在時刻より5秒以上古いものは破棄する。
  3. 計算した速度が物理的にあり得ない値なら破棄する。
  4. 通過した値はリングバッファに入れて移動平均や重み付き平均で平滑化する。

モック位置で自動テストと検証を行う方法(Android)

モック位置で自動テストと検証を行う方法(Android)

モック位置を使うと位置に依存する機能を安定してチェックできます。エミュレータで経路を再生して自動テストに組み込む方法と、実機にモック位置アプリを入れて動きを確認する方法のどちらも現場でよく使われます。

再現性を高めるにはGPXやKMLにタイムスタンプを入れて決まった経路を再生することが肝心です。ログはlogcatやdumpsysで取得してアプリ側と端末側の挙動差を比べると原因の当たりがつきやすくなります。

Android博士

まずは短いルートひとつで試してみましょう。うまくいったら少しずつ条件を変えていけば不具合の再現がぐっと楽になりますよ。

エミュレータで移動シナリオを再生する手順

エミュレータで移動シナリオを再生する手順

エミュレータではAndroidStudioのExtendedControlsからGPXやKMLを読み込めます。経路を再生すると端末はその座標を受け取りアプリは移動したように振る舞います。

再生中はlogcatで位置更新ログを監視して更新頻度や精度を確認します。速度やタイムスタンプを変えて現実に近い条件を試すとバグが見つかりやすくなります。

GPXやKMLをEmulatorに読み込んで経路を再生しログを取得する

手順
GPXやKMLを準備する

緯度経度とタイムスタンプを含めたGPXまたはKMLを用意します。まずは短いテストルートで動作確認します。

手順
エミュレータに読み込む

AndroidStudioのExtendedControls→Locationでファイルを読み込み再生を開始します。エミュレータのコンソールでgeo系コマンドを使う簡易テストも便利です。

手順
ログを取得する

logcatでアプリ側のログを取得しながらdumpsysで端末の位置プロバイダ状態を確認します。必要ならログをファイルに保存して後で解析します。

実機でモック位置アプリを使ってシナリオを検証する手順

実機でモック位置アプリを使ってシナリオを検証する手順

実機ではモック位置アプリを使うと現実に近い環境で動作を確認できます。開発者向け設定でモック位置を許可したうえでテスト用のアプリを指定し挙動を観察します。

テスト中は位置プロバイダの優先度やバッテリー最適化設定に注意してください。テスト後は必ずモックアプリの指定を解除して普段の環境に戻すと安心です。

開発者オプションでモック位置アプリを指定して実機で挙動を確認する

手順
開発者オプションを有効にする

端末のビルド番号を連打して開発者オプションを有効にします。最新のOSでは設定画面に隠れていることがあるので確認してください。

手順
モック位置アプリを指定する

インストールしたモック位置アプリを開発者オプションのモック位置アプリ欄から選びます。選んだら実際にアプリで位置を送ってみてください。

手順
動作を確認する

アプリを起動して位置が期待どおり更新されるかを見ます。問題があればlogcatでログを取り原因を絞り込みます。

よくある質問

よくある質問
位置情報の精度はどうやって確かめればよいですか

屋外の見通しが良い場所で端末を固定し、数分間連続でサンプルを取るのが基本です。Location.getAccuracyで得られるメートル値を複数集めて中央値を使うとぶれが小さくなります。ログにはタイムスタンプとプロバイダを必ず残してください。

GPSとWi-Fiや基地局の違いは何ですか

GPSは衛星からの信号を使うので屋外で安定して数メートルの精度が出やすいです。Wi-Fiや基地局は屋内で有利ですが場所によって精度が大きく変わります。アプリでは優先度を高精度にして両方の情報をうまく使うとよいです。

測るときの端末設定で注意すべきことは何ですか

バッテリーセーバーは精度を落とすのでオフにしてください。位置情報モードは高精度にし、Wi-FiとBluetoothスキャンはオンにすると屋内での安定度が上がります。

モック位置を使う場合の扱い方はどうすればよいですか

テストでモックを使うと実データと混ざるので、ログにモックかどうかのフラグを残してください。開発用では積極的に使って挙動を確かめ、本番では無効にする運用が安全です。

サンプルの集計方法でおすすめはありますか

単純平均は外れ値に弱いので中央値やトリム平均を使うと安定します。サンプル間隔は1秒から5秒程度が扱いやすく、サンプル数は数十件を目安にすると傾向が掴みやすいです。

エミュレータでの結果は信頼できますか

エミュレータは固定位置やシミュレーションを使うため実機とは挙動が異なることが多いです。必ず実機で屋外と屋内の両方を確かめて、実際の環境差を把握してください。

AndroidのどのAPIを重点的に見るべきですか

まずLocation.getAccuracyとgetProviderをチェックしてください。さらにGNSSで衛星数や信号強度が取れるAPIを使うと、精度が悪い原因を見つけやすくなります。

まとめ

まとめ

ここまで読んでくれてありがとう。Android端末で位置情報の精度を実際に測り原因を見つけ改善するコツをやさしくまとめました。端末の位置設定や権限、周囲の建物や電波の状態、それからアプリの位置取得のやり方が精度に大きく影響します。

  1. 端末設定を整える。GPSとWi-Fiを有効にして高精度モードを選び、省電力設定や位置情報共有設定を見直す。
  2. 環境を工夫する。屋外や窓際で測定して建物や金属の影響を避ける、同じ場所で複数回測る。
  3. アプリの取得方法を見直す。適切な更新間隔と移動フィルタを使い、受け取るデータをログに残して傾向をつかむ。

最後に、APIが返すaccuracy(精度)値と実際のズレを見比べてログを取り、複数回の測定で傾向をつかんでください。同じ端末で条件を変えながら試すと、どの対策が効いているか見つけやすくなります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次