Upgrade to Pro — share decks privately, control downloads, hide ads and more …

スマホアプリで位置情報を取得してみよう(iOS成分多め)

Haruki Inoue
December 19, 2022

 スマホアプリで位置情報を取得してみよう(iOS成分多め)

MIERUNE_Meetup_mini_2022-12-15の発表資料です。

https://mierune.connpass.com/event/266903/

Haruki Inoue

December 19, 2022
Tweet

More Decks by Haruki Inoue

Other Decks in Technology

Transcript

  1. 自己紹介 井上 晴稀 (いのうえ はるき) 25歳 マルティスープ株式会社 iOSアプリエンジニア iField 位置情報を用いた動態管理アプリを作ってます

    • 1997年  愛知県名古屋市生まれ • 1999年? 愛知県豊橋市に引っ越し • 2021年  千葉県流山市に引っ越して上京 @kyotonagoya1476 場所の履歴書 休日は電車などを使って色んな場所に行っています
  2. 受信機 (スマホ) GPS衛星が送信する情報 • 時刻データ • 衛星の軌道位置 受信機(スマホ)が位置情報を算出 GPS衛星が送信する情報に 受信機(スマホ)の位置情報は存在しない

    GPSとスマートフォンの関係 4つの衛星を使って位置情報を算出 電波の3次元交点の算出+誤差計算 ※スマートフォンはGPSだけではなく携帯電波・Wi-Fiを使った位置測位もしています
  3. ユーザーの位置情報は個人情報につながる ➔ 扱いには注意が必要 ↑バックグラウンドの利用許可 ←位置情報の利用許可 アプリケーションにおいて アプリ開発者がユーザーに 位置情報の使用許可を得るのは必須 iOSアプリにおける位置情報の使用許可は2段階 1.

    フォアグラウンドでの位置情報使用許可 2. バックグラウンドでの位置情報使用許可 • バックグラウンドでの位置情報取得 ➔ ユーザーの許可が得ていれば認められている • アプリを完全に閉じた状態での位置情報取得 ➔ 厳しい制限が設けられている 位置情報とプライバシー
  4. • 緯度・経度 • 高度 (m) • 速度 (m/s) • 方位(デバイスの移動方向

    0-360度) • 緯度・経度の精度 (m) • 高度の精度 (m) • 速度の精度 (m/s) • 方位の精度 (度) 1回の取得で以下の値を取得可能(よく使う値を列挙) iOSとAndroidで値が異なる 例: 富士山の頂上付近 iOS = 3776m Android = 3815m スマートフォンで取得可能な位置情報関連の値 高度について: iOSは標高(楕円体高 - ジオイド高) Androidは楕円体高 ※比較的新しいiOSでは楕円体高も算出可能 iOSでは一番良い精度でも5m程度 参考: 国土地理院「ジオイド」
  5. • 衛星的要因:衛星の位置誤差 衛星時刻の誤差 • 大気的要因:電離層の変化 大気の状態 • 地理的要因:山脈 ビル • 人為的要因:電波干渉 勝手に妨害電波を発する • 機械的要因:受信した衛星数が少ない 受信した衛星同士が近い

    都心では高層ビルが GPS電波を跳ね返す 位置情報の誤差 GPSによる位置情報は様々な要因で誤差が発生 屋内や地下はGPS電波が届かない・反射が多いためGPSによる位置測位は難しい
  6. どれくらいの精度の位置情報を取得したいのか設定 現在地(推定) ユーザーは現在地から 半径100m以内のどこかにいる 精度範囲 例: 100m 受け取りたい位置情報の精度を設定 実際には ここにいるかも

    位置情報精度のイメージ iOSで設定できる値(定数値) • ナビゲーション用の精度 ◦ 他のセンサーも使用して精度を高める • 最高レベルの精度 • 10m以内 • 100m以内 • 1km以内 • 3km以内 参考資料: https://developer.apple.com/documentation/corelocation/cllocationaccuracy 高 低 バッテリー 使用量 位置情報 精度
  7. ユーザーがどれくらい動いたら位置情報を更新するか設定 例: フィルタ値 = 10m 5m移動 GPS信号 5m移動 GPS信号 合計10m移動

    受信 受信 位置測位 位置測位 移動フィルタ 実際には位置測位をしているが 移動距離が満たされておらず破棄