Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スマホアプリで位置情報を取得してみよう(iOS成分多め)
Search
Haruki Inoue
December 19, 2022
Technology
0
500
スマホアプリで位置情報を取得してみよう(iOS成分多め)
MIERUNE_Meetup_mini_2022-12-15の発表資料です。
https://mierune.connpass.com/event/266903/
Haruki Inoue
December 19, 2022
Tweet
Share
More Decks by Haruki Inoue
See All by Haruki Inoue
[FOSS4G 2023 Japan] スマホアプリの地図表示における第三の選択肢 MapLibre Native を使ってみる
kyotonagoya
1
170
[FOSS4G TOKAI 2023 LT] みんな名古屋駅からどこに降りているのか?大都市交通センサスを使って見てみる
kyotonagoya
2
630
Other Decks in Technology
See All in Technology
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
300
アクセシビリティを考慮したUI/CSSフレームワーク・ライブラリ選定
yajihum
2
1k
Meta Quest 3 で動く桜マシマシ WebXR アプリを IBM Cloud Code Engine と Babylon.js で作った話
1ftseabass
PRO
0
120
LangSmith入門―トレース/評価/プロンプト管理などを担うLLMアプリ開発プラットフォーム
os1ma
3
320
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
0
310
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
210
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
170
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
データベース02: データベースの概念
trycycle
0
160
APIファーストなプロダクトマネジメントの実践 〜SaaSus Platformでの例〜 / "Practicing API-First Product Management - An Example with SaaSus Platform
oztick139
0
110
SIEMを用いて、セキュリティログ分析の可視化と分析を実現し、PDCAサイクルを回してみた
coconala_engineer
0
330
アクセス制御にまつわる改善 / Improving access control
itkq
0
550
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Designing for Performance
lara
601
67k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
187
16k
The Cult of Friendly URLs
andyhume
74
5.7k
Automating Front-end Workflow
addyosmani
1356
200k
Creatively Recalculating Your Daily Design Routine
revolveconf
210
11k
Code Review Best Practice
trishagee
55
15k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
274
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
Transcript
スマホアプリで位置情報を取得してみよう (iOS成分多め) マルティスープ株式会社 井上 晴稀
自己紹介 井上 晴稀 (いのうえ はるき) 25歳 マルティスープ株式会社 iOSアプリエンジニア iField 位置情報を用いた動態管理アプリを作ってます
• 1997年 愛知県名古屋市生まれ • 1999年? 愛知県豊橋市に引っ越し • 2021年 千葉県流山市に引っ越して上京 @kyotonagoya1476 場所の履歴書 休日は電車などを使って色んな場所に行っています
位置情報の種類 屋外の位置情報 (地図上における位置情報) ©OpenStreetMap contributors 屋内の位置情報 バーチャルの位置情報
位置情報の種類 屋外の位置情報 (地図上における位置情報) ©OpenStreetMap contributors 屋内の位置情報 バーチャルの位置情報 きょう話す内容 ※ネイティブアプリ
ユーザーの位置情報 スマートフォンでユーザーの位置情報が取得可能 スマートフォンの中に GPS受信機が搭載 ナビゲーション 広告 流山市のみなさん! お得なセールです! 私達の暮らしの中で いろんな形で活用
Lat: 35.871778, Lon: 139.925 次の交差点を 左に曲がります ©OpenStreetMap contributors ユーザーの位置情報を取得
GNSS衛星測位システム 人工衛星からの信号を使って 位置測位などを行うシステム GPS グローバルポジショニングシステム アメリカが運営しているGNSS GPSは元々軍事用で開発 ➔航空機事故を境に一般開放(諸説あり) 位置測位システム GNSS/GPS
GNSSの一種
受信機 (スマホ) GPS衛星が送信する情報 • 時刻データ • 衛星の軌道位置 受信機(スマホ)が位置情報を算出 GPS衛星が送信する情報に 受信機(スマホ)の位置情報は存在しない
GPSとスマートフォンの関係 4つの衛星を使って位置情報を算出 電波の3次元交点の算出+誤差計算 ※スマートフォンはGPSだけではなく携帯電波・Wi-Fiを使った位置測位もしています
大まかな実装の流れ 具体的な実装方法は公式ドキュメントなどを参照してください iOSでは 「CoreLocation」を使って位置情報に関する処理を実装 ① ユーザーの位置情報取得の許可状態を確認 ② 位置情報の取得設定を定義(フィルタ・バックグラウンド取得など) ③ 位置情報の測位開始
④ 位置情報を受け取ったときの処理を定義 位置情報を受け取ったときに実行する関数が用意されている そこで位置情報に関するデータを取ってくる処理などを定義
ユーザーの位置情報は個人情報につながる ➔ 扱いには注意が必要 ↑バックグラウンドの利用許可 ←位置情報の利用許可 アプリケーションにおいて アプリ開発者がユーザーに 位置情報の使用許可を得るのは必須 iOSアプリにおける位置情報の使用許可は2段階 1.
フォアグラウンドでの位置情報使用許可 2. バックグラウンドでの位置情報使用許可 • バックグラウンドでの位置情報取得 ➔ ユーザーの許可が得ていれば認められている • アプリを完全に閉じた状態での位置情報取得 ➔ 厳しい制限が設けられている 位置情報とプライバシー
• 緯度・経度 • 高度 (m) • 速度 (m/s) • 方位(デバイスの移動方向
0-360度) • 緯度・経度の精度 (m) • 高度の精度 (m) • 速度の精度 (m/s) • 方位の精度 (度) 1回の取得で以下の値を取得可能(よく使う値を列挙) iOSとAndroidで値が異なる 例: 富士山の頂上付近 iOS = 3776m Android = 3815m スマートフォンで取得可能な位置情報関連の値 高度について: iOSは標高(楕円体高 - ジオイド高) Androidは楕円体高 ※比較的新しいiOSでは楕円体高も算出可能 iOSでは一番良い精度でも5m程度 参考: 国土地理院「ジオイド」
• 衛星的要因:衛星の位置誤差 衛星時刻の誤差 • 大気的要因:電離層の変化 大気の状態 • 地理的要因:山脈 ビル • 人為的要因:電波干渉 勝手に妨害電波を発する • 機械的要因:受信した衛星数が少ない 受信した衛星同士が近い
都心では高層ビルが GPS電波を跳ね返す 位置情報の誤差 GPSによる位置情報は様々な要因で誤差が発生 屋内や地下はGPS電波が届かない・反射が多いためGPSによる位置測位は難しい
• 移動距離による取得制限 • 受け取りたい位置情報の精度 ソースコード内で位置取得の設定をかけることが可能 (下記の項目はiOSの例) スマートフォンでの位置情報取得制御 ただし最短の位置取得間隔は1秒に1回 例: 移動距離によるフィルタを0mにしていても1秒経過しないと取得されない
どれくらいの精度の位置情報を取得したいのか設定 現在地(推定) ユーザーは現在地から 半径100m以内のどこかにいる 精度範囲 例: 100m 受け取りたい位置情報の精度を設定 実際には ここにいるかも
位置情報精度のイメージ iOSで設定できる値(定数値) • ナビゲーション用の精度 ◦ 他のセンサーも使用して精度を高める • 最高レベルの精度 • 10m以内 • 100m以内 • 1km以内 • 3km以内 参考資料: https://developer.apple.com/documentation/corelocation/cllocationaccuracy 高 低 バッテリー 使用量 位置情報 精度
ユーザーがどれくらい動いたら位置情報を更新するか設定 例: フィルタ値 = 10m 5m移動 GPS信号 5m移動 GPS信号 合計10m移動
受信 受信 位置測位 位置測位 移動フィルタ 実際には位置測位をしているが 移動距離が満たされておらず破棄
ジオフェンス機能 指定した座標から半径nメートル以内に ユーザーが入っているかどうか判定(判定は少し遅め?) 円形のジオフェンスのみ対応 OUT IN 滞在記録機能 ユーザーが特定の地点からの動きがない場合 その場所に滞在したと判定して位置情報を記録 滞在した場所の座標と滞在日時を記録
例: お店で食事 座標: (135.0,35.0) 到着: 10:00 出発: 10:20 ジェオフェンスと滞在記録機能 iOSは20個 Androidは100個までジオフェンスの設定が可能
おわりに スマホアプリで位置情報に関する様々な情報を取得できます ぜひ皆さんも一度スマホアプリで位置情報を活用してみませんか? ナビゲーション ©OpenStreetMap contributors 天気予報 乗換案内 位置情報を活用すると便利な世の中が期待できます
位置情報取得のデモ 位置情報の履歴をマップ上に表示するアプリ 地図上の青い丸 地図ライブラリの現在位置表示 赤い線 CoreLocationで取得した位置情報の軌跡 家の近くの中学校の隣にある遊歩道で徒歩で移動